You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by uc...@apache.org on 2015/04/22 16:16:58 UTC

[01/30] flink git commit: [docs] Change doc layout

Repository: flink
Updated Branches:
  refs/heads/master 6df1dd2cc -> f1ee90ccb


http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/web_client.md
----------------------------------------------------------------------
diff --git a/docs/web_client.md b/docs/web_client.md
deleted file mode 100644
index 34d7274..0000000
--- a/docs/web_client.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-title:  "Web Client"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-Flink provides a web interface to upload jobs, inspect their execution plans, and execute them. The interface is a great tool to showcase programs, debug execution plans, or demonstrate the system as a whole.
-
-## Starting, Stopping, and Configuring the Web Interface
-
-Start the web interface by executing:
-
-    ./bin/start-webclient.sh
-
-and stop it by calling:
-
-    ./bin/stop-webclient.sh
-
-The web interface runs on port 8080 by default. To specify a custom port set the ```webclient.port``` property in the *./conf/flink.yaml* configuration file. Jobs are submitted to the JobManager specified by ```jobmanager.rpc.address``` and ```jobmanager.rpc.port```. Please consult the [configuration](config.html#webclient) page for details and further configuration options.
-
-## Using the Web Interface
-
-The web interface provides two views:
-
-1.  The **job view** to upload, preview, and submit Flink programs.
-2.  The **plan view** to analyze the optimized execution plans of Flink programs.
-
-### Job View
-
-The interface starts serving the job view. 
-
-You can **upload** a Flink program as a jar file. To **execute** an uploaded program:
-
-* select it from the job list on the left, 
-* enter the program arguments in the *"Arguments"* field (bottom left), and 
-* click on the *"Run Job"* button (bottom right).
-
-If the *“Show optimizer plan”* option is enabled (default), the *plan view* is display next, otherwise the job is directly submitted to the JobManager for execution.
-
-In case the jar's manifest file does not specify the program class, you can specify it before the argument list as:
-
-```
-assembler <assemblerClass> <programArgs...>
-```
-
-### Plan View
-
-The plan view shows the optimized execution plan of the submitted program in the upper half of the page. The bottom part of the page displays detailed information about the currently selected plan operator including:
-
-* the chosen shipping strategies (local forward, hash partition, range partition, broadcast, ...),
-* the chosen local strategy (sort, hash join, merge join, ...),
-* inferred data properties (partitioning, grouping, sorting), and 
-* used optimizer estimates (data size, I/O and network costs, ...).
-
-To submit the job for execution, click again on the *"Run Job"* button in the bottom right.

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/yarn_setup.md
----------------------------------------------------------------------
diff --git a/docs/yarn_setup.md b/docs/yarn_setup.md
deleted file mode 100644
index 7daf573..0000000
--- a/docs/yarn_setup.md
+++ /dev/null
@@ -1,264 +0,0 @@
----
-title:  "YARN Setup"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-## Quickstart: Start a long-running Flink cluster on YARN
-
-Start a YARN session with 4 Task Managers (each with 4 GB of Heapspace):
-
-~~~bash
-wget {{ site.FLINK_WGET_URL_YARN_THIS }}
-tar xvzf flink-{{ site.FLINK_VERSION_THIS_HADOOP2 }}-bin-hadoop2.tgz
-cd flink-{{ site.FLINK_VERSION_THIS_HADOOP2 }}/
-./bin/yarn-session.sh -n 4 -jm 1024 -tm 4096
-~~~
-
-Specify the `-s` flag for the number of processing slots per Task Manager. We recommend to set the number of slots to the number of processors per machine.
-
-Once the session has been started, you can submit jobs to the cluster using the `./bin/flink` tool.
-
-## Quickstart: Run a Flink job on YARN
-
-~~~bash
-wget {{ site.FLINK_WGET_URL_YARN_THIS }}
-tar xvzf flink-{{ site.FLINK_VERSION_THIS_HADOOP2 }}-bin-hadoop2.tgz
-cd flink-{{ site.FLINK_VERSION_THIS_HADOOP2 }}/
-./bin/flink -m yarn-cluster -yn 4 -yjm 1024 -ytm 4096 ./examples/flink-java-examples-{{ site.FLINK_VERSION_THIS_HADOOP2 }}-WordCount.jar
-~~~
-
-## Apache Flink on Hadoop YARN using a YARN Session
-
-Apache [Hadoop YARN](http://hadoop.apache.org/) is a cluster resource management framework. It allows to run various distributed applications on top of a cluster. Flink runs on YARN next to other applications. Users do not have to setup or install anything if there is already a YARN setup.
-
-**Requirements**
-
-- Apache Hadoop 2.2
-- HDFS (Hadoop Distributed File System) (or another distributed file system supported by Hadoop)
-
-If you have troubles using the Flink YARN client, have a look in the [FAQ section](faq.html).
-
-### Start Flink Session
-
-Follow these instructions to learn how to launch a Flink Session within your YARN cluster.
-
-A session will start all required Flink services (JobManager and TaskManagers) so that you can submit programs to the cluster. Note that you can run multiple programs per session.
-
-#### Download Flink for YARN
-
-Download the YARN tgz package on the [download page]({{site.baseurl}}/downloads.html). It contains the required files.
-
-Extract the package using:
-
-~~~bash
-tar xvzf flink-{{ site.FLINK_VERSION_THIS_HADOOP2 }}-bin-hadoop2.tgz
-cd flink-{{site.FLINK_VERSION_THIS_HADOOP2 }}/
-~~~
-
-If you want to build the YARN .tgz file from sources, follow the [build instructions](building.html). You can find the result of the build in `flink-dist/target/flink-{{ site.FLINK_VERSION_THIS_HADOOP2 }}-bin/flink-{{ site.FLINK_VERSION_THIS_HADOOP2 }}/` (*Note: The version might be different for you* ).
-
-
-#### Start a Session
-
-Use the following command to start a session
-
-~~~bash
-./bin/yarn-session.sh
-~~~
-
-This command will show you the following overview:
-
-~~~bash
-Usage:
-   Required
-     -n,--container <arg>   Number of YARN container to allocate (=Number of Task Managers)
-   Optional
-     -D <arg>                        Dynamic properties
-     -d,--detached                   Start detached
-     -jm,--jobManagerMemory <arg>    Memory for JobManager Container [in MB]
-     -q,--query                      Display available YARN resources (memory, cores)
-     -qu,--queue <arg>               Specify YARN queue.
-     -s,--slots <arg>                Number of slots per TaskManager
-     -tm,--taskManagerMemory <arg>   Memory per TaskManager Container [in MB]
-~~~
-
-Please note that the Client requires the `YARN_CONF_DIR` or `HADOOP_CONF_DIR` environment variable to be set to read the YARN and HDFS configuration.
-
-**Example:** Issue the following command to allocate 10 Task Managers, with 8 GB of memory and 32 processing slots each:
-
-~~~bash
-./bin/yarn-session.sh -n 10 -tm 8192 -s 32
-~~~
-
-The system will use the configuration in `conf/flink-config.yaml`. Please follow our [configuration guide](config.html) if you want to change something. 
-
-Flink on YARN will overwrite the following configuration parameters `jobmanager.rpc.address` (because the JobManager is always allocated at different machines), `taskmanager.tmp.dirs` (we are using the tmp directories given by YARN) and `parallelism.default` if the number of slots has been specified.
-
-If you don't want to change the configuration file to set configuration parameters, there is the option to pass dynamic properties via the `-D` flag. So you can pass parameters this way: `-Dfs.overwrite-files=true -Dtaskmanager.network.numberOfBuffers=16368`.
-
-The example invocation starts 11 containers, since there is one additional container for the ApplicationMaster and Job Manager.
-
-Once Flink is deployed in your YARN cluster, it will show you the connection details of the Job Manager.
-
-Stop the YARN session by stopping the unix process (using CTRL+C) or by entering 'stop' into the client.
-
-#### Detached YARN session
-
-If you do not want to keep the Flink YARN client running all the time, its also possible to start a *detached* YARN session. 
-The parameter for that is called `-d` or `--detached`.
-
-In that case, the Flink YARN client will only submit Flink to the cluster and then close itself.
-Note that in this case its not possible to stop the YARN session using Flink.
-
-Use the YARN utilities (`yarn application -kill <appId`) to stop the YARN session.
-
-
-### Submit Job to Flink
-
-Use the following command to submit a Flink program to the YARN cluster:
-
-~~~bash
-./bin/flink
-~~~
-
-Please refer to the documentation of the [commandline client](cli.html).
-
-The command will show you a help menu like this:
-
-~~~bash
-[...]
-Action "run" compiles and runs a program.
-
-  Syntax: run [OPTIONS] <jar-file> <arguments>
-  "run" action arguments:
-     -c,--class <classname>           Class with the program entry point ("main"
-                                      method or "getPlan()" method. Only needed
-                                      if the JAR file does not specify the class
-                                      in its manifest.
-     -m,--jobmanager <host:port>      Address of the JobManager (master) to
-                                      which to connect. Use this flag to connect
-                                      to a different JobManager than the one
-                                      specified in the configuration.
-     -p,--parallelism <parallelism>   The parallelism with which to run the
-                                      program. Optional flag to override the
-                                      default value specified in the
-                                      configuration
-~~~
-
-Use the *run* action to submit a job to YARN. The client is able to determine the address of the JobManager. In the rare event of a problem, you can also pass the JobManager address using the `-m` argument. The JobManager address is visible in the YARN console.
-
-**Example**
-
-~~~bash
-wget -O apache-license-v2.txt http://www.apache.org/licenses/LICENSE-2.0.txt
-hadoop fs -copyFromLocal LICENSE-2.0.txt hdfs:/// ...
-./bin/flink run ./examples/flink-java-examples-{{site.FLINK_VERSION_THIS_HADOOP2 }}-WordCount.jar \
-        hdfs:///..../apache-license-v2.txt hdfs:///.../wordcount-result.txt
-~~~
-
-If there is the following error, make sure that all TaskManagers started:
-
-~~~bash
-Exception in thread "main" org.apache.flink.compiler.CompilerException:
-    Available instances could not be determined from job manager: Connection timed out.
-~~~
-
-You can check the number of TaskManagers in the JobManager web interface. The address of this interface is printed in the YARN session console.
-
-If the TaskManagers do not show up after a minute, you should investigate the issue using the log files.
-
-
-## Run a single Flink job on Hadoop YARN
-
-The documentation above describes how to start a Flink cluster within a Hadoop YARN environment.
-It is also possible to launch Flink within YARN only for executing a single job.
-
-Please note that the client then expects the `-yn` value to be set (number of TaskManagers).
-
-***Example:***
-
-~~~bash
-./bin/flink run -m yarn-cluster -yn 2 ./examples/flink-java-examples-{{site.FLINK_VERSION_THIS_HADOOP2 }}-WordCount.jar 
-~~~
-
-The command line options of the YARN session are also available with the `./bin/flink` tool. They are prefixed with a `y` or `yarn` (for the long argument options).
-
-
-## Recovery behavior of Flink on YARN
-
-Flink's YARN client has the following configuration parameters to control how to behave in case of container failures. These parameters can be set either from the `conf/flink-conf.yaml` or when starting the YARN session, using `-D` parameters.
-
-- `yarn.reallocate-failed`: This parameter controls whether Flink should reallocate failed TaskManager containers. Default: true
-- `yarn.maximum-failed-containers`: The maximum number of failed containers the ApplicationMaster accepts until it fails the YARN session. Default: The number of initally requested TaskManagers (`-n`).
-- `yarn.application-attempts`: The number of ApplicationMaster (+ its TaskManager containers) attempts. If this value is set to 1 (default), the entire YARN session will fail when the Application master fails. Higher values specify the number of restarts of the ApplicationMaster by YARN.
-
-
-## Debugging a failed YARN session
-
-There are many reasons why a Flink YARN session deployment can fail. A misconfigured Hadoop setup (HDFS permissions, YARN configuration), version incompatibilities (running Flink with vanilla Hadoop dependencies on Cloudera Hadoop) or other errors.
-
-### Log Files
-
-In cases where the Flink YARN session fails during the deployment itself, users have to rely on the logging capabilities of Hadoop YARN. The most useful feature for that is the [YARN log aggregation](http://hortonworks.com/blog/simplifying-user-logs-management-and-access-in-yarn/). 
-To enable it, users have to set the `yarn.log-aggregation-enable` property to `true` in the `yarn-site.xml` file.
-Once that is enabled, users can use the following command to retrieve all log files of a (failed) YARN session.
-
-~~~
-yarn logs -applicationId <application ID>
-~~~
-
-Note that it takes a few seconds after the session has finished until the logs show up.
-
-### YARN Client console & Webinterfaces
-
-The Flink YARN client also prints error messages in the terminal if errors occur during runtime (for example if a TaskManager stops working after some time).
-
-In addition to that, there is the YARN Resource Manager webinterface (by default on port 8088). The port of the Resource Manager web interface is determined by the `yarn.resourcemanager.webapp.address` configuration value. 
-
-It allows to access log files for running YARN applications and shows diagnostics for failed apps.
-
-
-## Build YARN client for a specific Hadoop version
-
-Users using Hadoop distributions from companies like Hortonworks, Cloudera or MapR might have to build Flink against their specific versions of Hadoop (HDFS) and YARN. Please read the [build instructions](building.html) for more details.
-
-
-## Background / Internals
-
-This section briefly describes how Flink and YARN interact. 
-
-<img src="img/FlinkOnYarn.svg" class="img-responsive">
-
-The YARN client needs to access the Hadoop configuration to connect to the YARN resource manager and to HDFS. It determines the Hadoop configuration using the following strategy:
-
-* Test if `YARN_CONF_DIR`, `HADOOP_CONF_DIR` or `HADOOP_CONF_PATH` are set (in that order). If one of these variables are set, they are used to read the configuration.
-* If the above strategy fails (this should not be the case in a correct YARN setup), the client is using the `HADOOP_HOME` environment variable. If it is set, the client tries to access `$HADOOP_HOME/etc/hadoop` (Hadoop 2) and `$HADOOP_HOME/conf` (Hadoop 1).
-
-When starting a new Flink YARN session, the client first checks if the requested resources (containers and memory) are available. After that, it uploads a jar that contains Flink and the configuration to HDFS (step 1).
-
-The next step of the client is to request (step 2) a YARN container to start the *ApplicationMaster* (step 3). Since the client registered the configuration and jar-file as a resource for the container, the NodeManager of YARN running on that particular machine will take care of preparing the container (e.g. downloading the files). Once that has finished, the *ApplicationMaster* (AM) is started.
-
-The *JobManager* and AM are running in the same container. Once they successfully started, the AM knows the address of the JobManager (its own host). It is generating a new Flink configuration file for the TaskManagers (so that they can connect to the JobManager). The file is also uploaded to HDFS. Additionally, the *AM* container is also serving Flink's web interface. The ports Flink is using for its services are the standard ports configured by the user + the application id as an offset. This allows users to execute multiple Flink YARN sessions in parallel.
-
-After that, the AM starts allocating the containers for Flink's TaskManagers, which will download the jar file and the modified configuration from the HDFS. Once these steps are completed, Flink is set up and ready to accept Jobs.
-


[15/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/stack.svg
----------------------------------------------------------------------
diff --git a/docs/img/stack.svg b/docs/img/stack.svg
deleted file mode 100644
index 7cdebc2..0000000
--- a/docs/img/stack.svg
+++ /dev/null
@@ -1,606 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.0"
-   width="223.19mm"
-   height="120.14mm"
-   id="svg2"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="Picture1.emf">
-  <metadata
-     id="metadata252">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="640"
-     inkscape:window-height="480"
-     id="namedview250"
-     showgrid="false"
-     inkscape:zoom="0.43625014"
-     inkscape:cx="395.41534"
-     inkscape:cy="212.84645"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="svg2" />
-  <defs
-     id="defs4" />
-  <g
-     id="g6">
-    <path
-       style="fill:#d7e4bd;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 336.62761 106.86412   C 336.62761 102.73809 339.96594 99.399763 344.09197 99.399763   L 478.01909 99.399763   C 482.14511 99.399763 485.48345 102.73809 485.48345 106.86412   L 485.48345 136.72156   C 485.48345 140.84759 482.14511 144.18592 478.01909 144.18592   L 344.09197 144.18592   C 339.96594 144.18592 336.62761 140.84759 336.62761 136.72156   z"
-       id="path8" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 336.62761 106.86412   C 336.62761 102.73809 339.96594 99.399763 344.09197 99.399763   L 478.01909 99.399763   C 482.14511 99.399763 485.48345 102.73809 485.48345 106.86412   L 485.48345 136.72156   C 485.48345 140.84759 482.14511 144.18592 478.01909 144.18592   L 344.09197 144.18592   C 339.96594 144.18592 336.62761 140.84759 336.62761 136.72156   z"
-       id="path10" />
-    <text
-       xml:space="preserve"
-       x="363.12525"
-       y="130.71455"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text12">Java API</text>
-    <path
-       style="fill:#8eb4e3;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 159.41471 226.06882   C 159.41471 221.08008 163.46572 217.02907 168.45447 217.02907   L 774.19287 217.02907   C 779.18161 217.02907 783.23262 221.08008 783.23262 226.06882   L 783.23262 262.26534   C 783.23262 267.25408 779.18161 271.30509 774.19287 271.30509   L 168.45447 271.30509   C 163.46572 271.30509 159.41471 267.25408 159.41471 262.26534   z"
-       id="path14" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 159.41471 226.06882   C 159.41471 221.08008 163.46572 217.02907 168.45447 217.02907   L 774.19287 217.02907   C 779.18161 217.02907 783.23262 221.08008 783.23262 226.06882   L 783.23262 262.26534   C 783.23262 267.25408 779.18161 271.30509 774.19287 271.30509   L 168.45447 271.30509   C 163.46572 271.30509 159.41471 267.25408 159.41471 262.26534   z"
-       id="path16" />
-    <text
-       xml:space="preserve"
-       x="393.65398"
-       y="253.07254"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text18">Flink Runtime</text>
-    <path
-       style="fill:#c6d9f1;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 258.66444 162.34044   C 258.66444 157.27668 262.71545 153.22567 267.77921 153.22567   L 774.11785 153.22567   C 779.18161 153.22567 783.23262 157.27668 783.23262 162.34044   L 783.23262 198.79953   C 783.23262 203.82578 779.18161 207.9143 774.11785 207.9143   L 267.77921 207.9143   C 262.71545 207.9143 258.66444 203.82578 258.66444 198.79953   z"
-       id="path20" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 258.66444 162.34044   C 258.66444 157.27668 262.71545 153.22567 267.77921 153.22567   L 774.11785 153.22567   C 779.18161 153.22567 783.23262 157.27668 783.23262 162.34044   L 783.23262 198.79953   C 783.23262 203.82578 779.18161 207.9143 774.11785 207.9143   L 267.77921 207.9143   C 262.71545 207.9143 258.66444 203.82578 258.66444 198.79953   z"
-       id="path22" />
-    <text
-       xml:space="preserve"
-       x="348.84817"
-       y="189.46831"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text24">Flink Common API / Optimizer</text>
-    <path
-       style="fill:#93cddd;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 498.23662 106.86412   C 498.23662 102.73809 501.57495 99.399763 505.70098 99.399763   L 618.37905 99.399763   C 622.50508 99.399763 625.84341 102.73809 625.84341 106.86412   L 625.84341 136.72156   C 625.84341 140.84759 622.50508 144.18592 618.37905 144.18592   L 505.70098 144.18592   C 501.57495 144.18592 498.23662 140.84759 498.23662 136.72156   z"
-       id="path26" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 498.23662 106.86412   C 498.23662 102.73809 501.57495 99.399763 505.70098 99.399763   L 618.37905 99.399763   C 622.50508 99.399763 625.84341 102.73809 625.84341 106.86412   L 625.84341 136.72156   C 625.84341 140.84759 622.50508 144.18592 618.37905 144.18592   L 505.70098 144.18592   C 501.57495 144.18592 498.23662 140.84759 498.23662 136.72156   z"
-       id="path28" />
-    <text
-       xml:space="preserve"
-       x="508.83228"
-       y="130.71455"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text30">Scala</text>
-    <text
-       xml:space="preserve"
-       x="576.94925"
-       y="130.71455"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text32">API</text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 637.69637 106.90163   C 637.69637 102.7756 641.0347 99.399763 645.16073 99.399763   L 774.83053 99.399763   C 778.95656 99.399763 782.3324 102.7756 782.3324 106.90163   L 782.3324 136.8716   C 782.3324 141.03514 778.95656 144.37347 774.83053 144.37347   L 645.16073 144.37347   C 641.0347 144.37347 637.69637 141.03514 637.69637 136.8716   z"
-       id="path34" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.037509345px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 636.42105 136.8716   L 636.42105 134.39598   L 638.93417 134.39598   L 638.93417 136.8716   z  M 636.42105 131.88286   L 636.42105 129.36973   L 638.93417 129.36973   L 638.93417 131.88286   z  M 636.42105 126.89411   L 636.42105 124.38099   L 638.93417 124.38099   L 638.93417 126.89411   z  M 636.42105 121.86786   L 636.42105 119.39224   L 638.93417 119.39224   L 638.93417 121.86786   z  M 636.42105 116.87912   L 636.42105 114.36599   L 638.93417 114.36599   L 638.93417 116.87912   z  M 636.42105 111.89037   L 636.42105 109.37725   L 638.93417 109.37725   L 638.93417 111.89037   z  M 636.42105 106.82661   L 636.45856 106.07643   L 636.6086 105.21371   L 636.79614 104.351   L 636.94618 104.01341   L 639.27176 104.87613   L 639.23425 104.98866   L 639.08421 105.5888   L 638.97168 106.18895   L 638.93417 106.93914   z  M 638.37153 101.46278   L 638.89667 100.82512   C 638.97168 100.7501 639.00919 100.71259 639.08421 100.63757   L 640.17198 99.737347   C 640.247 99.699838
  640.28451 99.662328 640.32202 99.624819   L 640.50957 99.512291   L 641.82239 101.65032   L 641.63485 101.76285   L 641.78488 101.65032   L 640.69711 102.58806   L 640.84715 102.40051   L 640.32202 103.07568   z  M 643.13522 98.42452   L 643.36028 98.349501   L 644.22299 98.236973   L 645.12322 98.161955   L 645.94842 98.161955   L 645.94842 100.67508   L 645.23574 100.67508   L 644.59809 100.67508   L 643.99794 100.78761   L 643.77288 100.82512   z  M 648.46155 98.161955   L 650.93716 98.161955   L 650.93716 100.67508   L 648.46155 100.67508   z  M 653.45029 98.161955   L 655.96342 98.161955   L 655.96342 100.67508   L 653.45029 100.67508   z  M 658.43903 98.161955   L 660.95216 98.161955   L 660.95216 100.67508   L 658.43903 100.67508   z  M 663.46529 98.161955   L 665.9409 98.161955   L 665.9409 100.67508   L 663.46529 100.67508   z  M 668.45403 98.161955   L 670.96715 98.161955   L 670.96715 100.67508   L 668.45403 100.67508   z  M 673.44277 98.161955   L 675.9559 98.161955   L
  675.9559 100.67508   L 673.44277 100.67508   z  M 678.46902 98.161955   L 680.94464 98.161955   L 680.94464 100.67508   L 678.46902 100.67508   z  M 683.45777 98.161955   L 685.97089 98.161955   L 685.97089 100.67508   L 683.45777 100.67508   z  M 688.44651 98.161955   L 690.95964 98.161955   L 690.95964 100.67508   L 688.44651 100.67508   z  M 693.47276 98.161955   L 695.94838 98.161955   L 695.94838 100.67508   L 693.47276 100.67508   z  M 698.4615 98.161955   L 700.97463 98.161955   L 700.97463 100.67508   L 698.4615 100.67508   z  M 703.45025 98.161955   L 705.96337 98.161955   L 705.96337 100.67508   L 703.45025 100.67508   z  M 708.4765 98.161955   L 710.95212 98.161955   L 710.95212 100.67508   L 708.4765 100.67508   z  M 713.46524 98.161955   L 715.97837 98.161955   L 715.97837 100.67508   L 713.46524 100.67508   z  M 718.45398 98.161955   L 720.96711 98.161955   L 720.96711 100.67508   L 718.45398 100.67508   z  M 723.48024 98.161955   L 725.95585 98.161955   L 725.95585 1
 00.67508   L 723.48024 100.67508   z  M 728.46898 98.161955   L 730.98211 98.161955   L 730.98211 100.67508   L 728.46898 100.67508   z  M 733.45772 98.161955   L 735.97085 98.161955   L 735.97085 100.67508   L 733.45772 100.67508   z  M 738.48397 98.161955   L 740.95959 98.161955   L 740.95959 100.67508   L 738.48397 100.67508   z  M 743.47272 98.161955   L 745.98584 98.161955   L 745.98584 100.67508   L 743.47272 100.67508   z  M 748.46146 98.161955   L 750.97459 98.161955   L 750.97459 100.67508   L 748.46146 100.67508   z  M 753.48771 98.161955   L 755.96333 98.161955   L 755.96333 100.67508   L 753.48771 100.67508   z  M 758.47646 98.161955   L 760.98958 98.161955   L 760.98958 100.67508   L 758.47646 100.67508   z  M 763.4652 98.161955   L 765.97832 98.161955   L 765.97832 100.67508   L 763.4652 100.67508   z  M 768.49145 98.161955   L 770.96707 98.161955   L 770.96707 100.67508   L 768.49145 100.67508   z  M 773.48019 98.161955   L 774.83053 98.161955   L 775.65574 98.199464 
   L 776.14336 98.274483   L 775.76826 100.7501   L 775.54321 100.71259   L 774.83053 100.67508   L 773.48019 100.67508   z  M 778.88154 99.137198   L 778.95656 99.174707   L 779.66924 99.624819   C 779.74425 99.662328 779.78176 99.699838 779.81927 99.737347   L 780.94455 100.63757   C 780.98206 100.71259 781.05708 100.7501 781.09459 100.82512   L 781.28214 101.01266   L 779.33165 102.58806   L 779.18161 102.40051   L 779.33165 102.58806   L 778.24388 101.65032   L 778.39392 101.76285   L 777.86879 101.46278   L 777.79377 101.42527   z  M 782.82002 103.33824   L 782.85753 103.45077   L 783.1576 104.23847   L 783.38266 105.10118   L 783.5327 105.9639   L 783.5327 106.22646   L 781.05708 106.33899   L 781.05708 106.33899   L 780.98206 105.70133   L 780.83202 105.10118   L 780.60697 104.53854   L 780.56946 104.42602   z  M 783.57021 108.7771   L 783.57021 111.29023   L 781.09459 111.29023   L 781.09459 108.7771   z  M 783.57021 113.80335   L 783.57021 116.27897   L 781.09459 116.27897  
  L 781.09459 113.80335   z  M 783.57021 118.79209   L 783.57021 121.30522   L 781.09459 121.30522   L 781.09459 118.79209   z  M 783.57021 123.78084   L 783.57021 126.29396   L 781.09459 126.29396   L 781.09459 123.78084   z  M 783.57021 128.80709   L 783.57021 131.28271   L 781.09459 131.28271   L 781.09459 128.80709   z  M 783.57021 133.79583   L 783.57021 136.30896   L 781.09459 136.30896   L 781.09459 133.79583   z  M 783.30764 139.08465   L 783.19511 139.42223   L 782.93255 140.24744   L 782.55745 140.99763   L 782.14485 141.7103   L 780.00682 140.39748   L 780.30689 139.94736   L 780.56946 139.38472   L 780.79452 138.78457   L 780.86953 138.44699   z  M 780.15686 143.81083   L 779.81927 144.07339   L 779.06909 144.56101   L 778.28139 144.93611   L 777.56871 145.19867   L 776.74351 142.83558   L 777.23113 142.64804   L 777.75626 142.42298   L 778.24388 142.12291   L 778.54395 141.86034   z  M 774.68049 145.64878   L 772.20488 145.64878   L 772.20488 143.13566   L 774.68049 143.
 13566   z  M 769.69175 145.64878   L 767.17862 145.64878   L 767.17862 143.13566   L 769.69175 143.13566   z  M 764.70301 145.64878   L 762.18988 145.64878   L 762.18988 143.13566   L 764.70301 143.13566   z  M 759.67675 145.64878   L 757.20114 145.64878   L 757.20114 143.13566   L 759.67675 143.13566   z  M 754.68801 145.64878   L 752.17489 145.64878   L 752.17489 143.13566   L 754.68801 143.13566   z  M 749.69927 145.64878   L 747.18614 145.64878   L 747.18614 143.13566   L 749.69927 143.13566   z  M 744.67302 145.64878   L 742.1974 145.64878   L 742.1974 143.13566   L 744.67302 143.13566   z  M 739.68427 145.64878   L 737.17115 145.64878   L 737.17115 143.13566   L 739.68427 143.13566   z  M 734.69553 145.64878   L 732.1824 145.64878   L 732.1824 143.13566   L 734.69553 143.13566   z  M 729.66928 145.64878   L 727.19366 145.64878   L 727.19366 143.13566   L 729.66928 143.13566   z  M 724.68054 145.64878   L 722.16741 145.64878   L 722.16741 143.13566   L 724.68054 143.13566   z  
 M 719.69179 145.64878   L 717.17867 145.64878   L 717.17867 143.13566   L 719.69179 143.13566   z  M 714.66554 145.64878   L 712.18992 145.64878   L 712.18992 143.13566   L 714.66554 143.13566   z  M 709.6768 145.64878   L 707.16367 145.64878   L 707.16367 143.13566   L 709.6768 143.13566   z  M 704.68806 145.64878   L 702.17493 145.64878   L 702.17493 143.13566   L 704.68806 143.13566   z  M 699.6618 145.64878   L 697.18619 145.64878   L 697.18619 143.13566   L 699.6618 143.13566   z  M 694.67306 145.64878   L 692.15993 145.64878   L 692.15993 143.13566   L 694.67306 143.13566   z  M 689.68432 145.64878   L 687.17119 145.64878   L 687.17119 143.13566   L 689.68432 143.13566   z  M 684.65807 145.64878   L 682.18245 145.64878   L 682.18245 143.13566   L 684.65807 143.13566   z  M 679.66932 145.64878   L 677.1562 145.64878   L 677.1562 143.13566   L 679.66932 143.13566   z  M 674.68058 145.64878   L 672.16745 145.64878   L 672.16745 143.13566   L 674.68058 143.13566   z  M 669.65433 1
 45.64878   L 667.17871 145.64878   L 667.17871 143.13566   L 669.65433 143.13566   z  M 664.66558 145.64878   L 662.15246 145.64878   L 662.15246 143.13566   L 664.66558 143.13566   z  M 659.67684 145.64878   L 657.16372 145.64878   L 657.16372 143.13566   L 659.67684 143.13566   z  M 654.65059 145.64878   L 652.17497 145.64878   L 652.17497 143.13566   L 654.65059 143.13566   z  M 649.66185 145.64878   L 647.14872 145.64878   L 647.14872 143.13566   L 649.66185 143.13566   z  M 644.59809 145.61128   L 644.33552 145.61128   L 643.47281 145.46124   L 642.6476 145.23618   L 641.82239 144.97362   L 641.70987 144.8986   L 642.68511 142.61053   L 642.68511 142.61053   L 643.28526 142.83558   L 643.8479 142.98562   L 644.48556 143.09815   L 644.71061 143.09815   z  M 639.38429 143.39822   L 639.08421 143.13566   C 639.00919 143.09815 638.97168 143.06064 638.89667 142.98562   L 637.99644 141.86034   L 637.54633 141.14766   L 639.64685 139.83484   L 639.94693 140.28495   L 640.84715 141.410
 23   L 640.6596 141.22268   L 640.95968 141.44774   z  M 636.57109 138.29695   L 636.49607 137.84684   L 636.42105 136.94662   L 638.93417 136.83409   L 638.97168 137.47175   L 639.0467 137.92186   z"
-       id="path36" />
-    <text
-       xml:space="preserve"
-       x="644.23405"
-       y="130.80306"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text38">SQL,Python</text>
-    <path
-       style="fill:#bfbfbf;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 67.254255 361.62759   C 67.254255 355.6636 72.055451 350.86241 78.019437 350.86241   L 772.46744 350.86241   C 778.43143 350.86241 783.23262 355.6636 783.23262 361.62759   L 783.23262 404.72583   C 783.23262 410.68981 778.43143 415.49101 772.46744 415.49101   L 78.019437 415.49101   C 72.055451 415.49101 67.254255 410.68981 67.254255 404.72583   z"
-       id="path40" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 67.254255 361.62759   C 67.254255 355.6636 72.055451 350.86241 78.019437 350.86241   L 772.46744 350.86241   C 778.43143 350.86241 783.23262 355.6636 783.23262 361.62759   L 783.23262 404.72583   C 783.23262 410.68981 778.43143 415.49101 772.46744 415.49101   L 78.019437 415.49101   C 72.055451 415.49101 67.254255 410.68981 67.254255 404.72583   z"
-       id="path42" />
-    <text
-       xml:space="preserve"
-       x="79.454242"
-       y="390.14011"
-       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text44">Storage </text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 356.48881 365.20973   C 356.48881 360.2585 360.50231 356.22624 365.45354 356.22624   L 449.90583 356.22624   C 454.87582 356.22624 458.88932 360.2585 458.88932 365.20973   L 458.88932 401.12493   C 458.88932 406.09492 454.87582 410.10842 449.90583 410.10842   L 365.45354 410.10842   C 360.50231 410.10842 356.48881 406.09492 356.48881 401.12493   z"
-       id="path46" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 356.48881 365.20973   C 356.48881 360.2585 360.50231 356.22624 365.45354 356.22624   L 449.90583 356.22624   C 454.87582 356.22624 458.88932 360.2585 458.88932 365.20973   L 458.88932 401.12493   C 458.88932 406.09492 454.87582 410.10842 449.90583 410.10842   L 365.45354 410.10842   C 360.50231 410.10842 356.48881 406.09492 356.48881 401.12493   z"
-       id="path48" />
-    <text
-       xml:space="preserve"
-       x="376.31276"
-       y="392.09071"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text50">HDFS </text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 225.39365 365.20973   C 225.39365 360.2585 229.42591 356.22624 234.37714 356.22624   L 331.11374 356.22624   C 336.06497 356.22624 340.09723 360.2585 340.09723 365.20973   L 340.09723 401.12493   C 340.09723 406.09492 336.06497 410.10842 331.11374 410.10842   L 234.37714 410.10842   C 229.42591 410.10842 225.39365 406.09492 225.39365 401.12493   z"
-       id="path52" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 225.39365 365.20973   C 225.39365 360.2585 229.42591 356.22624 234.37714 356.22624   L 331.11374 356.22624   C 336.06497 356.22624 340.09723 360.2585 340.09723 365.20973   L 340.09723 401.12493   C 340.09723 406.09492 336.06497 410.10842 331.11374 410.10842   L 234.37714 410.10842   C 229.42591 410.10842 225.39365 406.09492 225.39365 401.12493   z"
-       id="path54" />
-    <text
-       xml:space="preserve"
-       x="253.91802"
-       y="378.58735"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text56">Local </text>
-    <text
-       xml:space="preserve"
-       x="257.51892"
-       y="405.59407"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text58">Files </text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 472.01759 366.39128   C 472.01759 361.44004 476.03109 357.42654 480.98232 357.42654   L 565.15329 357.42654   C 570.12328 357.42654 574.13678 361.44004 574.13678 366.39128   L 574.13678 402.32523   C 574.13678 407.27646 570.12328 411.28996 565.15329 411.28996   L 480.98232 411.28996   C 476.03109 411.28996 472.01759 407.27646 472.01759 402.32523   z"
-       id="path60" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 472.01759 366.39128   C 472.01759 361.44004 476.03109 357.42654 480.98232 357.42654   L 565.15329 357.42654   C 570.12328 357.42654 574.13678 361.44004 574.13678 366.39128   L 574.13678 402.32523   C 574.13678 407.27646 570.12328 411.28996 565.15329 411.28996   L 480.98232 411.28996   C 476.03109 411.28996 472.01759 407.27646 472.01759 402.32523   z"
-       id="path62" />
-    <text
-       xml:space="preserve"
-       x="508.21008"
-       y="393.27592"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text64">S3</text>
-    <path
-       style="fill:#c3d69b;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 67.254255 291.59764   C 67.254255 285.63366 72.055451 280.79495 78.019437 280.79495   L 772.46744 280.79495   C 778.43143 280.79495 783.23262 285.63366 783.23262 291.59764   L 783.23262 334.69588   C 783.23262 340.65987 778.43143 345.46106 772.46744 345.46106   L 78.019437 345.46106   C 72.055451 345.46106 67.254255 340.65987 67.254255 334.69588   z"
-       id="path66" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 67.254255 291.59764   C 67.254255 285.63366 72.055451 280.79495 78.019437 280.79495   L 772.46744 280.79495   C 778.43143 280.79495 783.23262 285.63366 783.23262 291.59764   L 783.23262 334.69588   C 783.23262 340.65987 778.43143 345.46106 772.46744 345.46106   L 78.019437 345.46106   C 72.055451 345.46106 67.254255 340.65987 67.254255 334.69588   z"
-       id="path68" />
-    <text
-       xml:space="preserve"
-       x="79.454242"
-       y="308.99647"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text70">Cluster</text>
-    <text
-       xml:space="preserve"
-       x="79.454242"
-       y="333.00247"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text72">Manager </text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 412.00264 295.17979   C 412.00264 290.2098 416.01614 286.1963 420.96737 286.1963   L 564.19681 286.1963   C 569.16679 286.1963 573.18029 290.2098 573.18029 295.17979   L 573.18029 331.09498   C 573.18029 336.04622 569.16679 340.07847 564.19681 340.07847   L 420.96737 340.07847   C 416.01614 340.07847 412.00264 336.04622 412.00264 331.09498   z"
-       id="path74" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 412.00264 295.17979   C 412.00264 290.2098 416.01614 286.1963 420.96737 286.1963   L 564.19681 286.1963   C 569.16679 286.1963 573.18029 290.2098 573.18029 295.17979   L 573.18029 331.09498   C 573.18029 336.04622 569.16679 340.07847 564.19681 340.07847   L 420.96737 340.07847   C 416.01614 340.07847 412.00264 336.04622 412.00264 331.09498   z"
-       id="path76" />
-    <text
-       xml:space="preserve"
-       x="462.29091"
-       y="322.04981"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text78">YARN </text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 588.70916 295.19854   C 588.70916 290.2098 592.72266 286.1963 597.6739 286.1963   L 763.24014 286.1963   C 768.19138 286.1963 772.20488 290.2098 772.20488 295.19854   L 772.20488 331.09498   C 772.20488 336.04622 768.19138 340.09723 763.24014 340.09723   L 597.6739 340.09723   C 592.72266 340.09723 588.70916 336.04622 588.70916 331.09498   z"
-       id="path80" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 588.70916 295.19854   C 588.70916 290.2098 592.72266 286.1963 597.6739 286.1963   L 763.24014 286.1963   C 768.19138 286.1963 772.20488 290.2098 772.20488 295.19854   L 772.20488 331.09498   C 772.20488 336.04622 768.19138 340.09723 763.24014 340.09723   L 597.6739 340.09723   C 592.72266 340.09723 588.70916 336.04622 588.70916 331.09498   z"
-       id="path82" />
-    <text
-       xml:space="preserve"
-       x="658.31057"
-       y="322.04981"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text84">EC2 </text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 237.67796 295.17979   C 237.67796 290.2098 241.71022 286.1963 246.66145 286.1963   L 391.44752 286.1963   C 396.39875 286.1963 400.41225 290.2098 400.41225 295.17979   L 400.41225 331.09498   C 400.41225 336.04622 396.39875 340.07847 391.44752 340.07847   L 246.66145 340.07847   C 241.71022 340.07847 237.67796 336.04622 237.67796 331.09498   z"
-       id="path86" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 237.67796 295.17979   C 237.67796 290.2098 241.71022 286.1963 246.66145 286.1963   L 391.44752 286.1963   C 396.39875 286.1963 400.41225 290.2098 400.41225 295.17979   L 400.41225 331.09498   C 400.41225 336.04622 396.39875 340.07847 391.44752 340.07847   L 246.66145 340.07847   C 241.71022 340.07847 237.67796 336.04622 237.67796 331.09498   z"
-       id="path88" />
-    <text
-       xml:space="preserve"
-       x="285.42287"
-       y="322.04981"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text90">Direct</text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 705.2507 365.22849   C 705.2507 360.27725 709.3017 356.22624 714.25294 356.22624   L 763.24014 356.22624   C 768.19138 356.22624 772.20488 360.27725 772.20488 365.22849   L 772.20488 401.12493   C 772.20488 406.11367 768.19138 410.12717 763.24014 410.12717   L 714.25294 410.12717   C 709.3017 410.12717 705.2507 406.11367 705.2507 401.12493   z"
-       id="path92" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 705.2507 365.22849   C 705.2507 360.27725 709.3017 356.22624 714.25294 356.22624   L 763.24014 356.22624   C 768.19138 356.22624 772.20488 360.27725 772.20488 365.22849   L 772.20488 401.12493   C 772.20488 406.11367 768.19138 410.12717 763.24014 410.12717   L 714.25294 410.12717   C 709.3017 410.12717 705.2507 406.11367 705.2507 401.12493   z"
-       id="path94" />
-    <text
-       xml:space="preserve"
-       x="726.42582"
-       y="392.09071"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text96">...</text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 588.70916 366.39128   C 588.70916 361.44004 592.72266 357.42654 597.6739 357.42654   L 681.84486 357.42654   C 686.7961 357.42654 690.8096 361.44004 690.8096 366.39128   L 690.8096 402.32523   C 690.8096 407.27646 686.7961 411.28996 681.84486 411.28996   L 597.6739 411.28996   C 592.72266 411.28996 588.70916 407.27646 588.70916 402.32523   z"
-       id="path98" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 588.70916 366.39128   C 588.70916 361.44004 592.72266 357.42654 597.6739 357.42654   L 681.84486 357.42654   C 686.7961 357.42654 690.8096 361.44004 690.8096 366.39128   L 690.8096 402.32523   C 690.8096 407.27646 686.7961 411.28996 681.84486 411.28996   L 597.6739 411.28996   C 592.72266 411.28996 588.70916 407.27646 588.70916 402.32523   z"
-       id="path100" />
-    <text
-       xml:space="preserve"
-       x="610.33872"
-       y="393.27592"
-       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text102">JDBC</text>
-    <text
-       xml:space="preserve"
-       x="66.875322"
-       y="177.50977"
-       style="font-size:13.803439px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text104">JobGraphs</text>
-    <text
-       xml:space="preserve"
-       x="30.416239"
-       y="194.01388"
-       style="font-size:13.803439px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text106">(generic data stream</text>
-    <text
-       xml:space="preserve"
-       x="70.476219"
-       y="210.51799"
-       style="font-size:13.803439px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text108">program)</text>
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 93.585815 151.16266   C 93.585815 147.27106 96.745977 144.1109 100.63757 144.1109   C 104.52917 144.1109 107.68933 147.27106 107.68933 151.16266   C 107.68933 155.05425 104.52917 158.21442 100.63757 158.21442   C 96.745977 158.21442 93.585815 155.05425 93.585815 151.16266 "
-       id="path110" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 93.585815 151.16266   C 93.585815 147.27106 96.745977 144.1109 100.63757 144.1109   C 104.52917 144.1109 107.68933 147.27106 107.68933 151.16266   C 107.68933 155.05425 104.52917 158.21442 100.63757 158.21442   C 96.745977 158.21442 93.585815 155.05425 93.585815 151.16266  "
-       id="path112" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 130.91699 151.16266   C 130.91699 147.27106 134.06777 144.1109 137.96875 144.1109   C 141.86034 144.1109 145.01113 147.27106 145.01113 151.16266   C 145.01113 155.05425 141.86034 158.21442 137.96875 158.21442   C 134.06777 158.21442 130.91699 155.05425 130.91699 151.16266 "
-       id="path114" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 130.91699 151.16266   C 130.91699 147.27106 134.06777 144.1109 137.96875 144.1109   C 141.86034 144.1109 145.01113 147.27106 145.01113 151.16266   C 145.01113 155.05425 141.86034 158.21442 137.96875 158.21442   C 134.06777 158.21442 130.91699 155.05425 130.91699 151.16266  "
-       id="path116" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 113.7002 123.99652   C 113.7002 120.10492 116.90725 116.94476 120.85511 116.94476   C 124.81234 116.94476 128.01002 120.10492 128.01002 123.99652   C 128.01002 127.88811 124.81234 131.04827 120.85511 131.04827   C 116.90725 131.04827 113.7002 127.88811 113.7002 123.99652 "
-       id="path118" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 113.7002 123.99652   C 113.7002 120.10492 116.90725 116.94476 120.85511 116.94476   C 124.81234 116.94476 128.01002 120.10492 128.01002 123.99652   C 128.01002 127.88811 124.81234 131.04827 120.85511 131.04827   C 116.90725 131.04827 113.7002 127.88811 113.7002 123.99652  "
-       id="path120" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 113.7002 96.005167   C 113.7002 92.113573 116.90725 88.953411 120.85511 88.953411   C 124.81234 88.953411 128.01002 92.113573 128.01002 96.005167   C 128.01002 99.896762 124.81234 103.05692 120.85511 103.05692   C 116.90725 103.05692 113.7002 99.896762 113.7002 96.005167 "
-       id="path122" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 113.7002 96.005167   C 113.7002 92.113573 116.90725 88.953411 120.85511 88.953411   C 124.81234 88.953411 128.01002 92.113573 128.01002 96.005167   C 128.01002 99.896762 124.81234 103.05692 120.85511 103.05692   C 116.90725 103.05692 113.7002 99.896762 113.7002 96.005167  "
-       id="path124" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 105.06367 145.63003   L 119.15781 131.53589   L 120.26434 132.64242   L 106.1702 146.73656   z  M 113.79397 132.6518   L 120.76133 131.0389   L 119.14843 138.00626   C 119.05466 138.42824 118.63268 138.6908 118.2107 138.59703   C 117.78872 138.49388 117.52615 138.08127 117.6293 137.65929   L 118.95151 131.91099   L 119.88924 132.84872   L 114.14094 134.17093   C 113.71896 134.27408 113.30635 134.01151 113.2032 133.58953   C 113.10943 133.16755 113.37199 132.74557 113.79397 132.6518   z"
-       id="path126" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 119.97364 117.14168   L 120.16119 104.71671   L 121.71782 104.74484   L 121.53028 117.16981   z  M 117.08542 109.25534   L 120.95826 103.25385   L 124.66231 109.37725   C 124.87799 109.74296 124.76546 110.22121 124.39036 110.44626   C 124.02465 110.67132 123.5464 110.54942 123.32135 110.1837   L 120.27371 105.12932   L 121.59592 105.15745   L 118.39825 110.10868   C 118.16381 110.4744 117.67619 110.57755 117.31047 110.34311   C 116.95414 110.10868 116.85099 109.62106 117.08542 109.25534   z"
-       id="path128" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 74.924916 151.16266   C 74.924916 147.27106 78.085078 144.1109 81.976672 144.1109   C 85.868267 144.1109 89.028429 147.27106 89.028429 151.16266   C 89.028429 155.05425 85.868267 158.21442 81.976672 158.21442   C 78.085078 158.21442 74.924916 155.05425 74.924916 151.16266 "
-       id="path130" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 74.924916 151.16266   C 74.924916 147.27106 78.085078 144.1109 81.976672 144.1109   C 85.868267 144.1109 89.028429 147.27106 89.028429 151.16266   C 89.028429 155.05425 85.868267 158.21442 81.976672 158.21442   C 78.085078 158.21442 74.924916 155.05425 74.924916 151.16266  "
-       id="path132" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 56.264017 151.16266   C 56.264017 147.27106 59.414802 144.1109 63.315774 144.1109   C 67.207368 144.1109 70.36753 147.27106 70.36753 151.16266   C 70.36753 155.05425 67.207368 158.21442 63.315774 158.21442   C 59.414802 158.21442 56.264017 155.05425 56.264017 151.16266 "
-       id="path134" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 56.264017 151.16266   C 56.264017 147.27106 59.414802 144.1109 63.315774 144.1109   C 67.207368 144.1109 70.36753 147.27106 70.36753 151.16266   C 70.36753 155.05425 67.207368 158.21442 63.315774 158.21442   C 59.414802 158.21442 56.264017 155.05425 56.264017 151.16266  "
-       id="path136" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 37.603118 151.16266   C 37.603118 147.27106 40.753903 144.1109 44.654875 144.1109   C 48.546469 144.1109 51.697254 147.27106 51.697254 151.16266   C 51.697254 155.05425 48.546469 158.21442 44.654875 158.21442   C 40.753903 158.21442 37.603118 155.05425 37.603118 151.16266 "
-       id="path138" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 37.603118 151.16266   C 37.603118 147.27106 40.753903 144.1109 44.654875 144.1109   C 48.546469 144.1109 51.697254 147.27106 51.697254 151.16266   C 51.697254 155.05425 48.546469 158.21442 44.654875 158.21442   C 40.753903 158.21442 37.603118 155.05425 37.603118 151.16266  "
-       id="path140" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 76.378403 123.99652   C 76.378403 120.10492 79.576074 116.94476 83.53331 116.94476   C 87.481169 116.94476 90.688218 120.10492 90.688218 123.99652   C 90.688218 127.88811 87.481169 131.04827 83.53331 131.04827   C 79.576074 131.04827 76.378403 127.88811 76.378403 123.99652 "
-       id="path142" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 76.378403 123.99652   C 76.378403 120.10492 79.576074 116.94476 83.53331 116.94476   C 87.481169 116.94476 90.688218 120.10492 90.688218 123.99652   C 90.688218 127.88811 87.481169 131.04827 83.53331 131.04827   C 79.576074 131.04827 76.378403 127.88811 76.378403 123.99652  "
-       id="path144" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 149.57789 151.16266   C 149.57789 147.27106 152.72867 144.1109 156.62965 144.1109   C 160.52124 144.1109 163.6814 147.27106 163.6814 151.16266   C 163.6814 155.05425 160.52124 158.21442 156.62965 158.21442   C 152.72867 158.21442 149.57789 155.05425 149.57789 151.16266 "
-       id="path146" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 149.57789 151.16266   C 149.57789 147.27106 152.72867 144.1109 156.62965 144.1109   C 160.52124 144.1109 163.6814 147.27106 163.6814 151.16266   C 163.6814 155.05425 160.52124 158.21442 156.62965 158.21442   C 152.72867 158.21442 149.57789 155.05425 149.57789 151.16266  "
-       id="path148" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 76.378403 96.005167   C 76.378403 92.113573 79.576074 88.953411 83.53331 88.953411   C 87.481169 88.953411 90.688218 92.113573 90.688218 96.005167   C 90.688218 99.896762 87.481169 103.05692 83.53331 103.05692   C 79.576074 103.05692 76.378403 99.896762 76.378403 96.005167 "
-       id="path150" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 76.378403 96.005167   C 76.378403 92.113573 79.576074 88.953411 83.53331 88.953411   C 87.481169 88.953411 90.688218 92.113573 90.688218 96.005167   C 90.688218 99.896762 87.481169 103.05692 83.53331 103.05692   C 79.576074 103.05692 76.378403 99.896762 76.378403 96.005167  "
-       id="path152" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 81.723484 143.37009   L 119.11092 130.77633   L 119.60792 132.25795   L 82.229861 144.85171   z  M 113.80335 129.38848   L 120.76133 131.04827   L 116.2227 136.57152   C 115.95076 136.89973 115.45376 136.95599 115.12556 136.67467   C 114.78797 136.40273 114.74108 135.91511 115.01303 135.57753   L 118.75458 131.02014   L 119.17656 132.2767   L 113.43764 130.90761   C 113.02503 130.81384 112.76247 130.39186 112.86562 129.96988   C 112.95939 129.5479 113.38137 129.29471 113.80335 129.38848   z"
-       id="path154" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 133.2707 145.45186   L 90.266238 128.77896   L 89.69422 130.23244   L 132.70806 146.91473   z  M 95.630074 127.63492   L 88.606449 128.97588   L 92.891892 134.69606   C 93.14508 135.04302 93.632701 135.10866 93.979663 134.85547   C 94.326624 134.59291 94.401643 134.10528 94.139077 133.75832   L 90.603822 129.03215   L 90.125578 130.26995   L 95.920771 129.16343   C 96.342751 129.08841 96.624071 128.67581 96.539675 128.25383   C 96.464657 127.83185 96.052054 127.55053 95.630074 127.63492   z"
-       id="path156" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 152.08164 145.53626   L 127.58804 129.14467   L 126.72532 130.43875   L 151.21892 146.83033   z  M 133.07378 129.19156   L 125.92825 128.9665   L 128.86335 135.49313   C 129.04152 135.88698 129.50101 136.05577 129.89486 135.88698   C 130.28871 135.70881 130.46688 135.23994 130.28871 134.84609   L 127.86936 129.47288   L 127.13792 130.57003   L 133.02689 130.75757   C 133.45825 130.76695 133.82396 130.42937 133.83334 129.99801   C 133.84272 129.56665 133.50513 129.21031 133.07378 129.19156   z"
-       id="path158" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 62.762511 143.55764   L 76.856647 129.4635   L 77.963173 130.56065   L 63.869036 144.66416   z  M 71.492811 130.57941   L 78.450794 128.9665   L 76.84727 135.93386   C 76.753496 136.35584 76.331516 136.61841 75.909536 136.52464   C 75.487556 136.42149 75.22499 135.99951 75.328141 135.5869   L 76.650346 129.8386   L 77.588079 130.77633   L 71.839772 132.09853   C 71.417792 132.20168 71.005189 131.93912 70.902038 131.51714   C 70.808265 131.09516 71.070831 130.67318 71.492811 130.57941   z"
-       id="path160" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 44.326668 143.39822   L 76.791006 128.86335   L 77.428664 130.28871   L 44.973704 144.82358   z  M 71.370905 127.99126   L 78.460171 128.97588   L 74.474804 134.90236   C 74.230993 135.26807 73.743371 135.36185 73.387033 135.11804   C 73.030694 134.8836 72.93692 134.39598 73.171354 134.03964   L 76.462799 129.1353   L 77.006684 130.34497   L 71.164604 129.53852   C 70.733246 129.48226 70.433172 129.08841 70.489436 128.65705   C 70.555077 128.23507 70.948925 127.935 71.370905 127.99126   z"
-       id="path162" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 82.642463 117.14168   L 82.83001 104.71671   L 84.396025 104.74484   L 84.208478 117.16981   z  M 79.754244 109.25534   L 83.636461 103.25385   L 87.331131 109.37725   C 87.556187 109.74296 87.434282 110.22121 87.068566 110.44626   C 86.70285 110.67132 86.215228 110.54942 85.99955 110.1837   L 85.99955 110.1837   L 82.942538 105.12932   L 84.264742 105.15745   L 81.067071 110.10868   C 80.832637 110.4744 80.354393 110.57755 79.988677 110.34311   C 79.622961 110.10868 79.51981 109.62106 79.754244 109.25534   z"
-       id="path164" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 88.175092 118.37011   L 114.12218 101.14395   L 114.9849 102.4474   L 89.047184 119.67356   z  M 108.63644 101.17208   L 115.78197 100.97516   L 112.82811 107.48303   C 112.64994 107.87687 112.18107 108.05504 111.7966 107.87687   C 111.40275 107.69871 111.22458 107.22984 111.40275 106.83599   L 113.84086 101.47215   L 114.57229 102.5693   L 108.67395 102.73809   C 108.24259 102.74747 107.88625 102.40989 107.87687 101.97853   C 107.8675 101.54717 108.20508 101.18146 108.63644 101.17208   z"
-       id="path166" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 116.20395 118.37011   L 90.266238 101.14395   L 89.403523 102.4474   L 115.34123 119.67356   z  M 95.751979 101.17208   L 88.606449 100.97516   L 91.56031 107.48303   L 91.56031 107.48303   C 91.738479 107.87687 92.197969 108.05504 92.591817 107.87687   C 92.985665 107.69871 93.163834 107.22984 92.985665 106.83599   L 90.547558 101.47215   L 89.816125 102.5693   L 95.705093 102.73809   C 96.13645 102.74747 96.502166 102.40989 96.511543 101.97853   C 96.520921 101.54717 96.183337 101.18146 95.751979 101.17208   z"
-       id="path168" />
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 390.73484 13.822193   L 433.27044 13.822193   L 433.27044 56.35779   L 426.18117 63.447056   L 390.73484 63.447056  z "
-       id="path170" />
-    <path
-       style="fill:#cdcdcd;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 426.18117 63.447056   L 427.58777 57.783145   L 433.27044 56.35779  z "
-       id="path172" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.2565631px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 426.18117 63.447056   L 427.58777 57.783145   L 433.27044 56.35779   L 426.18117 63.447056   L 390.73484 63.447056   L 390.73484 13.822193   L 433.27044 13.822193   L 433.27044 56.35779  "
-       id="path174" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 396.04241 18.342069   L 422.63654 18.342069  "
-       id="path176" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 396.04241 22.843191   L 427.94411 22.843191  "
-       id="path178" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 396.04241 27.363067   L 417.31021 27.363067  "
-       id="path180" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 396.04241 31.882943   L 427.94411 31.882943  "
-       id="path182" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 396.04241 36.384064   L 427.94411 36.384064  "
-       id="path184" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 396.04241 40.90394   L 409.33948 40.90394  "
-       id="path186" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 396.07992 45.405062   L 422.63654 45.405062  "
-       id="path188" />
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 539.19683 12.88446   L 581.73242 12.88446   L 581.73242 55.420057   L 574.64316 62.509323   L 539.19683 62.509323  z "
-       id="path190" />
-    <path
-       style="fill:#cdcdcd;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 574.64316 62.509323   L 576.06851 56.826657   L 581.73242 55.420057  z "
-       id="path192" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.2565631px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 574.64316 62.509323   L 576.06851 56.826657   L 581.73242 55.420057   L 574.64316 62.509323   L 539.19683 62.509323   L 539.19683 12.88446   L 581.73242 12.88446   L 581.73242 55.420057  "
-       id="path194" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 544.52315 17.385581   L 571.09852 17.385581  "
-       id="path196" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 544.52315 21.905457   L 576.42485 21.905457  "
-       id="path198" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 544.52315 26.406579   L 565.79095 26.406579  "
-       id="path200" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 544.52315 30.926455   L 576.42485 30.926455  "
-       id="path202" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 544.52315 35.427576   L 576.42485 35.427576  "
-       id="path204" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 544.52315 39.947452   L 557.82022 39.947452  "
-       id="path206" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 544.54191 44.448573   L 571.09852 44.448573  "
-       id="path208" />
-    <text
-       xml:space="preserve"
-       x="364.78497"
-       y="80.72277"
-       style="font-size:13.803439px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text210">Java Program</text>
-    <text
-       xml:space="preserve"
-       x="512.48505"
-       y="81.674089"
-       style="font-size:13.803439px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text212">Scala Program</text>
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 203.20687 48.968449   L 203.20687 56.620356   L 223.62133 56.620356   L 223.62133 48.968449   L 203.20687 48.968449  z "
-       id="path214" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 203.20687 48.968449   L 223.62133 48.968449   L 223.62133 56.620356   L 203.20687 56.620356  z "
-       id="path216" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 244.0358 48.968449   L 244.0358 56.620356   L 264.45026 56.620356   L 264.45026 48.968449   L 244.0358 48.968449  z "
-       id="path218" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 244.0358 48.968449   L 264.45026 48.968449   L 264.45026 56.620356   L 244.0358 56.620356  z "
-       id="path220" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 223.62133 31.967339   L 223.62133 39.619245   L 244.0358 39.619245   L 244.0358 31.967339   L 223.62133 31.967339  z "
-       id="path222" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 223.62133 31.967339   L 244.0358 31.967339   L 244.0358 39.619245   L 223.62133 39.619245  z "
-       id="path224" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 223.62133 15.622642   L 223.62133 23.274548   L 244.0358 23.274548   L 244.0358 15.622642   L 223.62133 15.622642  z "
-       id="path226" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 223.62133 15.622642   L 244.0358 15.622642   L 244.0358 23.274548   L 223.62133 23.274548  z "
-       id="path228" />
-    <path
-       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 203.20687 66.35403   L 203.20687 74.005937   L 223.62133 74.005937   L 223.62133 66.35403   L 203.20687 66.35403  z "
-       id="path230" />
-    <path
-       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 203.20687 66.35403   L 223.62133 66.35403   L 223.62133 74.005937   L 203.20687 74.005937  z "
-       id="path232" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 212.6311 66.485313   L 212.6311 61.552834   C 212.6311 61.121477 212.97806 60.774515 213.40942 60.774515   L 213.40942 60.774515   L 212.6311 61.552834   L 212.6311 58.092597   L 214.19711 58.092597   L 214.19711 61.552834   C 214.19711 61.984192 213.84077 62.331153 213.40942 62.331153   L 213.40942 62.331153   L 214.19711 61.552834   L 214.19711 66.485313   z  M 209.62097 62.678115   L 213.40942 56.620356   L 217.19786 62.678115   C 217.43229 63.043831 217.31976 63.522075 216.95405 63.756508   C 216.58833 63.981564 216.10071 63.869036 215.87566 63.50332   L 212.753 58.5052   L 214.07521 58.5052   L 210.95255 63.50332   C 210.71812 63.869036 210.23988 63.981564 209.87416 63.756508   C 209.50844 63.522075 209.39592 63.043831 209.62097 62.678115   z"
-       id="path234" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 255.02603 48.968449   L 255.02603 46.436569   C 255.02603 46.005211 254.67907 45.65825 254.24771 45.65825   L 233.83325 45.65825   L 234.61157 46.436569   L 234.61157 41.091487   L 233.04556 41.091487   L 233.04556 46.436569   C 233.04556 46.867926 233.4019 47.224265 233.83325 47.224265   L 254.24771 47.224265   L 253.4694 46.436569   L 253.4694 48.968449   z  M 237.6217 45.677004   L 233.83325 39.619245   L 230.04481 45.677004   C 229.81038 46.04272 229.9229 46.530342 230.28862 46.755398   C 230.65434 46.989831 231.14196 46.877303 231.36701 46.511587   L 234.48967 41.50409   L 233.16746 41.50409   L 236.29012 46.511587   C 236.52455 46.877303 237.00279 46.989831 237.36851 46.755398   C 237.73423 46.530342 237.84675 46.04272 237.6217 45.677004   z"
-       id="path236" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 212.6311 48.968449   L 212.6311 45.90206   C 212.6311 45.470703 212.97806 45.123741 213.40942 45.123741   L 233.83325 45.123741   L 233.04556 45.90206   L 233.04556 41.091487   L 234.61157 41.091487   L 234.61157 45.90206   C 234.61157 46.333418 234.26461 46.680379 233.83325 46.680379   L 213.40942 46.680379   L 214.19711 45.90206   L 214.19711 48.968449   z  M 230.04481 45.677004   L 233.83325 39.619245   L 237.6217 45.677004   C 237.84675 46.04272 237.73423 46.530342 237.36851 46.755398   C 237.00279 46.989831 236.52455 46.877303 236.29012 46.511587   L 233.16746 41.50409   L 234.48967 41.50409   L 231.36701 46.511587   C 231.14196 46.877303 230.65434 46.989831 230.28862 46.755398   C 229.9229 46.530342 229.81038 46.04272 230.04481 45.677004   z"
-       id="path238" />
-    <path
-       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 233.04556 31.967339   L 233.04556 27.625632   C 233.04556 27.194275 233.38314 26.856691 233.80512 26.837936   L 233.80512 26.837936   L 233.04556 27.625632   L 233.04556 24.74679   L 234.61157 24.74679   L 234.61157 27.625632   C 234.61157 28.047612 234.27399 28.385196 233.85201 28.403951   L 233.85201 28.403951   L 234.61157 27.625632   L 234.61157 31.967339   z  M 230.04481 29.332307   L 233.83325 23.265171   L 237.6217 29.332307   C 237.84675 29.698024 237.73423 30.176268 237.36851 30.410701   C 237.00279 30.635757 236.52455 30.523229 236.29012 30.157513   L 233.16746 25.159393   L 234.48967 25.159393   L 231.36701 30.157513   C 231.14196 30.523229 230.65434 30.635757 230.28862 30.410701   C 229.9229 30.176268 229.81038 29.698024 230.04481 29.332307   z"
-       id="path240" />
-    <text
-       xml:space="preserve"
-       x="176.83757"
-       y="91.124374"
-       style="font-size:13.803439px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text242">Operator DAG</text>
-    <text
-       xml:space="preserve"
-       x="172.78656"
-       y="107.62849"
-       style="font-size:13.803439px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text244">(type agnostic)</text>
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 272.82422 92.029177   L 300.2623 92.029177   C 300.95623 92.029177 301.50011 92.573062 301.50011 93.266985   L 301.50011 130.55127   L 299.00574 130.55127   L 299.00574 93.266985   L 300.2623 94.523548   L 272.82422 94.523548   z  M 305.71991 123.68706   L 300.2623 133.04565   L 294.80469 123.68706   C 294.44835 123.08691 294.65466 122.31797 295.25481 121.98039   C 295.85495 121.62405 296.6239 121.83035 296.96148 122.4305   L 301.33132 129.93237   L 299.17453 129.93237   L 303.56313 122.4305   C 303.90071 121.83035 304.66965 121.62405 305.2698 121.98039   C 305.86995 122.31797 306.0575 123.08691 305.71991 123.68706   z"
-       id="path246" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 171.23016 145.47062   L 213.40942 145.47062   C 214.10334 145.47062 214.66598 146.02388 214.66598 146.7178   L 214.66598 200.34679   L 212.16223 200.34679   L 212.16223 146.7178   L 213.40942 147.96499   L 171.23016 147.96499   z  M 218.86703 193.4732   L 213.40942 202.8224   L 207.96118 193.4732   C 207.60484 192.87305 207.81115 192.11349 208.40192 191.75715   C 209.00207 191.41019 209.77101 191.61649 210.11797 192.20726   L 214.49719 199.70913   L 212.33102 199.70913   L 216.71024 192.20726   C 217.0572 191.61649 217.82614 191.41019 218.41691 191.75715   C 219.01706 192.11349 219.21399 192.87305 218.86703 193.4732   z"
-       id="path248" />
-  </g>
-</svg>


[09/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/fig/state_machine.svg
----------------------------------------------------------------------
diff --git a/docs/internals/fig/state_machine.svg b/docs/internals/fig/state_machine.svg
new file mode 100644
index 0000000..8d0f570
--- /dev/null
+++ b/docs/internals/fig/state_machine.svg
@@ -0,0 +1,318 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="664.92505"
+   height="445.67966"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.5 r10040">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="332.46252"
+     inkscape:cy="222.83984"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1600"
+     inkscape:window-height="838"
+     inkscape:window-x="1912"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-42.537478,-309.52235)">
+    <g
+       id="g2989"
+       transform="translate(-103.51453,206.80922)">
+      <path
+         id="path2991"
+         d="m 146.68029,340.95994 c 0,-20.55512 16.69166,-37.20927 37.28429,-37.20927 20.59263,0 37.26553,16.65415 37.26553,37.20927 0,20.53637 -16.6729,37.19052 -37.26553,37.19052 -20.59263,0 -37.28429,-16.65415 -37.28429,-37.19052"
+         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path2993"
+         d="m 146.68029,340.95994 c 0,-20.55512 16.69166,-37.20927 37.28429,-37.20927 20.59263,0 37.26553,16.65415 37.26553,37.20927 0,20.53637 -16.6729,37.19052 -37.26553,37.19052 -20.59263,0 -37.28429,-16.65415 -37.28429,-37.19052"
+         style="fill:none;stroke:#41719c;stroke-width:1.25656307px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text2995"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="346.5697"
+         x="148.55054"
+         xml:space="preserve">CREATED</text>
+      <path
+         id="path2997"
+         d="m 321.56761,238.20309 c 0,-20.59263 16.69166,-37.28429 37.28429,-37.28429 20.59263,0 37.26553,16.69166 37.26553,37.28429 0,20.57388 -16.6729,37.26554 -37.26553,37.26554 -20.59263,0 -37.28429,-16.69166 -37.28429,-37.26554"
+         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path2999"
+         d="m 321.56761,238.20309 c 0,-20.59263 16.69166,-37.28429 37.28429,-37.28429 20.59263,0 37.26553,16.69166 37.26553,37.28429 0,20.57388 -16.6729,37.26554 -37.26553,37.26554 -20.59263,0 -37.28429,-16.69166 -37.28429,-37.26554"
+         style="fill:none;stroke:#41719c;stroke-width:1.25656307px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3001"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="234.7578"
+         x="335.63348"
+         xml:space="preserve">SCHE</text>
+      <text
+         id="text3003"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="234.7578"
+         x="377.34387"
+         xml:space="preserve">-</text>
+      <text
+         id="text3005"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="252.76228"
+         x="333.53293"
+         xml:space="preserve">DULED</text>
+      <path
+         id="path3007"
+         d="m 295.94873,509.20811 c 0,-20.59263 16.69166,-37.28429 37.26553,-37.28429 20.59263,0 37.28429,16.69166 37.28429,37.28429 0,20.57387 -16.69166,37.26553 -37.28429,37.26553 -20.57387,0 -37.26553,-16.69166 -37.26553,-37.26553"
+         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3009"
+         d="m 294.11077,511.15859 -0.0375,-1.95048 0.0563,-2.02551 0.15003,-1.98799 0.24381,-1.95049 0.33759,-1.91298 0.4126,-1.78169 3.65716,0.82521 -0.39385,1.74418 0.0188,-0.0938 -0.33759,1.83795 0.0188,-0.11252 -0.22506,1.87546 0,-0.0938 -0.15004,1.89422 0,-0.0938 -0.0375,1.91298 0,-0.075 0.0375,1.91297 -3.75093,0.075 z m 2.36309,-15.45385 0.67517,-1.74418 0.78769,-1.74419 0.86272,-1.66916 0.93773,-1.63166 1.01275,-1.59415 1.10653,-1.53788 0.28132,-0.37509 2.96324,2.30682 -0.26257,0.33759 0.0375,-0.075 -1.0315,1.46286 0.0563,-0.075 -0.97524,1.51913 0.0563,-0.0563 -0.90022,1.55664 0.0375,-0.0938 -0.82521,1.6129 0.0375,-0.0938 -0.75019,1.65041 0.0375,-0.0938 -0.65641,1.70667 -3.48837,-1.36909 z m 8.21455,-13.29706 0.84396,-0.88147 1.36909,-1.31283 1.42535,-1.21905 1.48162,-1.16279 1.51913,-1.08777 1.59415,-1.01275 1.01275,-0.5814 1.85671,3.24456 -0.95649,0.56264 0.075,-0.0563 -1.50037,0.97524 0.0563,-0.0375 -1.46286,1.03151 0.075,-0.0563 -1.4066,1.10653 0.075,-0.0563 -1.36909,1.16
 279 0.075,-0.0563 -1.29407,1.23781 0.0563,-0.075 -0.80645,0.86271 -2.71942,-2.58814 z m 12.73442,-9.021 0.56264,-0.26256 1.78169,-0.69393 1.81921,-0.6189 1.85671,-0.52513 1.89422,-0.43136 1.91298,-0.33758 1.53788,-0.2063 0.48762,3.71342 -1.50037,0.2063 0.0938,-0.0188 -1.8192,0.31883 0.075,-0.0188 -1.80045,0.41261 0.0938,-0.0188 -1.76294,0.50638 0.075,-0.0188 -1.72543,0.5814 0.0938,-0.0375 -1.68792,0.65641 0.075,-0.0375 -0.50637,0.24381 -1.55664,-3.41335 z m 15.30381,-3.31957 0.48762,-0.0188 2.02551,0.0563 1.98799,0.15004 1.95049,0.26257 1.93173,0.33758 1.89422,0.43136 1.38785,0.39385 -1.03151,3.60089 -1.35034,-0.37509 0.11253,0.0188 -1.80045,-0.41261 0.075,0.0188 -1.83796,-0.31883 0.0938,0.0188 -1.85672,-0.24381 0.0938,0.0188 -1.89422,-0.15004 0.11252,0 -1.93173,-0.0563 0.0938,0 -0.45012,0.0188 -0.0938,-3.75093 z m 15.37883,2.92572 0.35634,0.13129 1.72543,0.78769 1.70668,0.88147 1.63165,0.93774 1.57539,1.01275 1.53789,1.08777 1.48162,1.16279 0.11252,0.0938 -2.4381,2.85071 -0.0938,-0
 .075 0.075,0.0563 -1.4066,-1.10653 0.075,0.0563 -1.46286,-1.03151 0.0563,0.0375 -1.50037,-0.97524 0.075,0.0563 -1.55664,-0.90022 0.075,0.0375 -1.61291,-0.82521 0.0938,0.0375 -1.65041,-0.75019 0.075,0.0375 -0.31883,-0.11253 1.38784,-3.48837 z m 13.0345,8.75844 1.06902,1.12528 1.21905,1.42535 1.16279,1.48162 1.08777,1.53788 1.01275,1.59415 0.95649,1.63166 0.37509,0.71268 -3.33833,1.72543 -0.35634,-0.69393 0.0375,0.0938 -0.90022,-1.55664 0.0563,0.0563 -0.97524,-1.51913 0.0563,0.075 -1.05026,-1.46286 0.0563,0.075 -1.10653,-1.4066 0.0563,0.075 -1.16279,-1.35033 0.0563,0.0563 -1.03151,-1.08777 2.71943,-2.58814 z m 8.49587,13.09076 0.35633,0.90022 0.61891,1.81921 0.52513,1.85671 0.43136,1.91297 0.35634,1.91298 0.24381,1.95049 0.0938,1.12528 -3.75093,0.30007 -0.075,-1.08777 0,0.0938 -0.22506,-1.87546 0.0188,0.11252 -0.33759,-1.83795 0.0188,0.0938 -0.41261,-1.8192 0.0188,0.11253 -0.50638,-1.76294 0.0375,0.075 -0.58139,-1.74418 0.0375,0.0938 -0.33759,-0.84396 3.46962,-1.38784 z m 2.71942,15.4
 1634 -0.0375,0.97524 -0.15003,1.96924 -0.24381,1.95049 -0.35634,1.93173 -0.43136,1.89422 -0.52513,1.87547 -0.33759,0.994 -3.54463,-1.2003 0.31883,-0.95649 -0.0375,0.075 0.50638,-1.76294 -0.0188,0.0938 0.41261,-1.80045 -0.0188,0.0938 0.33759,-1.83796 -0.0188,0.0938 0.22506,-1.87547 0,0.0938 0.15003,-1.87547 -0.0188,0.0938 0.0375,-0.91898 3.75093,0.0938 z m -3.54463,15.24755 -0.30007,0.67516 -0.86272,1.68793 -0.95649,1.63165 -1.01275,1.59415 -1.08777,1.53788 -1.16279,1.48162 -1.05026,1.21905 -2.83196,-2.45686 1.01275,-1.18154 -0.0563,0.0563 1.10653,-1.4066 -0.0563,0.075 1.05026,-1.46286 -0.0563,0.075 0.97524,-1.50038 -0.0563,0.0563 0.90022,-1.55664 -0.0375,0.0938 0.82521,-1.6129 -0.0375,0.075 0.28132,-0.63766 3.41335,1.55664 z m -9.18979,12.62189 -0.075,0.0563 -1.42535,1.2378 -1.48162,1.16279 -1.53789,1.08777 -1.57539,1.01276 -1.65041,0.93773 -1.68792,0.88147 -0.43136,0.18755 -1.53788,-3.41335 0.39385,-0.18755 -0.0938,0.0563 1.61291,-0.8252 -0.075,0.0375 1.55664,-0.90023 -0.075,0.0375
  1.51913,-0.95649 -0.0938,0.0375 1.46287,-1.0315 -0.0563,0.0563 1.4066,-1.10653 -0.075,0.0563 1.3691,-1.18155 -0.075,0.0563 0.0375,-0.0188 2.58814,2.71943 z m -13.50336,8.04576 -1.25657,0.4126 -1.85671,0.54388 -1.89422,0.43136 -1.93173,0.33759 -1.95049,0.24381 -1.98799,0.16879 -0.69393,0.0187 -0.0938,-3.75093 0.63766,-0.0188 -0.0938,0 1.89422,-0.15003 -0.0938,0.0188 1.85672,-0.24381 -0.0938,0.0188 1.83796,-0.31882 -0.075,0 1.80045,-0.41261 -0.11253,0.0375 1.7817,-0.50637 -0.075,0.0188 1.2003,-0.4126 1.2003,3.56339 z m -15.51012,2.08176 -1.38784,-0.11252 -1.95049,-0.24381 -1.93173,-0.33759 -1.89422,-0.43136 -1.85671,-0.54388 -1.81921,-0.60015 -0.65641,-0.26257 1.38784,-3.48837 0.60015,0.24382 -0.0938,-0.0375 1.72543,0.58139 -0.075,-0.0188 1.76294,0.50637 -0.0938,-0.0375 1.80045,0.41261 -0.075,0 1.83796,0.31882 -0.11253,-0.0188 1.87546,0.24381 -0.0938,-0.0188 1.35034,0.11252 -0.30008,3.73218 z m -15.07875,-4.12602 -0.97525,-0.50638 -1.63165,-0.93773 -1.59415,-1.01276 -1.51913,-1.08777
  -1.48162,-1.16279 -1.42535,-1.2378 -0.93774,-0.88147 2.58815,-2.71943 0.90022,0.84396 -0.075,-0.0563 1.36909,1.18155 -0.075,-0.0563 1.4066,1.10653 -0.075,-0.0563 1.46286,1.0315 -0.075,-0.0375 1.51913,0.95649 -0.075,-0.0375 1.55664,0.90023 -0.075,-0.0563 0.91898,0.48762 -1.70667,3.33834 z m -12.2468,-9.71492 -0.26257,-0.30008 -1.16279,-1.48162 -1.08777,-1.53788 -1.03151,-1.59415 -0.93773,-1.63165 -0.86272,-1.68793 -0.78769,-1.74418 -0.0563,-0.11253 3.50713,-1.36909 0.0188,0.075 -0.0375,-0.0938 0.75019,1.65041 -0.0375,-0.075 0.82521,1.59415 -0.0375,-0.0563 0.88147,1.55664 -0.0563,-0.0938 0.97524,1.51913 -0.0375,-0.075 1.0315,1.46286 -0.0375,-0.075 1.10653,1.4066 -0.0563,-0.0563 0.24382,0.28132 -2.85071,2.43811 z m -7.50187,-13.78469 -0.46887,-1.65041 -0.45011,-1.89422 -0.33759,-1.91298 -0.26256,-1.96924 -0.13128,-1.95048 3.73217,-0.26257 0.15004,1.89422 -0.0187,-0.11253 0.24381,1.87547 -0.0188,-0.0938 0.33759,1.83796 -0.0188,-0.0938 0.41261,1.80045 -0.0188,-0.0938 0.45011,1.59414 -3.
 60089,1.03151 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3011"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="505.84799"
+         x="300.4566"
+         xml:space="preserve">CANCEL</text>
+      <text
+         id="text3013"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="505.84799"
+         x="361.37177"
+         xml:space="preserve">-</text>
+      <text
+         id="text3015"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="523.85248"
+         x="322.81216"
+         xml:space="preserve">ED</text>
+      <path
+         id="path3017"
+         d="m 681.84486,143.17317 c 0,-20.59263 16.65415,-37.28429 37.17177,-37.28429 20.55512,0 37.20926,16.69166 37.20926,37.28429 0,20.59263 -16.65414,37.28429 -37.20926,37.28429 -20.51762,0 -37.17177,-16.69166 -37.17177,-37.28429"
+         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3019"
+         d="m 680.00691,145.16116 -0.0375,-1.98799 0.0375,-2.02551 0.15003,-1.95048 0.26257,-1.988 0.33758,-1.91297 0.41261,-1.76294 3.6384,0.8252 -0.37509,1.72543 0,-0.075 -0.33758,1.83796 0.0375,-0.11253 -0.26256,1.87547 0.0375,-0.11253 -0.15004,1.91298 0,-0.11253 -0.0375,1.91298 0,-0.075 0.0375,1.91298 -3.75093,0.11252 z m 2.32558,-15.41634 0,-0.0375 0.71267,-1.76294 0.75019,-1.72543 0.86272,-1.68792 0.93773,-1.65041 1.05026,-1.57539 1.08777,-1.53788 0.30008,-0.3751 2.92573,2.32558 -0.26257,0.33759 0.0375,-0.075 -1.01275,1.46286 0.0375,-0.075 -0.97525,1.50038 0.075,-0.075 -0.90022,1.53788 0.0375,-0.075 -0.82521,1.61291 0.0375,-0.075 -0.75019,1.65041 0.0375,-0.075 -0.67516,1.68792 0.0375,-0.075 0,0 -3.52587,-1.23781 z m 8.21454,-13.35332 0.86272,-0.90023 1.35033,-1.27532 1.42536,-1.2378 1.46286,-1.16279 1.53789,-1.08777 1.57539,-1.05027 1.01275,-0.56264 1.87547,3.26332 -0.97524,0.56264 0.075,-0.075 -1.50037,0.97524 0.075,-0.0375 -1.46287,1.05026 0.075,-0.075 -1.38784,1.12528 0.037
 5,-0.075 -1.35034,1.16279 0.075,-0.0375 -1.27532,1.2378 0.0375,-0.075 -0.7877,0.86271 -2.73818,-2.58814 z m 12.75318,-9.03976 0.52513,-0.26256 1.76294,-0.67517 1.83796,-0.63766 1.83796,-0.52513 1.87546,-0.4126 1.95049,-0.33759 1.53788,-0.22505 0.48762,3.71342 -1.50037,0.22506 0.075,-0.0375 -1.83796,0.33758 0.11253,-0.0375 -1.80045,0.41261 0.075,0 -1.76294,0.48762 0.075,0 -1.72543,0.56264 0.11253,-0.0375 -1.68792,0.67517 0.075,-0.0375 -0.48762,0.22505 -1.53788,-3.41335 z m 15.2663,-3.30082 0.45012,-0.0375 2.0255,0.075 1.98799,0.15004 1.95049,0.26256 1.91298,0.33759 1.91297,0.4126 1.42536,0.4126 -1.01275,3.6009 -1.42536,-0.37509 0.11253,0 -1.80045,-0.41261 0.075,0.0375 -1.80045,-0.33758 0.075,0.0375 -1.83796,-0.26257 0.075,0.0375 -1.87547,-0.15003 0.075,0 -1.91297,-0.075 0.11252,0 -0.4126,0.0375 -0.11253,-3.75094 z m 15.37883,2.92573 0.30008,0.11253 1.72543,0.78769 1.68792,0.90023 1.65041,0.93773 1.57539,1.01276 1.53789,1.08777 1.46286,1.16279 0.18755,0.15003 -2.47562,2.85071 -0.15004
 ,-0.15003 0.075,0.075 -1.38784,-1.12528 0.075,0.075 -1.46286,-1.05026 0.075,0.0375 -1.50037,-0.93773 0.075,0.0375 -1.57539,-0.90023 0.075,0.0375 -1.57539,-0.8252 0.075,0.0375 -1.65041,-0.75019 0.075,0.0375 -0.26256,-0.11253 1.38784,-3.48837 z m 13.01575,8.8147 1.01275,1.05026 1.2003,1.42535 1.16279,1.50038 1.08777,1.53788 1.01275,1.57539 0.93773,1.65041 0.45012,0.82521 -3.37584,1.68792 -0.3751,-0.7877 0.0375,0.075 -0.90022,-1.53788 0.0375,0.075 -0.93774,-1.50038 0.0375,0.075 -1.05026,-1.46286 0.075,0.075 -1.12528,-1.42536 0.0375,0.075 -1.16279,-1.38785 0.075,0.075 -0.97525,-1.01275 2.73819,-2.58814 z m 8.4396,13.12827 0.33758,0.78769 0.60015,1.83796 0.52513,1.83796 0.45012,1.91298 0.33758,1.91297 0.22506,1.95049 0.11252,1.23781 -3.75093,0.30007 -0.075,-1.2003 0,0.11253 -0.22506,-1.87547 0,0.11253 -0.33758,-1.83796 0.0375,0.075 -0.4126,-1.80045 0.0375,0.075 -0.52513,-1.76294 0.0375,0.11253 -0.60015,-1.72543 0.0375,0.075 -0.30007,-0.75019 3.48837,-1.38784 z m 2.66316,15.41634 0,0.8627
 1 -0.15003,1.988 -0.26257,1.95048 -0.33758,1.91298 -0.45012,1.91298 -0.52513,1.87546 -0.37509,1.08778 -3.56339,-1.2003 0.3751,-1.05027 -0.0375,0.075 0.52513,-1.76294 -0.0375,0.11253 0.4126,-1.83796 -0.0375,0.11253 0.33758,-1.83796 0,0.075 0.22506,-1.87546 0,0.11252 0.15004,-1.87546 0,0.075 0,-0.7877 3.75093,0.075 z m -3.56339,15.22879 -0.26256,0.60015 -0.86272,1.68792 -0.93773,1.6129 -1.01275,1.61291 -1.08777,1.53788 -1.16279,1.46286 -1.12528,1.31283 -2.85071,-2.43811 1.12528,-1.27532 -0.075,0.075 1.12528,-1.42535 -0.075,0.075 1.05026,-1.46287 -0.0375,0.075 0.93774,-1.50037 -0.0375,0.075 0.90022,-1.5754 -0.0375,0.075 0.82521,-1.6129 -0.0375,0.11253 0.22505,-0.56264 3.41335,1.53788 z m -9.30231,12.67816 -1.31283,1.16279 -1.46286,1.16279 -1.53789,1.08777 -1.57539,1.01275 -1.65041,0.93774 -1.68792,0.86271 -0.56264,0.26257 -1.53788,-3.41335 0.52513,-0.26257 -0.075,0.075 1.57539,-0.82521 -0.075,0.0375 1.57539,-0.90022 -0.075,0.0375 1.50037,-0.97524 -0.075,0.075 1.46286,-1.05026 -0.075,0.
 0375 1.38784,-1.08777 -0.075,0.0375 1.31283,-1.08777 2.43811,2.8132 z m -13.42835,7.95198 -1.12528,0.37509 -1.83796,0.52514 -1.91297,0.45011 -1.91298,0.33758 -1.95049,0.22506 -1.98799,0.18754 -0.86272,0 -0.075,-3.75093 0.78769,0 -0.11253,0 1.91298,-0.15004 -0.11253,0 1.87547,-0.22505 -0.075,0 1.80045,-0.30008 -0.075,0 1.80045,-0.4126 -0.11253,0.0375 1.76294,-0.52513 -0.075,0.0375 1.08777,-0.3751 1.2003,3.56339 z m -15.52887,2.02551 -1.2003,-0.11253 -1.95048,-0.22506 -1.95049,-0.33758 -1.87546,-0.45011 -1.83796,-0.52514 -1.83796,-0.60015 -0.82521,-0.33758 1.38785,-3.48837 0.7877,0.30008 -0.11253,-0.0375 1.72543,0.60015 -0.075,-0.0375 1.76294,0.52513 -0.075,-0.0375 1.80045,0.4126 -0.11253,-0.0375 1.83796,0.33759 -0.075,0 1.83796,0.22505 -0.075,0 1.16279,0.075 -0.30008,3.75094 z m -15.04124,-4.20105 -0.7877,-0.4126 -1.65041,-0.93774 -1.57539,-1.01275 -1.53789,-1.08777 -1.46286,-1.16279 -1.42536,-1.23781 -1.08777,-1.05026 2.58815,-2.70067 1.05026,1.01275 -0.075,-0.075 1.35034,1.16279 -0
 .0375,-0.0375 1.38784,1.08777 -0.075,-0.0375 1.46287,1.01275 -0.075,-0.0375 1.50037,0.97524 -0.075,-0.0375 1.57539,0.90022 -0.075,-0.0375 0.71268,0.3751 -1.68792,3.33833 z m -12.19054,-9.78994 -0.11253,-0.15004 -1.16279,-1.46286 -1.12528,-1.53788 -1.01275,-1.61291 -0.90023,-1.6129 -0.90022,-1.68792 -0.75019,-1.72543 -0.15003,-0.33758 3.48837,-1.38785 0.11252,0.30008 -0.0375,-0.075 0.75019,1.65041 -0.0375,-0.11253 0.82521,1.6129 -0.0375,-0.075 0.90022,1.5754 -0.075,-0.075 0.97525,1.50037 -0.0375,-0.075 1.01275,1.46287 -0.0375,-0.075 1.12528,1.42535 -0.075,-0.075 0.11253,0.11253 -2.85071,2.43811 z m -7.42685,-13.84095 -0.37509,-1.42535 -0.45012,-1.87547 -0.33758,-1.95049 -0.26257,-1.95048 -0.15003,-1.95049 3.75093,-0.26256 0.15004,1.87546 -0.0375,-0.075 0.26256,1.83795 -0.0375,-0.075 0.33758,1.83796 -0.0375,-0.11253 0.45011,1.80045 -0.0375,-0.075 0.3751,1.35034 -3.6009,1.05026 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3021"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="148.84201"
+         x="693.09564"
+         xml:space="preserve">FAILED</text>
+      <path
+         id="path3023"
+         d="m 214.00957,303.30056 3.76968,-6.8267 3.86347,-6.75168 1.96924,-3.31958 2.04426,-3.26331 2.10052,-3.22581 2.17554,-3.11327 2.25056,-3.03826 2.34434,-2.94448 2.4381,-2.83196 2.56939,-2.70067 2.68192,-2.58815 2.83196,-2.41935 2.96324,-2.28807 3.11327,-2.10052 3.26331,-1.91298 3.41335,-1.76294 3.56339,-1.59414 3.67592,-1.42536 3.8072,-1.31283 3.88221,-1.16279 3.99475,-1.06901 4.08852,-0.93774 4.16353,-0.88147 4.21981,-0.76894 4.27606,-0.71268 4.33233,-0.67516 8.73968,-1.2003 6.97674,-0.86272 0.22505,1.85672 -6.95798,0.88146 0,-0.0188 -8.72092,1.2003 0,0 -4.31358,0.65641 0.0188,0 -4.25731,0.71268 0.0188,0 -4.20105,0.7877 0.0188,-0.0188 -4.14478,0.86272 0.0188,0 -4.05101,0.95649 0.0188,-0.0188 -3.95724,1.05026 0.0187,0 -3.86346,1.16279 0.0375,-0.0187 -3.75093,1.29407 0.0375,0 -3.63841,1.4066 0.0375,-0.0187 -3.52588,1.57539 0.0563,-0.0188 -3.37585,1.72543 0.0563,-0.0188 -3.22581,1.89422 0.0375,-0.0375 -3.05701,2.06301 0.0375,-0.0188 -2.90697,2.23181 0.0375,-0.0375 -2.77569,2.4
 0059 0.0375,-0.0375 -2.66316,2.55063 0.0375,-0.0375 -2.53188,2.68192 0.0188,-0.0375 -2.41935,2.8132 0.0375,-0.0375 -2.32558,2.92573 0.0188,-0.0375 -2.23181,3.0195 0.0188,-0.0375 -2.15679,3.11328 0,-0.0188 -2.08177,3.18829 0,-0.0188 -2.02551,3.24456 0.0188,0 -1.96924,3.30083 0,-0.0188 -3.84471,6.73293 0.0188,0 -3.76969,6.8267 z m 92.01042,-67.0292 9.47111,4.03226 -8.1958,6.2453 c -0.4126,0.31883 -0.99399,0.24381 -1.31282,-0.16879 -0.30008,-0.4126 -0.22506,-0.994 0.18754,-1.31283 l 6.90172,-5.27006 0.20631,1.6129 -7.98949,-3.41335 c -0.48763,-0.2063 -0.69393,-0.76894 -0.50638,-1.23781 0.2063,-0.48762 0.76894,-0.69392 1.23781,-0.48762 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3025"
+         d="m 217.92929,373.68684 8.32708,6.92048 8.27081,6.88296 4.06976,3.43211 4.0135,3.41335 3.95724,3.41335 3.90097,3.35709 3.8072,3.35708 3.71342,3.31958 3.61965,3.30082 3.50713,3.24456 3.39459,3.2258 3.26332,3.16954 3.11327,3.13203 2.96324,3.09452 2.8132,3.03826 2.66316,3.00075 2.51313,2.94448 2.38184,2.90698 2.26932,2.86946 2.15679,2.83196 2.04426,2.8132 1.95048,2.75693 1.87547,2.75694 1.80045,2.71943 1.74418,2.70067 1.68792,2.68192 3.26331,5.34508 2.21306,3.69467 -1.59415,0.95649 -2.23181,-3.69467 0,0.0188 -3.24456,-5.32632 0,0 -1.68792,-2.66317 0,0 -1.72543,-2.68191 0,0 -1.78169,-2.70068 0,0 -1.85671,-2.73818 0,0.0188 -1.95049,-2.75694 0.0188,0 -2.04426,-2.79445 0.0188,0.0188 -2.13803,-2.8132 0,0.0188 -2.25056,-2.86946 0,0.0187 -2.36309,-2.88822 0,0.0188 -2.49437,-2.94449 0.0188,0.0188 -2.64441,-2.982 0,0.0188 -2.79444,-3.03826 0.0188,0.0188 -2.96324,-3.07577 0.0188,0.0187 -3.11328,-3.13203 0.0188,0.0188 -3.24456,-3.16954 0,0 -3.37584,-3.20705 0,0 -3.50712,-3.24456 0.0187,
 0 -3.61965,-3.28207 0,0 -3.71343,-3.30082 0,0 -3.78844,-3.35708 0,0.0187 -3.88222,-3.37584 0,0 -3.95723,-3.3946 0,0.0188 -4.0135,-3.41335 0,0 -4.06977,-3.43211 0,0 -8.2333,-6.88296 -8.32707,-6.92048 z m 91.3165,88.10946 0.15004,10.29631 -9.03975,-4.95123 c -0.45012,-0.24381 -0.61891,-0.82521 -0.35634,-1.27532 0.24381,-0.45011 0.80645,-0.61891 1.25656,-0.37509 l 7.63315,4.18229 -1.4066,0.8252 -0.11253,-8.68341 c 0,-0.50638 0.41261,-0.93773 0.93774,-0.93773 0.50637,-0.0188 0.93773,0.39384 0.93773,0.91898 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3027"
+         d="m 451.44372,238.20309 c 0,-20.59263 16.69165,-37.28429 37.28428,-37.28429 20.59263,0 37.26554,16.69166 37.26554,37.28429 0,20.57388 -16.67291,37.26554 -37.26554,37.26554 -20.59263,0 -37.28428,-16.69166 -37.28428,-37.26554"
+         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3029"
+         d="m 451.44372,238.20309 c 0,-20.59263 16.69165,-37.28429 37.28428,-37.28429 20.59263,0 37.26554,16.69166 37.26554,37.28429 0,20.57388 -16.67291,37.26554 -37.26554,37.26554 -20.59263,0 -37.28428,-16.69166 -37.28428,-37.26554"
+         style="fill:none;stroke:#41719c;stroke-width:1.25656307px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3031"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="234.7578"
+         x="456.54681"
+         xml:space="preserve">DEPLOY</text>
+      <text
+         id="text3033"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="234.7578"
+         x="516.11163"
+         xml:space="preserve">-</text>
+      <text
+         id="text3035"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="252.76228"
+         x="475.45154"
+         xml:space="preserve">ING</text>
+      <path
+         id="path3037"
+         d="m 734.65802,356.82639 c 0,-20.59263 16.65415,-37.28428 37.20927,-37.28428 20.51761,0 37.17176,16.69165 37.17176,37.28428 0,20.59263 -16.65415,37.28429 -37.17176,37.28429 -20.55512,0 -37.20927,-16.69166 -37.20927,-37.28429"
+         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3039"
+         d="m 732.82006,358.77688 -0.0375,-1.95049 0.0375,-1.98799 0.15004,-2.02551 0.26257,-1.95048 0.33758,-1.91298 0.4126,-1.76294 3.63841,0.82521 -0.37509,1.72543 0,-0.075 -0.30008,1.83796 0,-0.11253 -0.22505,1.87547 0,-0.11253 -0.15004,1.91298 0,-0.11253 -0.0375,1.91297 0,-0.075 0.0375,1.91297 -3.75094,0.075 z m 2.36309,-15.45385 0.67517,-1.72543 0.7877,-1.72543 0.86271,-1.68792 0.93774,-1.65041 1.01275,-1.57539 1.08777,-1.5754 0.30007,-0.37509 2.92573,2.32558 -0.26256,0.33758 0.075,-0.075 -1.05027,1.46286 0.0375,-0.075 -0.93773,1.53788 0.0375,-0.075 -0.90023,1.53788 0.0375,-0.075 -0.8252,1.6129 0.0375,-0.075 -0.71268,1.65041 0.0375,-0.11252 -0.67517,1.72543 -3.48837,-1.38785 z m 8.21455,-13.27831 0.8252,-0.90022 1.35034,-1.31283 1.42536,-1.2003 1.46286,-1.16279 1.53788,-1.08777 1.5754,-1.05026 1.05026,-0.56264 1.83796,3.26331 -0.97525,0.56264 0.11253,-0.075 -1.53788,0.97525 0.075,-0.0375 -1.46287,1.05026 0.075,-0.075 -1.38785,1.08777 0.075,-0.0375 -1.35033,1.16279 0.075,-0.037
 5 -1.31283,1.23781 0.075,-0.075 -0.82521,0.86272 -2.70067,-2.58815 z m 12.71567,-9.03975 0.52513,-0.26257 1.80045,-0.67516 1.80044,-0.63766 1.83796,-0.52513 1.91298,-0.41261 1.91298,-0.33758 1.57539,-0.22506 0.48762,3.71343 -1.53788,0.22506 0.075,-0.0375 -1.83796,0.33758 0.11253,-0.0375 -1.80045,0.4126 0.11252,0 -1.76293,0.48762 0.075,0 -1.72543,0.56265 0.075,-0.0375 -1.68792,0.67516 0.075,-0.0375 -0.45011,0.22506 -1.57539,-3.41335 z m 15.30381,-3.30082 0.45011,-0.0375 1.988,0.075 1.98799,0.15003 1.95049,0.26257 1.95048,0.33758 1.87547,0.41261 1.46287,0.4126 -1.05027,3.63841 -1.38784,-0.41261 0.075,0 -1.80045,-0.4126 0.11253,0.0375 -1.83796,-0.33758 0.075,0.0375 -1.83796,-0.26257 0.075,0.0375 -1.87547,-0.15004 0.075,0 -1.91298,-0.075 0.11253,0 -0.4126,0.0375 -0.075,-3.75093 z m 15.37883,2.92573 0.26257,0.11252 1.76294,0.7877 1.65041,0.90023 1.65041,0.90022 1.57539,1.05026 1.53788,1.08777 1.46287,1.16279 0.22505,0.15004 -2.47561,2.85071 -0.15004,-0.15004 0.0375,0.0375 -1.38785,-1.087
 77 0.075,0.075 -1.46286,-1.05026 0.075,0.0375 -1.50038,-0.97525 0.075,0.075 -1.53788,-0.90022 0.075,0.0375 -1.61291,-0.82521 0.075,0.0375 -1.65041,-0.75019 0.075,0.0375 -0.22506,-0.11252 1.38785,-3.48837 z m 12.97823,8.81469 1.01276,1.05026 1.2378,1.42536 1.16279,1.50037 1.05027,1.53789 1.05026,1.57539 0.93773,1.65041 0.4126,0.82521 -3.33833,1.68792 -0.4126,-0.7877 0.0375,0.075 -0.86272,-1.53788 0.0375,0.075 -0.97524,-1.53788 0.0375,0.075 -1.01275,-1.46286 0.0375,0.075 -1.08777,-1.38784 0.0375,0.075 -1.16278,-1.35034 0.0375,0.0375 -0.93773,-1.01275 2.70067,-2.58815 z m 8.47712,13.12827 0.30007,0.7877 0.60015,1.83796 0.56264,1.83796 0.4126,1.91297 0.33759,1.91298 0.26256,1.95048 0.11253,1.23781 -3.75093,0.30008 -0.11253,-1.2003 0.0375,0.11253 -0.26257,-1.87547 0.0375,0.11253 -0.33758,-1.83796 0,0.075 -0.41261,-1.80045 0.0375,0.11253 -0.48762,-1.76294 0,0.075 -0.56264,-1.76294 0.0375,0.11253 -0.30007,-0.75019 3.48837,-1.38785 z m 2.66316,15.41634 -0.0375,0.86272 -0.15004,1.98799 -0.26
 256,1.95049 -0.33759,1.91298 -0.4126,1.91297 -0.52513,1.87547 -0.37509,1.08777 -3.56339,-1.2003 0.37509,-1.05026 -0.0375,0.075 0.48762,-1.76294 -0.0375,0.075 0.41261,-1.80045 0,0.11253 0.33758,-1.83796 -0.0375,0.075 0.26257,-1.87547 0,0.11253 0.11253,-1.87547 0,0.075 0.0375,-0.78769 3.75094,0.075 z m -3.56339,15.2288 -0.26256,0.60015 -0.86272,1.68792 -0.93773,1.6129 -1.05026,1.6129 -1.05027,1.53788 -1.16279,1.46287 -1.16279,1.31283 -2.8132,-2.43811 1.08777,-1.27532 -0.0375,0.0375 1.08777,-1.38785 -0.0375,0.075 1.01275,-1.46286 -0.0375,0.075 0.97524,-1.53789 -0.0375,0.11253 0.86272,-1.57539 -0.0375,0.075 0.8252,-1.6129 -0.0375,0.075 0.22505,-0.52514 3.45086,1.53789 z m -9.30232,12.67816 -1.35033,1.16279 -1.46287,1.12528 -1.53788,1.12528 -1.57539,1.01275 -1.65041,0.93773 -1.68792,0.86272 -0.56264,0.26256 -1.53789,-3.41335 0.52513,-0.26256 -0.075,0.075 1.61291,-0.82521 -0.11253,0.0375 1.57539,-0.90022 -0.075,0.0375 1.50038,-0.97524 -0.075,0.075 1.46286,-1.05026 -0.075,0.0375 1.42536,-1
 .08777 -0.075,0.0375 1.27532,-1.12528 2.47561,2.85071 z m -13.46585,7.95198 -1.08777,0.37509 -1.87547,0.52513 -1.91298,0.45011 -1.91297,0.33759 -1.95049,0.22505 -1.98799,0.18755 -0.86272,0 -0.075,-3.75093 0.7877,0 -0.075,0 1.87547,-0.15004 -0.075,0 1.83796,-0.22506 -0.075,0 1.83796,-0.33758 -0.11253,0.0375 1.80045,-0.4126 -0.075,0.0375 1.76294,-0.52513 -0.075,0.0375 1.05026,-0.37509 1.2003,3.56339 z m -15.52887,2.0255 -1.2003,-0.11253 -1.95048,-0.22505 -1.91298,-0.33759 -1.91298,-0.45011 -1.83796,-0.52513 -1.80044,-0.60015 -0.86272,-0.33758 1.38785,-3.48837 0.78769,0.30007 -0.075,-0.0375 1.72543,0.60015 -0.11252,-0.0375 1.80044,0.52513 -0.11252,-0.0375 1.80045,0.4126 -0.11253,-0.0375 1.83796,0.33758 -0.075,0 1.83795,0.22506 -0.075,0 1.16279,0.075 -0.30008,3.75093 z m -15.04125,-4.20104 -0.78769,-0.41261 -1.65041,-0.93773 -1.5754,-1.01275 -1.53788,-1.12528 -1.46286,-1.16279 -1.42536,-1.2003 -1.08777,-1.05026 2.58814,-2.70068 1.05027,0.97525 -0.0375,-0.0375 1.35033,1.16279 -0.075,-0.0
 375 1.38785,1.08777 -0.075,-0.0375 1.46287,1.01275 -0.075,-0.0375 1.50037,0.97524 -0.075,-0.0375 1.5754,0.90022 -0.075,-0.0375 0.75018,0.37509 -1.72543,3.33834 z m -12.19053,-9.78994 -0.11253,-0.15004 -1.16279,-1.46287 -1.08777,-1.53788 -1.01275,-1.6129 -0.93774,-1.6129 -0.86271,-1.68792 -0.7877,-1.76294 -0.15004,-0.30008 3.48837,-1.38784 0.15004,0.30007 -0.0375,-0.11253 0.71268,1.65042 -0.0375,-0.075 0.8252,1.6129 -0.0375,-0.075 0.90023,1.57539 -0.0375,-0.075 0.93773,1.50038 -0.0375,-0.075 1.05027,1.46286 -0.075,-0.075 1.12528,1.38785 -0.075,-0.0375 0.11253,0.11253 -2.85071,2.43811 z m -7.42685,-13.84095 -0.3751,-1.42536 -0.45011,-1.87546 -0.33758,-1.95049 -0.26257,-1.95049 -0.15004,-1.95048 3.75094,-0.26257 0.15004,1.87547 0,-0.11253 0.22505,1.87547 -0.0375,-0.075 0.33759,1.83796 0,-0.11253 0.4126,1.80045 -0.0375,-0.075 0.4126,1.38785 -3.6384,1.01275 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3041"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="362.3895"
+         x="736.9231"
+         xml:space="preserve">FINISHED</text>
+      <path
+         id="path3043"
+         d="m 586.49611,238.22185 c 0,-20.59263 16.69166,-37.28429 37.28429,-37.28429 20.59263,0 37.24678,16.69166 37.24678,37.28429 0,20.55512 -16.65415,37.24678 -37.24678,37.24678 -20.59263,0 -37.28429,-16.69166 -37.28429,-37.24678"
+         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3045"
+         d="m 586.49611,238.22185 c 0,-20.59263 16.69166,-37.28429 37.28429,-37.28429 20.59263,0 37.24678,16.69166 37.24678,37.28429 0,20.55512 -16.65415,37.24678 -37.24678,37.24678 -20.59263,0 -37.28429,-16.69166 -37.28429,-37.24678"
+         style="fill:none;stroke:#41719c;stroke-width:1.23780835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3047"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="243.76004"
+         x="588.8797"
+         xml:space="preserve">RUNNING</text>
+      <path
+         id="path3049"
+         d="m 400.97489,237.17159 38.40957,0 0,1.87546 -38.40957,0 z m 31.37657,-4.23856 8.88971,5.17629 -8.88971,5.19504 c -0.45011,0.26257 -1.03151,0.11253 -1.29407,-0.33758 -0.26257,-0.45011 -0.11253,-1.01275 0.33758,-1.27532 l 7.50187,-4.38859 0,1.63165 -7.50187,-4.38859 c -0.43136,-0.26256 -0.60015,-0.8252 -0.33758,-1.27532 0.26256,-0.45011 0.84396,-0.60015 1.29407,-0.33758 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3051"
+         d="m 535.53967,237.17159 38.40957,0 0,1.87546 -38.40957,0 z m 31.37656,-4.23856 8.88972,5.17629 -8.88972,5.19504 c -0.45011,0.26257 -1.0315,0.11253 -1.29407,-0.33758 -0.26256,-0.45011 -0.0938,-1.01275 0.33758,-1.27532 l 7.50187,-4.38859 0,1.63165 -7.50187,-4.38859 c -0.43135,-0.26256 -0.60014,-0.8252 -0.33758,-1.27532 0.26257,-0.45011 0.84396,-0.60015 1.29407,-0.33758 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3053"
+         d="m 672.58006,252.85049 6.60164,5.2138 6.52663,5.17629 6.4141,5.10127 3.15078,2.55064 3.07577,2.51312 3.03825,2.47562 2.96324,2.47562 2.88822,2.4381 2.8132,2.4006 2.70067,2.36309 2.58815,2.28807 2.51313,2.28807 2.40059,2.21305 2.25056,2.17554 2.17555,2.13804 2.0255,2.10052 1.95049,2.0255 1.87546,2.02551 1.76294,1.95048 1.68792,1.95049 1.61291,1.91298 1.57539,1.87546 1.50037,1.87547 2.85071,3.63841 2.77569,3.6384 1.5754,2.06302 -1.50038,1.12528 -1.57539,-2.06302 0,0 -2.73818,-3.60089 0,0 -2.85071,-3.63841 0,0 -1.50038,-1.83796 0,0 -1.53788,-1.87546 0,0 -1.6129,-1.87547 0,0 -1.68792,-1.95049 0.0375,0.0375 -1.76294,-1.98799 0,0.0375 -1.83796,-2.02551 0,0.0375 -1.95049,-2.06301 0.0375,0.0375 -2.06301,-2.10053 0.0375,0.0375 -2.17554,-2.13803 0.0375,0 -2.28807,-2.13803 0.0375,0 -2.4006,-2.21305 0,0 -2.47562,-2.28807 0,0.0375 -2.58814,-2.32557 0,0 -2.70068,-2.32558 0,0 -2.8132,-2.4006 0.0375,0 -2.88822,-2.43811 0,0 -2.96324,-2.43811 0,0 -3.00074,-2.47561 0,0 -3.11328,-2.51313 -3.
 15078,-2.55063 0.0375,0 -6.4141,-5.10128 0,0 -6.52663,-5.17629 -6.60164,-5.17628 z m 72.46805,60.69012 1.2003,10.24005 -9.48986,-3.97599 c -0.48763,-0.22505 -0.71268,-0.78769 -0.52514,-1.23781 0.22506,-0.48762 0.75019,-0.71267 1.23781,-0.52513 l 7.98949,3.37584 -1.27531,0.97525 -1.01276,-8.62715 c -0.0375,-0.48762 0.30008,-0.97525 0.82521,-1.01276 0.52513,-0.075 0.97524,0.30008 1.05026,0.7877 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3055"
+         d="m 350.97494,285.22106 -1.35034,12.71566 -1.33158,12.67816 -1.29407,12.56563 -1.27532,12.43435 -0.61891,6.15153 -0.58139,6.09527 -0.60015,6.03901 -0.56264,5.98274 -0.54389,5.88896 -0.52513,5.85146 -0.48762,5.73893 -0.48762,5.66391 -0.45011,5.57014 -0.43136,5.47636 -0.39385,5.40135 -0.39385,5.32633 -0.35633,5.2513 -0.33759,5.17629 -0.33758,5.13878 -0.31883,5.06377 -0.5814,10.03375 -0.56264,9.86495 -0.52513,9.78994 -0.4126,7.87696 1.87547,0.0938 0.4126,-7.87696 0.52513,-9.77119 0.54389,-9.88371 0.60015,-10.015 0,0.0188 0.31882,-5.08252 0.31883,-5.12002 0.35634,-5.19505 0.35634,-5.23255 0,0 0.3751,-5.32633 0.4126,-5.38259 0,0 0.43136,-5.47636 0.45011,-5.57014 0,0 0.46886,-5.64516 0.50638,-5.75768 0,0 0.52513,-5.81395 0.54389,-5.90772 0.56264,-5.96399 0,0 0.58139,-6.039 0.60015,-6.09527 0,0 0.61891,-6.15153 1.25656,-12.43435 1.31283,-12.56563 1.33158,-12.65941 1.33158,-12.71566 z m -18.64215,170.53623 4.70743,9.15228 5.66391,-8.60839 c 0.28132,-0.43136 0.15003,-1.01276 -0.281
 32,-1.29408 -0.43136,-0.28132 -1.01276,-0.16879 -1.29408,0.26257 l -4.76368,7.25806 1.6129,0.0938 -3.97599,-7.72692 c -0.22506,-0.46887 -0.7877,-0.63766 -1.25656,-0.41261 -0.46887,0.24381 -0.63766,0.80645 -0.41261,1.27532 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3057"
+         d="m 452.38145,422.93661 c 0,-20.59263 16.69166,-37.28428 37.28429,-37.28428 20.59263,0 37.26553,16.69165 37.26553,37.28428 0,20.57388 -16.6729,37.26554 -37.26553,37.26554 -20.59263,0 -37.28429,-16.69166 -37.28429,-37.26554"
+         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3059"
+         d="m 452.38145,422.93661 c 0,-20.59263 16.69166,-37.28428 37.28429,-37.28428 20.59263,0 37.26553,16.69165 37.26553,37.28428 0,20.57388 -16.6729,37.26554 -37.26553,37.26554 -20.59263,0 -37.28429,-16.69166 -37.28429,-37.26554"
+         style="fill:none;stroke:#41719c;stroke-width:1.25656307px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3061"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="419.47919"
+         x="456.86319"
+         xml:space="preserve">CANCEL</text>
+      <text
+         id="text3063"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="419.47919"
+         x="517.77838"
+         xml:space="preserve">-</text>
+      <text
+         id="text3065"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="437.48367"
+         x="476.36804"
+         xml:space="preserve">ING</text>
+      <path
+         id="path3067"
+         d="m 440.69729,443.60426 -69.86116,41.52285 0.95649,1.6129 69.86116,-41.52285 z m -65.99769,34.26479 -4.98875,9.00224 10.29632,-0.075 c 0.50638,0 0.93773,-0.43135 0.91898,-0.95649 0,-0.50637 -0.4126,-0.91897 -0.93774,-0.91897 l -8.68341,0.075 0.82521,1.38785 4.2198,-7.59564 c 0.24381,-0.45011 0.075,-1.03151 -0.3751,-1.27532 -0.45011,-0.24381 -1.01275,-0.0938 -1.27531,0.35634 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3069"
+         d="m 491.63498,285.23981 -1.01275,12.60314 -0.50638,6.22655 -0.46887,6.18904 -0.46886,6.05776 -0.43136,5.96399 -0.39385,5.8327 -0.37509,5.66391 -0.33759,5.47637 -0.30007,5.32632 -0.26257,5.17629 -0.24381,5.06376 -0.22505,4.96999 -0.2063,4.89497 -0.31883,7.83946 1.85671,0.075 0.31883,-7.82069 0.2063,-4.91373 0,0 0.22506,-4.95123 0.24381,-5.06376 0,0 0.28132,-5.17629 0,0 0.30007,-5.30758 0,0 0.31883,-5.47636 0,0 0.37509,-5.64516 0.41261,-5.81394 0.43135,-5.96399 0,0 0.45012,-6.07651 0.48762,-6.17029 0.48762,-6.22655 1.01275,-12.60314 z m -9.52737,80.08245 4.81995,9.09602 5.55138,-8.68342 c 0.28132,-0.43135 0.15004,-1.01275 -0.28132,-1.29407 -0.43136,-0.28132 -1.01275,-0.15004 -1.29407,0.28132 l -4.68867,7.33308 1.63165,0.0563 -4.06976,-7.67066 c -0.24381,-0.45011 -0.80645,-0.63766 -1.27532,-0.39385 -0.45011,0.24381 -0.6189,0.80645 -0.39384,1.27532 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3071"
+         d="m 610.01447,278.05677 -4.05101,8.73968 -4.05101,8.70217 -4.12603,8.55213 -2.10052,4.23855 -2.13803,4.16354 -2.13803,4.12603 -2.21306,4.05101 -2.21305,4.0135 -2.28807,3.90097 -2.32558,3.78844 -2.36309,3.75094 -2.40059,3.60089 -2.51313,3.52588 -2.51313,3.41335 -2.62565,3.30083 -2.62565,3.18829 -2.70068,3.07577 -2.73818,3.00074 -2.77569,2.92573 -2.8132,2.85071 -2.85071,2.77569 -2.88822,2.70068 -2.92573,2.66316 -5.85146,5.2138 -5.92647,5.06376 -4.53863,3.82595 -1.2003,-1.42535 4.50112,-3.82595 0,0 5.92647,-5.06377 0,0 5.85146,-5.17629 0,0 2.88822,-2.62565 0,0 2.85071,-2.70067 0,0 2.85071,-2.77569 -0.0375,0 2.8132,-2.81321 0,0 2.73819,-2.88821 0,0 2.73818,-3.00075 -0.0375,0.0375 2.70067,-3.07577 -0.0375,0 2.66316,-3.15078 -0.0375,0 2.58814,-3.26332 0,0.0375 2.51313,-3.37584 0,0 2.47561,-3.48837 -0.0375,0 2.4006,-3.60089 0,0.0375 2.36309,-3.71342 0,0 2.28807,-3.78844 0,0 2.25056,-3.86347 0,0 2.21305,-3.97599 0,0 2.17554,-4.0135 0,0 2.17555,-4.12603 -0.0375,0.0375 2.13803,-4.16
 353 0,0 2.10052,-4.23856 0,0.0375 4.12603,-8.58964 0,0.0375 4.05101,-8.70217 0,0 4.05101,-8.73968 z m -70.59259,107.87688 -10.12752,1.76293 3.45086,-9.67741 c 0.15004,-0.48762 0.71268,-0.75018 1.2003,-0.60015 0.48762,0.18755 0.75019,0.71268 0.56264,1.2003 l -2.92573,8.17704 -1.05026,-1.23781 8.58964,-1.46286 c 0.48762,-0.11253 0.97524,0.22505 1.08777,0.75018 0.075,0.52514 -0.26257,0.97525 -0.7877,1.08778 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3073"
+         d="m 637.47131,198.34941 2.70067,-3.56338 2.66317,-3.52588 2.70067,-3.41335 2.70067,-3.33833 2.70067,-3.1883 1.35034,-1.50037 1.38785,-1.46287 1.35033,-1.42535 1.38785,-1.35034 1.38784,-1.27532 1.38785,-1.2378 1.35034,-1.12528 1.42535,-1.05027 1.38785,-0.97524 1.38784,-0.93773 1.38785,-0.86272 1.42535,-0.8252 2.7757,-1.46287 2.8132,-1.31282 2.77569,-1.2003 2.8132,-1.12528 1.05026,-0.3751 0.63766,1.72543 -1.01275,0.4126 0,0 -2.77569,1.08778 0.0375,0 -2.7757,1.20029 0.0375,-0.0375 -2.77569,1.31282 0.0375,-0.0375 -2.73818,1.46287 0,0 -1.35034,0.78769 0,-0.0375 -1.35033,0.86272 0,0 -1.35034,0.90022 0,0 -1.35034,0.93774 0.0375,0 -1.38784,1.05026 0.0375,-0.0375 -1.35034,1.12528 0,-0.0375 -1.35034,1.2003 0,0 -1.35033,1.23781 0.0375,0 -1.38785,1.31283 0.0375,0 -1.35034,1.38784 0,0 -1.35033,1.42536 0.0375,0 -1.35034,1.50037 0,0 -2.70067,3.15078 0.0375,-0.0375 -2.70068,3.33833 0,0 -2.66316,3.41335 0,0 -2.70067,3.48837 0,0 -2.66317,3.56338 z m 34.20852,-37.99696 10.16503,1.65041 -6.45
 16,8.027 c -0.33759,0.4126 -0.93774,0.48762 -1.31283,0.15004 -0.4126,-0.33759 -0.48762,-0.90023 -0.15004,-1.31283 l 5.43886,-6.78919 0.56264,1.53788 -8.55213,-1.42535 c -0.52513,-0.075 -0.86272,-0.56264 -0.7877,-1.08778 0.11253,-0.48762 0.56264,-0.8252 1.08777,-0.75018 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3075"
+         d="m 499.737,198.08685 12.60314,-7.53938 6.30157,-3.75093 6.26406,-3.71343 6.26406,-3.63841 6.18904,-3.56338 6.18904,-3.48837 6.15153,-3.37584 6.07652,-3.30083 6.039,-3.11327 6.0015,-3.00075 5.88896,-2.8132 5.85146,-2.66316 5.77644,-2.47562 5.66391,-2.25056 2.8132,-1.08777 2.77569,-0.97524 2.7757,-0.93774 2.73818,-0.86271 5.40134,-1.61291 5.28882,-1.38784 5.25131,-1.2003 5.13878,-1.01275 5.10127,-0.86272 5.02625,-0.71267 4.95124,-0.56264 4.91372,-0.45012 4.87622,-0.37509 4.8387,-0.26257 4.8012,-0.22505 4.76368,-0.11253 4.76369,-0.11253 7.57689,-0.075 0.0375,1.87547 -7.57689,0.075 0,0 -4.76369,0.11253 0,0 -4.76368,0.11253 0.0375,0 -4.8012,0.22505 0.0375,0 -4.83871,0.26257 0.0375,0 -4.87621,0.33758 0.0375,0 -4.91373,0.48762 0.0375,0 -4.95123,0.56264 0,0 -4.98874,0.71268 0.0375,0 -5.06377,0.82521 0.0375,0 -5.13878,1.01275 0.0375,0 -5.2138,1.2003 0.0375,0 -5.28881,1.38784 0,-0.0375 -5.36384,1.61291 0.0375,0 -2.73818,0.86271 0,0 -2.73819,0.90022 0.0375,0 -2.77569,1.01276 0,-0.03
 75 -2.77569,1.05026 0,0 -5.66391,2.25056 0.0375,0 -5.73893,2.43811 0,0 -5.81395,2.66316 0.0375,0 -5.88897,2.8132 0,0 -5.96398,2.96324 0,0 -6.03901,3.15078 0.0375,-0.0375 -6.07651,3.26331 0,0 -6.11402,3.37584 0,0 -6.18905,3.48837 0,0 -6.18904,3.56339 0,0 -6.26406,3.6384 0,0 -6.26406,3.71343 0.0375,0 -6.30157,3.75093 -12.60314,7.53938 z m 168.00435,-65.67886 8.92723,5.06376 -8.8147,5.28882 c -0.45011,0.26256 -1.01275,0.15003 -1.27532,-0.30008 -0.26256,-0.45011 -0.15004,-1.01275 0.30008,-1.31283 l 0,0 7.46436,-4.46361 0,1.65041 -7.53938,-4.31357 c -0.45011,-0.26257 -0.60015,-0.82521 -0.33759,-1.27532 0.22506,-0.45011 0.82521,-0.60015 1.27532,-0.33758 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3077"
+         d="m 360.65235,197.14911 23.18077,-13.54087 23.06825,-13.31582 11.44035,-6.48911 11.40284,-6.30157 11.32782,-6.11403 11.25281,-5.88896 11.14027,-5.6264 11.02775,-5.36384 10.91522,-4.98874 10.76518,-4.65116 10.61514,-4.27607 10.4276,-3.86346 10.27756,-3.37584 10.09002,-2.88822 4.98874,-1.27532 4.91372,-1.12528 4.87622,-1.01275 4.8387,-0.90023 4.76369,-0.78769 4.72618,-0.63766 4.72617,-0.56264 4.65116,-0.45011 4.61365,-0.3751 4.57614,-0.26256 4.53863,-0.18755 4.53863,-0.075 4.46362,-0.0375 4.46361,0.075 4.4261,0.15004 4.38859,0.22506 4.35109,0.26256 4.35108,0.33759 4.31358,0.4126 4.31357,0.4126 8.51462,1.05026 8.4396,1.2003 8.43961,1.35034 8.36458,1.42535 8.32708,1.46287 6.48911,1.2003 -0.33758,1.83795 -6.48912,-1.16278 0,0 -8.32707,-1.50038 0,0 -8.32708,-1.42535 0,0 -8.40209,-1.31283 0,0 -8.4396,-1.2003 0,0 -8.47712,-1.05026 0,0 -4.27606,-0.45011 0,0 -4.31357,-0.3751 0.0375,0 -4.35108,-0.33758 0.0375,0 -4.35108,-0.26257 0,0 -4.3886,-0.22505 0.0375,0 -4.4261,-0.15004 0.0375,0
  -4.4261,-0.075 0,0 -4.46362,0.0375 0,0 -4.46361,0.075 0,0 -4.53863,0.18755 0.0375,0 -4.57614,0.26256 0.0375,0 -4.61365,0.33759 0.0375,0 -4.65116,0.45011 0,0 -4.65116,0.56264 0,0 -4.72618,0.67517 0.0375,0 -4.76368,0.75018 0.0375,0 -4.83871,0.90023 0.0375,0 -4.8387,1.01275 0,0 -4.91373,1.12528 0.0375,-0.0375 -4.95123,1.27532 0.0375,0 -10.05251,2.88822 0.0375,-0.0375 -10.27756,3.41335 0.0375,-0.0375 -10.4276,3.86346 0.0375,-0.0375 -10.57763,4.27607 0,0 -10.72768,4.61365 0,0 -10.87771,5.02625 0.0375,-0.0375 -11.02774,5.36384 0,0 -11.10277,5.6264 0,-0.0375 -11.21529,5.88897 0,0 -11.32783,6.11402 0,0 -11.36533,6.30157 0,0 -11.47786,6.45161 0,0 -23.03073,13.31581 0,0 -23.18078,13.54088 z m 311.17752,-90.24748 7.83945,6.71417 -9.71492,3.48837 c -0.48762,0.18755 -1.01275,-0.075 -1.2003,-0.56264 -0.15003,-0.48762 0.11253,-1.01275 0.60015,-1.2003 l 8.13953,-2.96323 -0.30007,1.6129 -6.56414,-5.66391 c -0.4126,-0.33759 -0.45011,-0.93774 -0.11253,-1.31283 0.33759,-0.4126 0.93774,-0.45011 1.31283
 ,-0.11253 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/general_arch.md
----------------------------------------------------------------------
diff --git a/docs/internals/general_arch.md b/docs/internals/general_arch.md
new file mode 100644
index 0000000..28dc242
--- /dev/null
+++ b/docs/internals/general_arch.md
@@ -0,0 +1,89 @@
+---
+title:  "General Architecture and Process Model"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* This will be replaced by the TOC
+{:toc}
+
+## The Processes
+
+When the Flink system is started, it bring up the *JobManager* and one or more *TaskManagers*. The JobManager
+is the coordinator of the Flink system, while the TaskManagers are the workers that execute parts of the
+parallel programs. When starting the system in *local* mode, a single JobManager and TaskManager are brought
+up within the same JVM.
+
+When a program is submitted, a client is created that performs the pre-processing and turns the program
+into the parallel data flow form that is executed by the JobManager and TaskManagers. The figure below
+illustrates the different actors in the system very coarsely.
+
+<div style="text-align: center;">
+<img src="fig/ClientJmTm.svg" alt="The Interactions between Client, JobManager and TaskManager" height="400px" style="text-align: center;"/>
+</div>
+
+## Component Stack
+
+An alternative view on the system is given by the stack below. The different layers of the stack build on
+top of each other and raise the abstraction level of the program representations they accept:
+
+- The **runtime** layer receives a program in the form of a *JobGraph*. A JobGraph is a generic parallel
+data flow with arbitrary tasks that consume and produce data streams.
+
+- The **optimizer** and **common api** layer takes programs in the form of operator DAGs. The operators are
+specific (e.g., Map, Join, Filter, Reduce, ...), but are data type agnostic. The concrete types and their
+interaction with the runtime is specified by the higher layers.
+
+- The **API layer** implements multiple APIs that create operator DAGs for their programs. Each API needs
+to provide utilities (serializers, comparators) that describe the interaction between its data types and
+the runtime.
+
+<div style="text-align: center;">
+<img src="fig/stack.svg" alt="The Flink component stack" width="800px" />
+</div>
+
+## Projects and Dependencies
+
+The Flink system code is divided into multiple sub-projects. The goal is to reduce the number of
+dependencies that a project implementing a Flink progam needs, as well as to faciltate easier testing
+of smaller sub-modules.
+
+The individual projects and their dependencies are shown in the figure below.
+
+<div style="text-align: center;">
+<img src="fig/projects_dependencies.svg" alt="The Flink sub-projects and their dependencies" height="600px" style="text-align: center;"/>
+</div>
+
+In addition to the projects listed in the figure above, Flink currently contains the following sub-projects:
+
+- `flink-dist`: The *distribution* project. It defines how to assemble the compiled code, scripts, and other resources
+into the final folder structure that is ready to use.
+
+- `flink-staging`: A series of projects that are in an early version. Currently contains
+among other things projects for YARN support, JDBC data sources and sinks, hadoop compatibility,
+graph specific operators, and HBase connectors.
+
+- `flink-quickstart`: Scripts, maven archetypes, and example programs for the quickstarts and tutorials.
+
+- `flink-contrib`: Useful tools contributed by users. The code is maintained mainly by external contributors. The requirements for code being accepted into `flink-contrib` are lower compared to the rest of the code.
+
+
+
+
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/how_to_contribute.md
----------------------------------------------------------------------
diff --git a/docs/internals/how_to_contribute.md b/docs/internals/how_to_contribute.md
new file mode 100644
index 0000000..1b881be
--- /dev/null
+++ b/docs/internals/how_to_contribute.md
@@ -0,0 +1,23 @@
+---
+title:  "How to Contribute"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+The *How to Contribute* guide is located [on the project website](http://flink.apache.org/how-to-contribute.html).
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/ide_setup.md
----------------------------------------------------------------------
diff --git a/docs/internals/ide_setup.md b/docs/internals/ide_setup.md
new file mode 100644
index 0000000..1e0e77a
--- /dev/null
+++ b/docs/internals/ide_setup.md
@@ -0,0 +1,122 @@
+---
+title: "IDE setup"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* Replaced by the TOC
+{:toc}
+
+## Eclipse
+
+A brief guide how to set up Eclipse for development of the Flink core.
+Flink uses mixed Scala/Java projects, which pose a challenge to some IDEs.
+Below is the setup guide that works best from our personal experience.
+
+For Eclipse users, we currently recomment the Scala IDE 3.0.3, as the most robust solution.
+
+
+### Eclipse Scala IDE 3.0.3
+
+**NOTE:** While this version of the Scala IDE is not the newest, we have found it to be the most reliably working
+version for complex projects like Flink. One restriction is, though, that it works only with Java 7, not with Java 8.
+
+**Note:** Before following this setup, make sure to run the build from the command line once
+(`mvn clean package -DskipTests`)
+
+1. Download the Scala IDE (preferred) or install the plugin to Eclipse Kepler. See section below for download links
+   and instructions.
+2. Add the "macroparadise" compiler plugin to the Scala compiler.
+   Open "Window" -> "Preferences" -> "Scala" -> "Compiler" -> "Advanced" and put into the "Xplugin" field the path to
+   the *macroparadise* jar file (typically "/home/*-your-user-*/.m2/repository/org/scalamacros/paradise_2.10.4/2.0.1/paradise_2.10.4-2.0.1.jar").
+   Note: If you do not have the jar file, you probably did not ran the command line build.
+3. Import the Flink Maven projects ("File" -> "Import" -> "Maven" -> "Existing Maven Projects") 
+4. During the import, Eclipse will ask to automatically install additional Maven build helper plugins.
+5. Close the "flink-java8" project. Since Eclipse Kepler does not support Java 8, you cannot develop this project.
+
+
+#### Download links for Scala IDE 3.0.3
+
+The Scala IDE 3.0.3 is a previous stable release, and download links are a bit hidden.
+
+The pre-packaged Scala IDE can be downloaded from the following links:
+
+* [Linux (64 bit)](http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-linux.gtk.x86_64.tar.gz)
+* [Linux (32 bit)](http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-linux.gtk.x86.tar.gz)
+* [MaxOS X Cocoa (64 bit)](http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-macosx.cocoa.x86_64.zip)
+* [MaxOS X Cocoa (32 bit)](http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-macosx.cocoa.x86.zip)
+* [Windows (64 bit)](http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-win32.win32.x86_64.zip)
+* [Windows (32 bit)](http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-win32.win32.x86.zip)
+
+Alternatively, you can download Eclipse Kepler from [https://eclipse.org/downloads/packages/release/Kepler/SR2](https://eclipse.org/downloads/packages/release/Kepler/SR2)
+and manually add the Scala and Maven plugins by plugin site at [http://scala-ide.org/download/prev-stable.html](http://scala-ide.org/download/prev-stable.html).
+
+* Either use the update site to install the plugin ("Help" -> "Install new Software")
+* Or download the [zip file](http://download.scala-ide.org/sdk/helium/e38/scala211/stable/update-site.zip), unpack it, and move the contents of the
+  "plugins" and "features" folders into the equally named folders of the Eclipse root directory
+
+
+### Eclipse Scala IDE 4.0.0
+
+**NOTE: From personal experience, the use of the Scala IDE 4.0.0 performs worse than previous versions for complex projects like Flink.**
+**Version 4.0.0 does not handle mixed Java/Scala projects as robustly and it frequently raises incorrect import and type errors.**
+
+*Note:* Before following this setup, make sure to run the build from the command line once
+(`mvn clean package -DskipTests`)
+
+1. Download the Scala IDE: [http://scala-ide.org/download/sdk.html](http://scala-ide.org/download/sdk.html)
+2. Import the Flink Maven projects (File -> Import -> Maven -> Existing Maven Projects) 
+3. While importing the Flink project, the IDE may ask you to install an additional maven build helper plugin. 
+4. After the import, you need to set the Scala version of your projects to Scala 2.10 (from the default 2.11). 
+   To do that, select all projects that contain Scala code (marked by the small *S* on the project icon),
+   right click and select "Scala -> Set the Scala Installation" and pick "2.10.4".
+   Currently, the project to which that is relevant are "flink-runtime", "flink-scala", "flink-scala-examples",
+   "flink-streaming-example", "flink-streaming-scala", "flink-tests", "flink-test-utils", and "flink-yarn".
+5. Depending on your version of the Scala IDE, you may need to add the "macroparadise" compiler plugin to the
+   Scala compiler. Open "Window" -> "Preferences" -> "Scala" -> "Compiler" -> "Advanced" and put into the "Xplugin" field
+   the path to the *macroparadise* jar file (typically "/home/*-your-user-*/.m2/repository/org/scalamacros/paradise_2.10.4/2.0.1/paradise_2.10.4-2.0.1.jar")
+6. In order to compile the "flink-java-8" project, you may need to add a Java 8 execution environment.
+   See [this post](http://stackoverflow.com/questions/25391207/how-do-i-add-execution-environment-1-8-to-eclipse-luna)
+   for details.
+
+## IntelliJ IDEA
+
+A brief guide on how to set up IntelliJ IDEA IDE for development of the Flink core.
+As Eclipse is known to have issues with mixed Scala and Java projects, more and more contributers are migrating to IntelliJ IDEA.
+
+The following documentation describes the steps to setup IntelliJ IDEA 14.0.3 (https://www.jetbrains.com/idea/download/) with the Flink sources.
+
+Prior to doing anything, make sure that the Flink project is built at least once from the terminal:
+`mvn clean package -DskipTests`
+
+### Installing the Scala plugin
+1. Go to IntelliJ plugins settings (File -> Settings -> Plugins) and click on "Install Jetbrains plugin...". 
+2. Select and install the "Scala" plugin. 
+3. Restart IntelliJ
+
+### Installing the Scala compiler plugin
+1. Go to IntelliJ scala compiler settings (File -> Settings -> Build, Execution, Deployment -> Compiler -> Scala Compiler) and click on "Install Jetbrains plugin...". 
+2. Click on the green plus icon on the right to add a compiler plugin
+3. Point to the paradise jar: ~/.m2/repository/org/scalamacros/paradise_2.10.4/2.0.1/paradise_2.10.4-2.0.1.jar If there is no such file, this means that you should build Flink from the terminal as explained above.
+
+### Importing Flink
+1. Start IntelliJ IDEA and choose "Import Project"
+2. Select the root folder of the Flink repository
+3. Choose "Import project from external model" and select "Maven"
+4. Leave the default options and finish the import.

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/index.md
----------------------------------------------------------------------
diff --git a/docs/internals/index.md b/docs/internals/index.md
new file mode 100644
index 0000000..842f20c
--- /dev/null
+++ b/docs/internals/index.md
@@ -0,0 +1,21 @@
+---
+title: "Internals"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/job_scheduling.md
----------------------------------------------------------------------
diff --git a/docs/internals/job_scheduling.md b/docs/internals/job_scheduling.md
new file mode 100644
index 0000000..cd698b2
--- /dev/null
+++ b/docs/internals/job_scheduling.md
@@ -0,0 +1,82 @@
+---
+title:  "Jobs and Scheduling"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+This document briefly describes how Flink schedules jobs and 
+how it represents and tracks job status on the JobManager.
+
+* This will be replaced by the TOC
+{:toc}
+
+
+## Scheduling
+
+Execution resources in Flink are defined through _Task Slots_. Each TaskManager will have one or more task slots,
+each of which can run one pipeline of parallel tasks. A pipeline consists of multiple successive tasks, such as the
+*n-th* parallel instance of a MapFunction together with the *n-th* parallel instance of a ReduceFunction.
+Note that Flink often executes successive tasks concurrently: For Streaming programs, that happens in any case,
+but also for batch programs, it happens frequently.
+
+The figure below illustrates that. Consider a program with a data source, a *MapFunction*, and a *ReduceFunction*.
+The source and MapFunction are executed with a parallelism of 4, while the ReduceFunction is executed with a
+parallism of 3. A pipeline consists of the sequence Source - Map - Reduce. On a cluster with 2 TaskManagers with
+3 slots each, the program will be executed as described below.
+
+<div style="text-align: center;">
+<img src="fig/slots.svg" alt="Assigning Pipelines of Tasks to Slots" height="250px" style="text-align: center;"/>
+</div>
+
+Internally, Flink defines through {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/jobmanager/scheduler/SlotSharingGroup.java "SlotSharingGroup" %} 
+and {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/jobmanager/scheduler/CoLocationGroup.java "CoLocationGroup" %}
+which tasks may share a slot (permissive), respectively which tasks must be strictly placed into the same slot.
+
+
+## JobManager Data Structures
+
+During job execution, the JobManager keeps track of distributed tasks, decides when to schedule the next task (or set of tasks),
+and reacts to finished tasks or execution failures.
+
+The JobManager receives the {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/jobgraph/ "JobGraph" %},
+which is a representation of the data flow consisting of operators ({% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/jobgraph/AbstractJobVertex.java "JobVertex" %})
+and intermediate results ({% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/jobgraph/IntermediateDataSet.java "IntermediateDataSet" %}).
+Each operator has properies, like the parallelism and the code that it executes.
+In addition, the JobGraph has a set of attached libraries, that are neccessary to execute the code of the operators.
+
+The JobManager transforms the JobGraph into an {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/executiongraph/ "ExecutionGraph" %}.
+The ExecutionGraph is a parallel version of the JobGraph: For each JobVertex, it contains an {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/executiongraph/ExecutionVertex.java "ExecutionVertex" %} per parallel subtask. An operator with a parallelism of 100 will have one JobVertex and 100 ExecutionVertices.
+The ExecutionVertex tracks the state of execution of a particular subtask. All ExecutionVertices from one JobVertex are held in an
+{% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/executiongraph/ExecutionJobVertex.java "ExecutionJobVertex" %},
+which tracks the status of the operator as a whole. 
+Besides the vertices, the ExecutionGraph also contains the {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/executiongraph/IntermediateResult.java "IntermediateResult" %} and the {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/executiongraph/IntermediateResultPartition.java "IntermediateResultPartition" %}. The former tracks the state of the *IntermediateDataSet*, the latter the state of each of its partitions.
+
+<div style="text-align: center;">
+<img src="fig/job_and_execution_graph.svg" alt="JobGraph and ExecutionGraph" height="400px" style="text-align: center;"/>
+</div>
+
+During its execution, each parallel task goes through multiple stages, from *created* to *finished* or *failed*. The diagram below illustrates the 
+states and possible transitions between them. A task may be executed multiple times (for example in the course of failure recovery).
+For that reason, the execution of an ExecutionVertex is tracked in an {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/executiongraph/Execution.java "Execution" %}. Each ExecutionVertex has a current Execution, and prior Executions.
+
+<div style="text-align: center;">
+<img src="fig/state_machine.svg" alt="States and Transitions of Task Executions" height="300px" style="text-align: center;"/>
+</div>
+
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/logging.md
----------------------------------------------------------------------
diff --git a/docs/internals/logging.md b/docs/internals/logging.md
new file mode 100644
index 0000000..dee3d01
--- /dev/null
+++ b/docs/internals/logging.md
@@ -0,0 +1,96 @@
+---
+title: "How to use logging"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+The logging in Flink is implemented using the slf4j logging interface. As underlying logging framework, log4j is used. We also provide logback configuration files and pass them to the JVM's as properties. Users willing to use logback instead of log4j can just exclude log4j (or delete it from the lib/ folder).
+
+* This will be replaced by the TOC
+{:toc}
+
+## Configuring Log4j
+
+Log4j is controlled using property files. In Flink's case, the file is usually called `log4j.properties`. We pass the filename and location of this file using the `-Dlog4j.configuration=` parameter to the JVM.
+
+## Configuring logback
+
+For users and developers alike it is important to control the logging framework. 
+The configuration of the logging framework is exclusively done by configuration files.
+The configuration file either has to be specified by setting the environment property `-Dlogback.configurationFile=<file>` or by putting `logback.xml` in the classpath.
+The `conf` directory contains a `logback.xml` file which can be modified and is used if Flink is started outside of an IDE and with the provided starting scripts.
+The provided `logback.xml` has the following form:
+
+~~~ xml
+<configuration>
+    <appender name="file" class="ch.qos.logback.core.FileAppender">
+        <file>${log.file}</file>
+        <append>false</append>
+        <encoder>
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{60} %X{sourceThread} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <root level="INFO">
+        <appender-ref ref="file"/>
+    </root>
+</configuration>
+~~~
+
+In order to control the logging level of `org.apache.flink.runtime.jobgraph.JobGraph`, for example, one would have to add the following line to the configuration file.
+
+~~~ xml
+<logger name="org.apache.flink.runtime.jobgraph.JobGraph" level="DEBUG"/>
+~~~
+
+For further information on configuring logback see [LOGback's manual](http://logback.qos.ch/manual/configuration.html).
+
+## Best practices for developers
+
+The loggers using slf4j are created by calling
+
+~~~ java
+import org.slf4j.LoggerFactory
+import org.slf4j.Logger
+
+Logger LOG = LoggerFactory.getLogger(Foobar.class)
+~~~
+
+In order to benefit most from slf4j, it is recommended to use its placeholder mechanism.
+Using placeholders allows to avoid unnecessary string constructions in case that the logging level is set so high that the message would not be logged.
+The syntax of placeholders is the following:
+
+~~~ java
+LOG.info("This message contains {} placeholders. {}", 2, "Yippie");
+~~~
+
+Placeholders can also be used in conjunction with exceptions which shall be logged.
+
+~~~ java
+catch(Exception exception){
+	LOG.error("An {} occurred.", "error", exception);
+}
+~~~
+
+---
+
+*This documentation is maintained by the contributors of the individual components.
+We kindly ask anyone that adds and changes components to eventually provide a patch
+or pull request that updates these documents as well.*
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/types_serialization.md
----------------------------------------------------------------------
diff --git a/docs/internals/types_serialization.md b/docs/internals/types_serialization.md
new file mode 100644
index 0000000..187364b
--- /dev/null
+++ b/docs/internals/types_serialization.md
@@ -0,0 +1,228 @@
+---
+title:  "Type Extraction and Serialization"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+
+Flink handles types in a unique way, containing its own type descriptors,
+generic type extraction, and type serialization framework.
+This document describes the concepts and the rationale behind them.
+
+There are fundamental differences in the way that the Scala API and
+the Java API handle type information, so most of the issues described 
+here relate only to one of the to APIs.
+
+* This will be replaced by the TOC
+{:toc}
+
+
+## Type handling in Flink
+
+Flink tries to know as much information about what types enter and leave user functions as possible.
+This stands in contrast to the approach to just assuming nothing and letting the
+programming language and serialization framework handle all types dynamically.
+
+* To allow using POJOs and grouping/joining them by referring to field names, Flink needs the type
+  information to make checks (for typos and type compatibility) before the job is executed.
+
+* The more we know, the better serialization and data layout schemes the compiler/optimizer can develop.
+  That is quite important for the memory usage paradigm in Flink (work on serialized data
+  inside/outside the heap and make serialization very cheap).
+
+* For the upcoming logical programs (see roadmap draft) we need this to know the "schema" of functions.
+
+* Finally, it also spares users having to worry about serialization frameworks and having to register
+  types at those frameworks.
+
+
+## Flink's TypeInformation class
+
+The class {% gh_link /flink-core/src/main/java/org/apache/flink/api/common/typeinfo/TypeInformation.java "TypeInformation" %}
+is the base class for all type descriptors. It reveals some basic properties of the type and can generate serializers
+and, in specializations, comparators for the types.
+(*Note that comparators in Flink do much more than defining an order - they are basically the utility to handle keys*)
+
+Internally, Flink makes the following distinctions between types:
+
+* Basic types: All Java primitives and their boxed form, plus `void`, `String`, and `Date`.
+
+* Primitive arrays and Object arrays
+
+* Composite types 
+
+  * Flink Java Tuples (part of the Flink Java API)
+
+  * Scala *case classes* (including Scala tuples)
+
+  * POJOs: classes that follow a certain bean-like pattern
+ 
+* Scala auxiliary types (Option, Either, Lists, Maps, ...)
+
+* Generic types: These will not be serialized by Flink itself, but by Kryo.
+
+POJOs are of particular interest, because they support the creation of complex types and the use of field
+names in the definition of keys: `dataSet.join(another).where("name").equalTo("personName")`.
+They are also transparent to the runtime and can be handled very efficiently by Flink.
+
+
+**Rules for POJO types**
+
+Flink recognizes a data type as a POJO type (and allows "by-name" field referencing) if the following
+conditions are fulfilled:
+
+* The class is public and standalone (no non-static inner class)
+* The class has a public no-argument constructor
+* All fields in the class (and all superclasses) are either public or
+  or have a public getter and a setter method that follows the Java beans
+  naming conventions for getters and setters.
+
+
+## Type Information in the Scala API
+
+Scala has very elaborate concepts for runtime type information though *type manifests* and *class tags*. In
+general, types and methods have access to the types of their generic parameters - thus, Scala programs do
+not suffer from type erasure as Java programs do.
+
+In addition, Scala allows to run custom code in the Scala Compiler through Scala Macros - that means that some Flink
+code gets executed whenever you compile a Scala program written against Flink's Scala API.
+
+We use the Macros to look at the parameter types and return types of all user functions during compilation - that
+is the point in time when certainly all type information is perfectly available. Within the macro, we create
+a *TypeInformation* for the function's return types (or parameter types) and make it part of the operation.
+
+
+#### No Implicit Value for Evidence Parameter Error
+
+In the case where TypeInformation could not be created, programs fail to compile with an error
+stating *"could not find implicit value for evidence parameter of type TypeInformation"*.
+
+A frequent reason if that the code that generates the TypeInformation has not been imported.
+Make sure to import the entire flink.api.scala package.
+{% highlight scala %}
+import org.apache.flink.api.scala._
+{% endhighlight %}
+
+Another common cause are generic methods, which can be fixed as described in the following section.
+
+
+#### Generic Methods
+
+Consider the following case below:
+
+{% highlight scala %}
+def[T] selectFirst(input: DataSet[(T, _)]) : DataSet[T] = {
+  input.map { v => v._1 }
+}
+
+val data : DataSet[(String, Long) = ...
+
+val result = selectFirst(data)
+{% endhighlight %}
+
+For such generic methods, the data types of the function parameters and return type may not be the same
+for every call and are not known at the site where the method is defined. The code above will result
+in an error that not enough implicit evidence is available.
+
+In such cases, the type information has to be generated at the invocation site and passed to the
+method. Scala offers *implicit parameters* for that. 
+
+The following code tells Scala to bring a type information for *T* into the function. The type
+information will then be generated at the sites where the method is invoked, rather than where the
+method is defined.
+
+{% highlight scala %}
+def[T : TypeInformation] selectFirst(input: DataSet[(T, _)]) : DataSet[T] = {
+  input.map { v => v._1 }
+}
+{% endhighlight %}
+
+
+
+## Type Information in the Java API
+
+Java in general erases generic type information. Only for subclasses of generic classes, the subclass
+stores the type to which the generic type variables bind.
+
+Flink uses reflection on the (anonymous) classes that implement the user functions to figure out the types of
+the generic parameters of the function. This logic also contains some simple type inference for cases where
+the return types of functions are dependent on input types, such as in the generic utility method below:
+
+{% highlight java %}
+public class AppendOne<T> extends MapFunction<T, Tuple2<T, Long>> {
+
+    public Tuple2<T, Long> map(T value) {
+        return new Tuple2<T, Long>(value, 1L);
+    }
+}
+{% endhighlight %}
+
+Not in all cases can Flink figure out the data types of functions reliably in Java.
+Some issues remain with generic lambdas (we are trying to solve this with the Java community,
+see below) and with generic type variables that we cannot infer.
+
+
+#### Type Hints in the Java API
+
+To help cases where Flink cannot reconstruct the erased generic type information, the Java API
+offers so called *type hints* from version 0.9 on. The type hints tell the system the type of
+the data set produced by a function. The following gives an example:
+
+{% highlight java %}
+DataSet<SomeType> result = dataSet
+    .map(new MyGenericNonInferrableFunction<Long, SomeType>())
+        .returns(SomeType.class);
+{% endhighlight %}
+
+The `returns` statement specifies the produced type, in this case via a class. The hints support
+type definition through
+
+* Classes, for non-parameterized types (no generics)
+* Strings in the form of `returns("Tuple2<Integer, my.SomeType>")`, which are parsed and converted
+  to a TypeInformation.
+* A TypeInformation directly
+
+
+#### Type extraction for Java 8 lambdas
+
+Type extraction for Java 8 lambdas works differently than for non-lambdas, because lambdas are not associated
+with an implementing class that extends the function interface.
+
+Currently, Flink tries to figure out which method implements the lambda and uses Java's generic signatures to
+determine the parameter types and the return type. However, these signatures are not generated for lambdas
+by all compilers (as of writing this document only reliably by the Eclipse JDT compiler 4.5 from Milestone 2
+onwards)
+
+
+**Improving Type information for Java Lambdas**
+
+One of the Flink committers (Timo Walther) has actually become active in the Eclipse JDT compiler community and
+in the OpenJDK community and submitted patches to the compiler to improve availability of type information 
+available for Java 8 lambdas.
+
+The Eclipse JDT compiler has added support for this as of version 4.5 M4. Discussion about the feature in the
+OpenJDK compiler is pending.
+
+
+
+
+
+
+
+


[24/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/cli.md
----------------------------------------------------------------------
diff --git a/docs/cli.md b/docs/cli.md
deleted file mode 100644
index 7e80407..0000000
--- a/docs/cli.md
+++ /dev/null
@@ -1,190 +0,0 @@
----
-title:  "Command-Line Interface"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-
-Flink provides a command-line interface to run programs that are packaged
-as JAR files, and control their execution.  The command line interface is part
-of any Flink setup, available in local single node setups and in
-distributed setups. It is located under `<flink-home>/bin/flink`
-and connects by default to the running Flink master (JobManager) that was
-started from the same installation directory.
-
-A prerequisite to using the command line interface is that the Flink
-master (JobManager) has been started (via `<flink-home>/bin/start-
-local.sh` or `<flink-home>/bin/start-cluster.sh`) or that a YARN
-environment is available.
-
-The command line can be used to
-
-- submit jobs for execution,
-- cancel a running job,
-- provide information about a job, and
-- list running and waiting jobs.
-
-## Examples
-
--   Run example program with no arguments.
-
-        ./bin/flink run ./examples/flink-java-examples-{{ site.FLINK_VERSION_SHORT }}-WordCount.jar
-
--   Run example program with arguments for input and result files
-
-        ./bin/flink run ./examples/flink-java-examples-{{ site.FLINK_VERSION_SHORT }}-WordCount.jar \
-                               file:///home/user/hamlet.txt file:///home/user/wordcount_out
-
--   Run example program with parallelism 16 and arguments for input and result files
-
-        ./bin/flink run -p 16 ./examples/flink-java-examples-{{ site.FLINK_VERSION_SHORT }}-WordCount.jar \
-                                file:///home/user/hamlet.txt file:///home/user/wordcount_out
-
--   Run example program on a specific JobManager:
-
-        ./bin/flink run -m myJMHost:6123 \
-                               ./examples/flink-java-examples-{{ site.FLINK_VERSION_SHORT }}-WordCount.jar \
-                               file:///home/user/hamlet.txt file:///home/user/wordcount_out
-
--   Run example program with a specific class as an entry point:
-
-        ./bin/flink run -c org.apache.flink.examples.java.wordcount.WordCount \
-                               ./examples/flink-java-examples-{{ site.FLINK_VERSION_SHORT }}-WordCount.jar \
-                               file:///home/user/hamlet.txt file:///home/user/wordcount_out
-
--   Run example program using a [per-job YARN cluster](yarn_setup.html#run-a-single-flink-job-on-hadoop-yarn) with 2 TaskManagers:
-
-        ./bin/flink run -m yarn-cluster -yn 2 \
-                               ./examples/flink-java-examples-{{ site.FLINK_VERSION_STABLE }}-WordCount.jar \
-                               hdfs:///user/hamlet.txt hdfs:///user/wordcount_out
-
--   Display the optimized execution plan for the WordCount example program as JSON:
-
-        ./bin/flink info ./examples/flink-java-examples-{{ site.FLINK_VERSION_SHORT }}-WordCount.jar \
-                                file:///home/user/hamlet.txt file:///home/user/wordcount_out
-
--   List scheduled and running jobs (including their JobIDs):
-
-        ./bin/flink list
-
--   List scheduled jobs (including their JobIDs):
-
-        ./bin/flink list -s
-
--   List running jobs (including their JobIDs):
-
-        ./bin/flink list -r
-
--   Cancel a job:
-
-        ./bin/flink cancel <jobID>
-
-## Usage
-
-The command line syntax is as follows:
-
-~~~
-./flink <ACTION> [OPTIONS] [ARGUMENTS]
-
-The following actions are available:
-
-Action "run" compiles and runs a program.
-
-  Syntax: run [OPTIONS] <jar-file> <arguments>
-  "run" action options:
-     -c,--class <classname>           Class with the program entry point ("main"
-                                      method or "getPlan()" method. Only needed
-                                      if the JAR file does not specify the class
-                                      in its manifest.
-     -m,--jobmanager <host:port>      Address of the JobManager (master) to
-                                      which to connect. Specify 'yarn-cluster'
-                                      as the JobManager to deploy a YARN cluster
-                                      for the job. Use this flag to connect to a
-                                      different JobManager than the one
-                                      specified in the configuration.
-     -p,--parallelism <parallelism>   The parallelism with which to run the
-                                      program. Optional flag to override the
-                                      default value specified in the
-                                      configuration.
-  Additional arguments if -m yarn-cluster is set:
-     -yD <arg>                            Dynamic properties
-     -yd,--yarndetached                   Start detached
-     -yj,--yarnjar <arg>                  Path to Flink jar file
-     -yjm,--yarnjobManagerMemory <arg>    Memory for JobManager Container [in
-                                          MB]
-     -yn,--yarncontainer <arg>            Number of YARN container to allocate
-                                          (=Number of Task Managers)
-     -yq,--yarnquery                      Display available YARN resources
-                                          (memory, cores)
-     -yqu,--yarnqueue <arg>               Specify YARN queue.
-     -ys,--yarnslots <arg>                Number of slots per TaskManager
-     -yt,--yarnship <arg>                 Ship files in the specified directory
-                                          (t for transfer)
-     -ytm,--yarntaskManagerMemory <arg>   Memory per TaskManager Container [in
-                                          MB]
-
-
-Action "info" shows the optimized execution plan of the program (JSON).
-
-  Syntax: info [OPTIONS] <jar-file> <arguments>
-  "info" action options:
-     -c,--class <classname>           Class with the program entry point ("main"
-                                      method or "getPlan()" method. Only needed
-                                      if the JAR file does not specify the class
-                                      in its manifest.
-     -m,--jobmanager <host:port>      Address of the JobManager (master) to
-                                      which to connect. Specify 'yarn-cluster'
-                                      as the JobManager to deploy a YARN cluster
-                                      for the job. Use this flag to connect to a
-                                      different JobManager than the one
-                                      specified in the configuration.
-     -p,--parallelism <parallelism>   The parallelism with which to run the
-                                      program. Optional flag to override the
-                                      default value specified in the
-                                      configuration.
-
-
-Action "list" lists running and scheduled programs.
-
-  Syntax: list [OPTIONS]
-  "list" action options:
-     -m,--jobmanager <host:port>   Address of the JobManager (master) to which
-                                   to connect. Specify 'yarn-cluster' as the
-                                   JobManager to deploy a YARN cluster for the
-                                   job. Use this flag to connect to a different
-                                   JobManager than the one specified in the
-                                   configuration.
-     -r,--running                  Show only running programs and their JobIDs
-     -s,--scheduled                Show only scheduled programs and their JobIDs
-
-
-Action "cancel" cancels a running program.
-
-  Syntax: cancel [OPTIONS] <Job ID>
-  "cancel" action options:
-     -m,--jobmanager <host:port>   Address of the JobManager (master) to which
-                                   to connect. Specify 'yarn-cluster' as the
-                                   JobManager to deploy a YARN cluster for the
-                                   job. Use this flag to connect to a different
-                                   JobManager than the one specified in the
-                                   configuration.
-~~~

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/cluster_execution.md
----------------------------------------------------------------------
diff --git a/docs/cluster_execution.md b/docs/cluster_execution.md
deleted file mode 100644
index 34879dd..0000000
--- a/docs/cluster_execution.md
+++ /dev/null
@@ -1,146 +0,0 @@
----
-title:  "Cluster Execution"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-Flink programs can run distributed on clusters of many machines. There
-are two ways to send a program to a cluster for execution:
-
-## Command Line Interface
-
-The command line interface lets you submit packaged programs (JARs) to a cluster
-(or single machine setup).
-
-Please refer to the [Command Line Interface](cli.html) documentation for
-details.
-
-## Remote Environment
-
-The remote environment lets you execute Flink Java programs on a cluster
-directly. The remote environment points to the cluster on which you want to
-execute the program.
-
-### Maven Dependency
-
-If you are developing your program as a Maven project, you have to add the
-`flink-clients` module using this dependency:
-
-~~~xml
-<dependency>
-  <groupId>org.apache.flink</groupId>
-  <artifactId>flink-clients</artifactId>
-  <version>{{ site.FLINK_VERSION_SHORT }}</version>
-</dependency>
-~~~
-
-### Example
-
-The following illustrates the use of the `RemoteEnvironment`:
-
-~~~java
-public static void main(String[] args) throws Exception {
-    ExecutionEnvironment env = ExecutionEnvironment
-        .createRemoteEnvironment("strato-master", "7661", "/home/user/udfs.jar");
-
-    DataSet<String> data = env.readTextFile("hdfs://path/to/file");
-
-    data
-        .filter(new FilterFunction<String>() {
-            public boolean filter(String value) {
-                return value.startsWith("http://");
-            }
-        })
-        .writeAsText("hdfs://path/to/result");
-
-    env.execute();
-}
-~~~
-
-Note that the program contains custom user code and hence requires a JAR file with
-the classes of the code attached. The constructor of the remote environment
-takes the path(s) to the JAR file(s).
-
-## Remote Executor
-
-Similar to the RemoteEnvironment, the RemoteExecutor lets you execute
-Flink programs on a cluster directly. The remote executor accepts a
-*Plan* object, which describes the program as a single executable unit.
-
-### Maven Dependency
-
-If you are developing your program in a Maven project, you have to add the
-`flink-clients` module using this dependency:
-
-~~~xml
-<dependency>
-  <groupId>org.apache.flink</groupId>
-  <artifactId>flink-clients</artifactId>
-  <version>{{ site.FLINK_VERSION_SHORT }}</version>
-</dependency>
-~~~
-
-### Example
-
-The following illustrates the use of the `RemoteExecutor` with the Scala API:
-
-~~~scala
-def main(args: Array[String]) {
-    val input = TextFile("hdfs://path/to/file")
-
-    val words = input flatMap { _.toLowerCase().split("""\W+""") filter { _ != "" } }
-    val counts = words groupBy { x => x } count()
-
-    val output = counts.write(wordsOutput, CsvOutputFormat())
-  
-    val plan = new ScalaPlan(Seq(output), "Word Count")
-    val executor = new RemoteExecutor("strato-master", 7881, "/path/to/jarfile.jar")
-    executor.executePlan(p);
-}
-~~~
-
-The following illustrates the use of the `RemoteExecutor` with the Java API (as
-an alternative to the RemoteEnvironment):
-
-~~~java
-public static void main(String[] args) throws Exception {
-    ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-    DataSet<String> data = env.readTextFile("hdfs://path/to/file");
-
-    data
-        .filter(new FilterFunction<String>() {
-            public boolean filter(String value) {
-                return value.startsWith("http://");
-            }
-        })
-        .writeAsText("hdfs://path/to/result");
-
-    Plan p = env.createProgramPlan();
-    RemoteExecutor e = new RemoteExecutor("strato-master", 7881, "/path/to/jarfile.jar");
-    e.executePlan(p);
-}
-~~~
-
-Note that the program contains custom UDFs and hence requires a JAR file with
-the classes of the code attached. The constructor of the remote executor takes
-the path(s) to the JAR file(s).

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/cluster_setup.md
----------------------------------------------------------------------
diff --git a/docs/cluster_setup.md b/docs/cluster_setup.md
deleted file mode 100644
index 2ee9f3c..0000000
--- a/docs/cluster_setup.md
+++ /dev/null
@@ -1,346 +0,0 @@
----
-title:  "Cluster Setup"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-This documentation is intended to provide instructions on how to run
-Flink in a fully distributed fashion on a static (but possibly
-heterogeneous) cluster.
-
-This involves two steps. First, installing and configuring Flink and
-second installing and configuring the [Hadoop Distributed
-Filesystem](http://hadoop.apache.org/) (HDFS).
-
-## Preparing the Cluster
-
-### Software Requirements
-
-Flink runs on all *UNIX-like environments*, e.g. **Linux**, **Mac OS X**,
-and **Cygwin** (for Windows) and expects the cluster to consist of **one master
-node** and **one or more worker nodes**. Before you start to setup the system,
-make sure you have the following software installed **on each node**:
-
-- **Java 1.6.x** or higher,
-- **ssh** (sshd must be running to use the Flink scripts that manage
-  remote components)
-
-If your cluster does not fulfill these software requirements you will need to
-install/upgrade it.
-
-For example, on Ubuntu Linux, type in the following commands to install Java and
-ssh:
-
-~~~bash
-sudo apt-get install ssh 
-sudo apt-get install openjdk-7-jre
-~~~
-
-You can check the correct installation of Java by issuing the following command:
-
-~~~bash
-java -version
-~~~
-
-The command should output something comparable to the following on every node of
-your cluster (depending on your Java version, there may be small differences):
-
-~~~bash
-java version "1.6.0_22"
-Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
-Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)
-~~~
-
-To make sure the ssh daemon is running properly, you can use the command
-
-~~~bash
-ps aux | grep sshd
-~~~
-
-Something comparable to the following line should appear in the output
-of the command on every host of your cluster:
-
-~~~bash
-root       894  0.0  0.0  49260   320 ?        Ss   Jan09   0:13 /usr/sbin/sshd
-~~~
-
-### Configuring Remote Access with ssh
-
-In order to start/stop the remote processes, the master node requires access via
-ssh to the worker nodes. It is most convenient to use ssh's public key
-authentication for this. To setup public key authentication, log on to the
-master as the user who will later execute all the Flink components. **The
-same user (i.e. a user with the same user name) must also exist on all worker
-nodes**. For the remainder of this instruction we will refer to this user as
-*flink*. Using the super user *root* is highly discouraged for security
-reasons.
-
-Once you logged in to the master node as the desired user, you must generate a
-new public/private key pair. The following command will create a new
-public/private key pair into the *.ssh* directory inside the home directory of
-the user *flink*. See the ssh-keygen man page for more details. Note that
-the private key is not protected by a passphrase.
-
-~~~bash
-ssh-keygen -b 2048 -P '' -f ~/.ssh/id_rsa
-~~~
-
-Next, copy/append the content of the file *.ssh/id_rsa.pub* to your
-authorized_keys file. The content of the authorized_keys file defines which
-public keys are considered trustworthy during the public key authentication
-process. On most systems the appropriate command is
-
-~~~bash
-cat .ssh/id_rsa.pub >> .ssh/authorized_keys
-~~~
-
-On some Linux systems, the authorized keys file may also be expected by the ssh
-daemon under *.ssh/authorized_keys2*. In either case, you should make sure the
-file only contains those public keys which you consider trustworthy for each
-node of cluster.
-
-Finally, the authorized keys file must be copied to every worker node of your
-cluster. You can do this by repeatedly typing in
-
-~~~bash
-scp .ssh/authorized_keys <worker>:~/.ssh/
-~~~
-
-and replacing *\<worker\>* with the host name of the respective worker node.
-After having finished the copy process, you should be able to log on to each
-worker node from your master node via ssh without a password.
-
-### Setting JAVA_HOME on each Node
-
-Flink requires the `JAVA_HOME` environment variable to be set on the
-master and all worker nodes and point to the directory of your Java
-installation.
-
-You can set this variable in `conf/flink-conf.yaml` via the
-`env.java.home` key.
-
-Alternatively, add the following line to your shell profile. If you use the
-*bash* shell (probably the most common shell), the shell profile is located in
-*\~/.bashrc*:
-
-~~~bash
-export JAVA_HOME=/path/to/java_home/
-~~~
-
-If your ssh daemon supports user environments, you can also add `JAVA_HOME` to
-*.\~/.ssh/environment*. As super user *root* you can enable ssh user
-environments with the following commands:
-
-~~~bash
-echo "PermitUserEnvironment yes" >> /etc/ssh/sshd_config
-/etc/init.d/ssh restart
-~~~
-
-## Hadoop Distributed Filesystem (HDFS) Setup
-
-The Flink system currently uses the Hadoop Distributed Filesystem (HDFS)
-to read and write data in a distributed fashion. It is possible to use
-Flink without HDFS or other distributed file systems.
-
-Make sure to have a running HDFS installation. The following instructions are
-just a general overview of some required settings. Please consult one of the
-many installation guides available online for more detailed instructions.
-
-__Note that the following instructions are based on Hadoop 1.2 and might differ 
-for Hadoop 2.__
-
-### Downloading, Installing, and Configuring HDFS
-
-Similar to the Flink system HDFS runs in a distributed fashion. HDFS
-consists of a **NameNode** which manages the distributed file system's meta
-data. The actual data is stored by one or more **DataNodes**. For the remainder
-of this instruction we assume the HDFS's NameNode component runs on the master
-node while all the worker nodes run an HDFS DataNode.
-
-To start, log on to your master node and download Hadoop (which includes  HDFS)
-from the Apache [Hadoop Releases](http://hadoop.apache.org/releases.html) page.
-
-Next, extract the Hadoop archive.
-
-After having extracted the Hadoop archive, change into the Hadoop directory and
-edit the Hadoop environment configuration file:
-
-~~~bash
-cd hadoop-*
-vi conf/hadoop-env.sh
-~~~
-
-Uncomment and modify the following line in the file according to the path of
-your Java installation.
-
-~~~
-export JAVA_HOME=/path/to/java_home/
-~~~
-
-Save the changes and open the HDFS configuration file *conf/hdfs-site.xml*. HDFS
-offers multiple configuration parameters which affect the behavior of the
-distributed file system in various ways. The following excerpt shows a minimal
-configuration which is required to make HDFS work. More information on how to
-configure HDFS can be found in the [HDFS User
-Guide](http://hadoop.apache.org/docs/r1.2.1/hdfs_user_guide.html) guide.
-
-~~~xml
-<configuration>
-  <property>
-    <name>fs.default.name</name>
-    <value>hdfs://MASTER:50040/</value>
-  </property>
-  <property>
-    <name>dfs.data.dir</name>
-    <value>DATAPATH</value>
-  </property>
-</configuration>
-~~~
-
-Replace *MASTER* with the IP/host name of your master node which runs the
-*NameNode*. *DATAPATH* must be replaced with path to the directory in which the
-actual HDFS data shall be stored on each worker node. Make sure that the
-*flink* user has sufficient permissions to read and write in that
-directory.
-
-After having saved the HDFS configuration file, open the file *conf/slaves* and
-enter the IP/host name of those worker nodes which shall act as *DataNode*s.
-Each entry must be separated by a line break.
-
-~~~
-<worker 1>
-<worker 2>
-.
-.
-.
-<worker n>
-~~~
-
-Initialize the HDFS by typing in the following command. Note that the
-command will **delete all data** which has been previously stored in the
-HDFS. However, since we have just installed a fresh HDFS, it should be
-safe to answer the confirmation with *yes*.
-
-~~~bash
-bin/hadoop namenode -format
-~~~
-
-Finally, we need to make sure that the Hadoop directory is available to
-all worker nodes which are intended to act as DataNodes and that all nodes
-**find the directory under the same path**. We recommend to use a shared network
-directory (e.g. an NFS share) for that. Alternatively, one can copy the
-directory to all nodes (with the disadvantage that all configuration and
-code updates need to be synced to all nodes).
-
-### Starting HDFS
-
-To start the HDFS log on to the master and type in the following
-commands
-
-~~~bash
-cd hadoop-*
-bin/start-dfs.sh
-~~~
-
-If your HDFS setup is correct, you should be able to open the HDFS
-status website at *http://MASTER:50070*. In a matter of a seconds,
-all DataNodes should appear as live nodes. For troubleshooting we would
-like to point you to the [Hadoop Quick
-Start](http://wiki.apache.org/hadoop/QuickStart)
-guide.
-
-## Flink Setup
-
-Go to the [downloads page]({{site.baseurl}}/downloads.html) and get the ready to run
-package. Make sure to pick the Flink package **matching your Hadoop
-version**.
-
-After downloading the latest release, copy the archive to your master node and
-extract it:
-
-~~~bash
-tar xzf flink-*.tgz
-cd flink-*
-~~~
-
-### Configuring the Cluster
-
-After having extracted the system files, you need to configure Flink for
-the cluster by editing *conf/flink-conf.yaml*.
-
-Set the `jobmanager.rpc.address` key to point to your master node. Furthermode
-define the maximum amount of main memory the JVM is allowed to allocate on each
-node by setting the `jobmanager.heap.mb` and `taskmanager.heap.mb` keys.
-
-The value is given in MB. If some worker nodes have more main memory which you
-want to allocate to the Flink system you can overwrite the default value
-by setting an environment variable `FLINK_TM_HEAP` on the respective
-node.
-
-Finally you must provide a list of all nodes in your cluster which shall be used
-as worker nodes. Therefore, similar to the HDFS configuration, edit the file
-*conf/slaves* and enter the IP/host name of each worker node. Each worker node
-will later run a TaskManager.
-
-Each entry must be separated by a new line, as in the following example:
-
-~~~
-192.168.0.100
-192.168.0.101
-.
-.
-.
-192.168.0.150
-~~~
-
-The Flink directory must be available on every worker under the same
-path. Similarly as for HDFS, you can use a shared NSF directory, or copy the
-entire Flink directory to every worker node.
-
-Please see the [configuration page](config.html) for details and additional
-configuration options.
-
-In particular, 
-
- * the amount of available memory per TaskManager (`taskmanager.heap.mb`), 
- * the number of available CPUs per machine (`taskmanager.numberOfTaskSlots`),
- * the total number of CPUs in the cluster (`parallelism.default`) and
- * the temporary directories (`taskmanager.tmp.dirs`)
-
-are very important configuration values.
-
-
-### Starting Flink
-
-The following script starts a JobManager on the local node and connects via
-SSH to all worker nodes listed in the *slaves* file to start the
-TaskManager on each node. Now your Flink system is up and
-running. The JobManager running on the local node will now accept jobs
-at the configured RPC port.
-
-Assuming that you are on the master node and inside the Flink directory:
-
-~~~bash
-bin/start-cluster.sh
-~~~
-
-To stop Flink, there is also a `stop-cluster.sh` script.

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/coding_guidelines.md
----------------------------------------------------------------------
diff --git a/docs/coding_guidelines.md b/docs/coding_guidelines.md
deleted file mode 100644
index a126f2b..0000000
--- a/docs/coding_guidelines.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title:  "Coding Guidelines"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-The coding guidelines are now located [on the project website](http://flink.apache.org/coding_guidelines.html).

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/config.md
----------------------------------------------------------------------
diff --git a/docs/config.md b/docs/config.md
deleted file mode 100644
index 1068152..0000000
--- a/docs/config.md
+++ /dev/null
@@ -1,385 +0,0 @@
----
-title:  "Configuration"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-## Overview
-
-The default configuration parameters allow Flink to run out-of-the-box
-in single node setups.
-
-This page lists the most common options that are typically needed to set
-up a well performing (distributed) installation. In addition a full
-list of all available configuration parameters is listed here.
-
-All configuration is done in `conf/flink-conf.yaml`, which is expected to be
-a flat collection of [YAML key value pairs](http://www.yaml.org/spec/1.2/spec.html)
-with format `key: value`.
-
-The system and run scripts parse the config at startup time. Changes to the configuration
-file require restarting the Flink JobManager and TaskManagers.
-
-The configuration files for the TaskManagers can be different, Flink does not assume 
-uniform machines in the cluster.
-
-
-## Common Options
-
-- `env.java.home`: The path to the Java installation to use (DEFAULT: system's
-default Java installation, if found). Needs to be specified if the startup
-scipts fail to automatically resolve the java home directory. Can be specified
-to point to a specific java installation or version. If this option is not
-specified, the startup scripts also evaluate the `$JAVA_HOME` environment variable.
-
-- `jobmanager.rpc.address`: The IP address of the JobManager, which is the
-master/coordinator of the distributed system (DEFAULT: localhost).
-
-- `jobmanager.rpc.port`: The port number of the JobManager (DEFAULT: 6123).
-
-- `jobmanager.heap.mb`: JVM heap size (in megabytes) for the JobManager. You may have to increase the heap size for the JobManager if you are running
-very large applications (with many operators), or if you are keeping a long history of them.
-
-- `taskmanager.heap.mb`: JVM heap size (in megabytes) for the TaskManagers,
-which are the parallel workers of the system. In
-contrast to Hadoop, Flink runs operators (e.g., join, aggregate) and
-user-defined functions (e.g., Map, Reduce, CoGroup) inside the TaskManager
-(including sorting/hashing/caching), so this value should be as
-large as possible. If the cluster is exclusively running Flink,
-the total amount of available memory per machine minus some memory for the 
-operating system (maybe 1-2 GB) is a good value.
-On YARN setups, this value is automatically configured to the size of 
-the TaskManager's YARN container, minus a certain tolerance value.
-
-- `taskmanager.numberOfTaskSlots`: The number of parallel operator or
-user function instances that a single TaskManager can run (DEFAULT: 1).
-If this value is larger than 1, a single TaskManager takes multiple instances of
-a function or operator. That way, the TaskManager can utilize multiple CPU cores,
-but at the same time, the available memory is divided between the different
-operator or function instances.
-This value is typically proportional to the number of physical CPU cores that
-the TaskManager's machine has (e.g., equal to the number of cores, or half the
-number of cores). [More about task slots](config.html#configuring-taskmanager-processing-slots).
-
-- `parallelism.default`: The default parallelism to use for programs that have
-no parallelism specified. (DEFAULT: 1). For setups that have no concurrent jobs
-running, setting this value to NumTaskManagers * NumSlotsPerTaskManager will
-cause the system to use all available execution resources for the program's
-execution. **Note**: The default parallelism can be overwriten for an entire
-job by calling `setParallelism(int parallelism)` on the `ExecutionEnvironment`
-or by passing `-p <parallelism>` to the Flink Command-line frontend. It can be
-overwritten for single transformations by calling `setParallelism(int
-parallelism)` on an operator. See the [programming
-guide](programming_guide.html#parallel-execution) for more information about the
-parallelism.
-
-- `fs.hdfs.hadoopconf`: The absolute path to the Hadoop File System's (HDFS)
-configuration directory (OPTIONAL VALUE).
-Specifying this value allows programs to reference HDFS files using short URIs
-(`hdfs:///path/to/files`, without including the address and port of the NameNode
-in the file URI). Without this option, HDFS files can be accessed, but require
-fully qualified URIs like `hdfs://address:port/path/to/files`.
-This option also causes file writers to pick up the HDFS's default values for block sizes
-and replication factors. Flink will look for the "core-site.xml" and
-"hdfs-site.xml" files in teh specified directory.
-
-
-## Advanced Options
-
-- `taskmanager.tmp.dirs`: The directory for temporary files, or a list of
-directories separated by the systems directory delimiter (for example ':'
-(colon) on Linux/Unix). If multiple directories are specified, then the temporary
-files will be distributed across the directories in a round-robin fashion. The
-I/O manager component will spawn one reading and one writing thread per
-directory. A directory may be listed multiple times to have the I/O manager use
-multiple threads for it (for example if it is physically stored on a very fast
-disc or RAID) (DEFAULT: The system's tmp dir).
-
-- `jobmanager.web.port`: Port of the JobManager's web interface (DEFAULT: 8081).
-
-- `fs.overwrite-files`: Specifies whether file output writers should overwrite
-existing files by default. Set to *true* to overwrite by default, *false* otherwise.
-(DEFAULT: false)
-
-- `fs.output.always-create-directory`: File writers running with a parallelism
-larger than one create a directory for the output file path and put the different
-result files (one per parallel writer task) into that directory. If this option
-is set to *true*, writers with a parallelism of 1 will also create a directory
-and place a single result file into it. If the option is set to *false*, the
-writer will directly create the file directly at the output path, without
-creating a containing directory. (DEFAULT: false)
-
-- `taskmanager.network.numberOfBuffers`: The number of buffers available to the
-network stack. This number determines how many streaming data exchange channels
-a TaskManager can have at the same time and how well buffered the channels are.
-If a job is rejected or you get a warning that the system has not enough buffers
-available, increase this value (DEFAULT: 2048).
-
-- `taskmanager.memory.size`: The amount of memory (in megabytes) that the task
-manager reserves on the JVM's heap space for sorting, hash tables, and caching
-of intermediate results. If unspecified (-1), the memory manager will take a fixed
-ratio of the heap memory available to the JVM, as specified by
-`taskmanager.memory.fraction`. (DEFAULT: -1)
-
-- `taskmanager.memory.fraction`: The relative amount of memory that the task
-manager reserves for sorting, hash tables, and caching of intermediate results.
-For example, a value of 0.8 means that TaskManagers reserve 80% of the
-JVM's heap space for internal data buffers, leaving 20% of the JVM's heap space
-free for objects created by user-defined functions. (DEFAULT: 0.7)
-This parameter is only evaluated, if `taskmanager.memory.size` is not set.
-
-
-## Full Reference
-
-### HDFS
-
-These parameters configure the default HDFS used by Flink. Setups that do not
-specify a HDFS configuration have to specify the full path to 
-HDFS files (`hdfs://address:port/path/to/files`) Files will also be written
-with default HDFS parameters (block size, replication factor).
-
-- `fs.hdfs.hadoopconf`: The absolute path to the Hadoop configuration directory.
-The system will look for the "core-site.xml" and "hdfs-site.xml" files in that
-directory (DEFAULT: null).
-- `fs.hdfs.hdfsdefault`: The absolute path of Hadoop's own configuration file
-"hdfs-default.xml" (DEFAULT: null).
-- `fs.hdfs.hdfssite`: The absolute path of Hadoop's own configuration file
-"hdfs-site.xml" (DEFAULT: null).
-
-### JobManager &amp; TaskManager
-
-The following parameters configure Flink's JobManager and TaskManagers.
-
-- `jobmanager.rpc.address`: The IP address of the JobManager, which is the
-master/coordinator of the distributed system (DEFAULT: localhost).
-- `jobmanager.rpc.port`: The port number of the JobManager (DEFAULT: 6123).
-- `taskmanager.rpc.port`: The task manager's IPC port (DEFAULT: 6122).
-- `taskmanager.data.port`: The task manager's port used for data exchange
-operations (DEFAULT: 6121).
-- `jobmanager.heap.mb`: JVM heap size (in megabytes) for the JobManager
-(DEFAULT: 256).
-- `taskmanager.heap.mb`: JVM heap size (in megabytes) for the TaskManagers,
-which are the parallel workers of the system. In
-contrast to Hadoop, Flink runs operators (e.g., join, aggregate) and
-user-defined functions (e.g., Map, Reduce, CoGroup) inside the TaskManager
-(including sorting/hashing/caching), so this value should be as
-large as possible (DEFAULT: 512). On YARN setups, this value is automatically
-configured to the size of the TaskManager's YARN container, minus a
-certain tolerance value.
-- `taskmanager.numberOfTaskSlots`: The number of parallel operator or
-user function instances that a single TaskManager can run (DEFAULT: 1).
-If this value is larger than 1, a single TaskManager takes multiple instances of
-a function or operator. That way, the TaskManager can utilize multiple CPU cores,
-but at the same time, the available memory is divided between the different
-operator or function instances.
-This value is typically proportional to the number of physical CPU cores that
-the TaskManager's machine has (e.g., equal to the number of cores, or half the
-number of cores).
-- `taskmanager.tmp.dirs`: The directory for temporary files, or a list of
-directories separated by the systems directory delimiter (for example ':'
-(colon) on Linux/Unix). If multiple directories are specified, then the temporary
-files will be distributed across the directories in a round robin fashion. The
-I/O manager component will spawn one reading and one writing thread per
-directory. A directory may be listed multiple times to have the I/O manager use
-multiple threads for it (for example if it is physically stored on a very fast
-disc or RAID) (DEFAULT: The system's tmp dir).
-- `taskmanager.network.numberOfBuffers`: The number of buffers available to the
-network stack. This number determines how many streaming data exchange channels
-a TaskManager can have at the same time and how well buffered the channels are.
-If a job is rejected or you get a warning that the system has not enough buffers
-available, increase this value (DEFAULT: 2048).
-- `taskmanager.network.bufferSizeInBytes`: The size of the network buffers, in
-bytes (DEFAULT: 32768 (= 32 KiBytes)).
-- `taskmanager.memory.size`: The amount of memory (in megabytes) that the task
-manager reserves on the JVM's heap space for sorting, hash tables, and caching
-of intermediate results. If unspecified (-1), the memory manager will take a fixed
-ratio of the heap memory available to the JVM, as specified by
-`taskmanager.memory.fraction`. (DEFAULT: -1)
-- `taskmanager.memory.fraction`: The relative amount of memory that the task
-manager reserves for sorting, hash tables, and caching of intermediate results.
-For example, a value of 0.8 means that TaskManagers reserve 80% of the
-JVM's heap space for internal data buffers, leaving 20% of the JVM's heap space
-free for objects created by user-defined functions. (DEFAULT: 0.7)
-This parameter is only evaluated, if `taskmanager.memory.size` is not set.
-- `jobclient.polling.interval`: The interval (in seconds) in which the client
-polls the JobManager for the status of its job (DEFAULT: 2).
-- `taskmanager.runtime.max-fan`: The maximal fan-in for external merge joins and
-fan-out for spilling hash tables. Limits the number of file handles per operator,
-but may cause intermediate merging/partitioning, if set too small (DEFAULT: 128).
-- `taskmanager.runtime.sort-spilling-threshold`: A sort operation starts spilling
-when this fraction of its memory budget is full (DEFAULT: 0.8).
-- `taskmanager.heartbeat-interval`: The interval in which the TaskManager sends
-heartbeats to the JobManager.
-- `jobmanager.max-heartbeat-delay-before-failure.msecs`: The maximum time that a
-TaskManager hearbeat may be missing before the TaskManager is considered failed.
-
-### Distributed Coordination (via Akka)
-
-- `akka.ask.timeout`: Timeout used for all futures and blocking Akka calls. If Flink fails due to timeouts then you should try to increase this value. Timeouts can be caused by slow machines or a congested network. The timeout value requires a time-unit specifier (ms/s/min/h/d) (DEFAULT: **100 s**).
-- `akka.lookup.timeout`: Timeout used for the lookup of the JobManager. The timeout value has to contain a time-unit specifier (ms/s/min/h/d) (DEFAULT: **10 s**).
-- `akka.framesize`: Maximum size of messages which are sent between the JobManager and the TaskManagers. If Flink fails because messages exceed this limit, then you should increase it. The message size requires a size-unit specifier (DEFAULT: **10485760b**).
-- `akka.watch.heartbeat.interval`: Heartbeat interval for Akka's DeathWatch mechanism to detect dead TaskManagers. If TaskManagers are wrongly marked dead because of lost or delayed heartbeat messages, then you should increase this value. A thorough description of Akka's DeathWatch can be found [here](http://doc.akka.io/docs/akka/snapshot/scala/remoting.html#failure-detector) (DEFAULT: **akka.ask.timeout/10**).
-- `akka.watch.heartbeat.pause`: Acceptable heartbeat pause for Akka's DeathWatch mechanism. A low value does not allow a irregular heartbeat. A thorough description of Akka's DeathWatch can be found [here](http://doc.akka.io/docs/akka/snapshot/scala/remoting.html#failure-detector) (DEFAULT: **akka.ask.timeout**).
-- `akka.watch.threshold`: Threshold for the DeathWatch failure detector. A low value is prone to false positives whereas a high value increases the time to detect a dead TaskManager. A thorough description of Akka's DeathWatch can be found [here](http://doc.akka.io/docs/akka/snapshot/scala/remoting.html#failure-detector) (DEFAULT: **12**).
-- `akka.transport.heartbeat.interval`: Heartbeat interval for Akka's transport failure detector. Since Flink uses TCP, the detector is not necessary. Therefore, the detector is disabled by setting the interval to a very high value. In case you should need the transport failure detector, set the interval to some reasonable value. The interval value requires a time-unit specifier (ms/s/min/h/d) (DEFAULT: **1000 s**).
-- `akka.transport.heartbeat.pause`: Acceptable heartbeat pause for Akka's transport failure detector. Since Flink uses TCP, the detector is not necessary. Therefore, the detector is disabled by setting the pause to a very high value. In case you should need the transport failure detector, set the pause to some reasonable value. The pause value requires a time-unit specifier (ms/s/min/h/d) (DEFAULT: **6000 s**).
-- `akka.transport.threshold`: Threshold for the transport failure detector. Since Flink uses TCP, the detector is not necessary and, thus, the threshold is set to a high value (DEFAULT: **300**).
-- `akka.tcp.timeout`: Timeout for all outbound connections. If you should experience problems with connecting to a TaskManager due to a slow network, you should increase this value (DEFAULT: **akka.ask.timeout**).
-- `akka.throughput`: Number of messages that are processed in a batch before returning the thread to the pool. Low values denote a fair scheduling whereas high values can increase the performance at the cost of unfairness (DEFAULT: **15**).
-- `akka.log.lifecycle.events`: Turns on the Akka's remote logging of events. Set this value to 'on' in case of debugging (DEFAULT: **off**).
-- `akka.startup-timeout`: Timeout after which the startup of a remote component is considered being failed (DEFAULT: **akka.ask.timeout**).
-
-### JobManager Web Frontend
-
-- `jobmanager.web.port`: Port of the JobManager's web interface that displays
-status of running jobs and execution time breakdowns of finished jobs
-(DEFAULT: 8081). Setting this value to `-1` disables the web frontend.
-- `jobmanager.web.history`: The number of latest jobs that the JobManager's web
-front-end in its history (DEFAULT: 5).
-
-### Webclient
-
-These parameters configure the web interface that can be used to submit jobs and
-review the compiler's execution plans.
-
-- `webclient.port`: The port of the webclient server (DEFAULT: 8080).
-- `webclient.tempdir`: The temp directory for the web server. Used for example
-for caching file fragments during file-uploads (DEFAULT: The system's temp
-directory).
-- `webclient.uploaddir`: The directory into which the web server will store
-uploaded programs (DEFAULT: ${webclient.tempdir}/webclient-jobs/).
-- `webclient.plandump`: The directory into which the web server will dump
-temporary JSON files describing the execution plans
-(DEFAULT: ${webclient.tempdir}/webclient-plans/).
-
-### File Systems
-
-The parameters define the behavior of tasks that create result files.
-
-- `fs.overwrite-files`: Specifies whether file output writers should overwrite
-existing files by default. Set to *true* to overwrite by default, *false* otherwise.
-(DEFAULT: false)
-- `fs.output.always-create-directory`: File writers running with a parallelism
-larger than one create a directory for the output file path and put the different
-result files (one per parallel writer task) into that directory. If this option
-is set to *true*, writers with a parallelism of 1 will also create a directory
-and place a single result file into it. If the option is set to *false*, the
-writer will directly create the file directly at the output path, without
-creating a containing directory. (DEFAULT: false)
-
-### Compiler/Optimizer
-
-- `compiler.delimited-informat.max-line-samples`: The maximum number of line
-samples taken by the compiler for delimited inputs. The samples are used to
-estimate the number of records. This value can be overridden for a specific
-input with the input format's parameters (DEFAULT: 10).
-- `compiler.delimited-informat.min-line-samples`: The minimum number of line
-samples taken by the compiler for delimited inputs. The samples are used to
-estimate the number of records. This value can be overridden for a specific
-input with the input format's parameters (DEFAULT: 2).
-- `compiler.delimited-informat.max-sample-len`: The maximal length of a line
-sample that the compiler takes for delimited inputs. If the length of a single
-sample exceeds this value (possible because of misconfiguration of the parser),
-the sampling aborts. This value can be overridden for a specific input with the
-input format's parameters (DEFAULT: 2097152 (= 2 MiBytes)).
-
-## YARN
-
-Please note that all ports used by Flink in a YARN session are offsetted by the YARN application ID
-to avoid duplicate port allocations when running multiple YARN sessions in parallel. 
-
-So if `yarn.am.rpc.port` is configured to `10245` and the session's application ID is `application_1406629969999_0002`, then the actual port being used is 10245 + 2 = 10247
-
-- `yarn.heap-cutoff-ratio`: Percentage of heap space to remove from containers started by YARN.
-
-
-## Background
-
-### Configuring the Network Buffers
-
-Network buffers are a critical resource for the communication layers. They are
-used to buffer records before transmission over a network, and to buffer
-incoming data before dissecting it into records and handing them to the
-application. A sufficient number of network buffers is critical to achieve a
-good throughput.
-
-In general, configure the task manager to have enough buffers that each logical
-network connection on you expect to be open at the same time has a dedicated
-buffer. A logical network connection exists for each point-to-point exchange of
-data over the network, which typically happens at repartitioning- or
-broadcasting steps. In those, each parallel task inside the TaskManager has to
-be able to talk to all other parallel tasks. Hence, the required number of
-buffers on a task manager is *total-degree-of-parallelism* (number of targets)
-\* *intra-node-parallelism* (number of sources in one task manager) \* *n*.
-Here, *n* is a constant that defines how many repartitioning-/broadcasting steps
-you expect to be active at the same time.
-
-Since the *intra-node-parallelism* is typically the number of cores, and more
-than 4 repartitioning or broadcasting channels are rarely active in parallel, it
-frequently boils down to *\#cores\^2\^* \* *\#machines* \* 4. To support for
-example a cluster of 20 8-core machines, you should use roughly 5000 network
-buffers for optimal throughput.
-
-Each network buffer has by default a size of 32 KiBytes. In the above example, the
-system would allocate roughly 300 MiBytes for network buffers.
-
-The number and size of network buffers can be configured with the following
-parameters:
-
-- `taskmanager.network.numberOfBuffers`, and
-- `taskmanager.network.bufferSizeInBytes`.
-
-### Configuring Temporary I/O Directories
-
-Although Flink aims to process as much data in main memory as possible,
-it is not uncommon that more data needs to be processed than memory is
-available. Flink's runtime is designed to write temporary data to disk
-to handle these situations.
-
-The `taskmanager.tmp.dirs` parameter specifies a list of directories into which
-Flink writes temporary files. The paths of the directories need to be
-separated by ':' (colon character). Flink will concurrently write (or
-read) one temporary file to (from) each configured directory. This way,
-temporary I/O can be evenly distributed over multiple independent I/O devices
-such as hard disks to improve performance. To leverage fast I/O devices (e.g.,
-SSD, RAID, NAS), it is possible to specify a directory multiple times.
-
-If the `taskmanager.tmp.dirs` parameter is not explicitly specified,
-Flink writes temporary data to the temporary directory of the operating
-system, such as */tmp* in Linux systems.
-
-
-### Configuring TaskManager processing slots
-
-Flink executes a program in parallel by splitting it into subtasks and scheduling these subtasks to processing slots.
-
-Each Flink TaskManager provides processing slots in the cluster. The number of slots
-is typically proportional to the number of available CPU cores __of each__ TaskManager.
-As a general recommendation, the number of available CPU cores is a good default for 
-`taskmanager.numberOfTaskSlots`.
-
-When starting a Flink application, users can supply the default number of slots to use for that job.
-The command line value therefore is called `-p` (for parallelism). In addition, it is possible
-to [set the number of slots in the programming APIs](programming_guide.html#parallel-execution) for 
-the whole application and individual operators.
-
-<img src="img/slots_parallelism.svg" class="img-responsive" />
\ No newline at end of file


[04/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/python_programming_guide.md
----------------------------------------------------------------------
diff --git a/docs/python_programming_guide.md b/docs/python_programming_guide.md
deleted file mode 100644
index 660086b..0000000
--- a/docs/python_programming_guide.md
+++ /dev/null
@@ -1,610 +0,0 @@
----
-title: "Python Programming Guide"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-
-<a href="#top"></a>
-
-Introduction
-------------
-
-Analysis programs in Flink are regular programs that implement transformations on data sets
-(e.g., filtering, mapping, joining, grouping). The data sets are initially created from certain
-sources (e.g., by reading files, or from collections). Results are returned via sinks, which may for
-example write the data to (distributed) files, or to standard output (for example the command line
-terminal). Flink programs run in a variety of contexts, standalone, or embedded in other programs.
-The execution can happen in a local JVM, or on clusters of many machines.
-
-In order to create your own Flink program, we encourage you to start with the
-[program skeleton](#program-skeleton) and gradually add your own
-[transformations](#transformations). The remaining sections act as references for additional
-operations and advanced features.
-
-
-Example Program
----------------
-
-The following program is a complete, working example of WordCount. You can copy &amp; paste the code
-to run it locally.
-
-{% highlight python %}
-from flink.plan.Environment import get_environment
-from flink.plan.Constants import INT, STRING
-from flink.functions.GroupReduceFunction import GroupReduceFunction
-
-class Adder(GroupReduceFunction):
-  def reduce(self, iterator, collector):
-    count, word = iterator.next()
-    count += sum([x[0] for x in iterator])
-    collector.collect((count, word))
-
-if __name__ == "__main__":
-  env = get_environment()
-  data = env.from_elements("Who's there?",
-   "I think I hear them. Stand, ho! Who's there?")
-  
-  data \
-    .flat_map(lambda x, c: [(1, word) for word in x.lower().split()], (INT, STRING)) \
-    .group_by(1) \
-    .reduce_group(Adder(), (INT, STRING), combinable=True) \
-    .output()
-  
-  env.execute(local=True)
-{% endhighlight %}
-
-[Back to top](#top)
-
-Program Skeleton
-----------------
-
-As we already saw in the example, Flink programs look like regular python
-programs with a `if __name__ == "__main__":` block. Each program consists of the same basic parts:
-
-1. Obtain an `Environment`,
-2. Load/create the initial data,
-3. Specify transformations on this data,
-4. Specify where to put the results of your computations, and
-5. Execute your program.
-
-We will now give an overview of each of those steps but please refer to the respective sections for
-more details. 
-
-
-The `Environment` is the basis for all Flink programs. You can
-obtain one using these static methods on class `Environment`:
-
-{% highlight python %}
-get_environment()
-{% endhighlight %}
-
-For specifying data sources the execution environment has several methods
-to read from files. To just read a text file as a sequence of lines, you can use:
-
-{% highlight python %}
-env = get_environment()
-text = env.read_text("file:///path/to/file")
-{% endhighlight %}
-
-This will give you a DataSet on which you can then apply transformations. For
-more information on data sources and input formats, please refer to
-[Data Sources](#data-sources).
-
-Once you have a DataSet you can apply transformations to create a new
-DataSet which you can then write to a file, transform again, or
-combine with other DataSets. You apply transformations by calling
-methods on DataSet with your own custom transformation function. For example,
-a map transformation looks like this:
-
-{% highlight python %}
-data.map(lambda x: x*2, INT)
-{% endhighlight %}
-
-This will create a new DataSet by doubling every value in the original DataSet. 
-For more information and a list of all the transformations,
-please refer to [Transformations](#transformations).
-
-Once you have a DataSet that needs to be written to disk you can call one
-of these methods on DataSet:
-
-{% highlight python %}
-data.write_text("<file-path>", WriteMode=Constants.NO_OVERWRITE)
-write_csv("<file-path>", WriteMode=Constants.NO_OVERWRITE, line_delimiter='\n', field_delimiter=',')
-output()
-{% endhighlight %}
-
-The last method is only useful for developing/debugging on a local machine,
-it will output the contents of the DataSet to standard output. (Note that in
-a cluster, the result goes to the standard out stream of the cluster nodes and ends
-up in the *.out* files of the workers).
-The first two do as the name suggests. 
-Please refer to [Data Sinks](#data-sinks) for more information on writing to files.
-
-Once you specified the complete program you need to call `execute` on
-the `Environment`. This will either execute on your local machine or submit your program 
-for execution on a cluster, depending on how Flink was started. You can force
-a local execution by using `execute(local=True)`.
-
-[Back to top](#top)
-
-Project setup
----------------
-
-Apart from setting up Flink, no additional work is required. The python package can be found in the /resource folder of your Flink distribution. The flink package, along with the plan and optional packages are automatically distributed among the cluster via HDFS when running a job.
-
-The Python API was tested on Linux systems that have Python 2.7 or 3.4 installed.
-
-[Back to top](#top)
-
-Lazy Evaluation
----------------
-
-All Flink programs are executed lazily: When the program's main method is executed, the data loading
-and transformations do not happen directly. Rather, each operation is created and added to the
-program's plan. The operations are actually executed when one of the `execute()` methods is invoked
-on the Environment object. Whether the program is executed locally or on a cluster depends
-on the environment of the program.
-
-The lazy evaluation lets you construct sophisticated programs that Flink executes as one
-holistically planned unit.
-
-[Back to top](#top)
-
-
-Transformations
----------------
-
-Data transformations transform one or more DataSets into a new DataSet. Programs can combine
-multiple transformations into sophisticated assemblies.
-
-This section gives a brief overview of the available transformations. The [transformations
-documentation](dataset_transformations.html) has a full description of all transformations with
-examples.
-
-<br />
-
-<table class="table table-bordered">
-  <thead>
-    <tr>
-      <th class="text-left" style="width: 20%">Transformation</th>
-      <th class="text-center">Description</th>
-    </tr>
-  </thead>
-
-  <tbody>
-    <tr>
-      <td><strong>Map</strong></td>
-      <td>
-        <p>Takes one element and produces one element.</p>
-{% highlight python %}
-data.map(lambda x: x * 2, INT)
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>FlatMap</strong></td>
-      <td>
-        <p>Takes one element and produces zero, one, or more elements. </p>
-{% highlight python %}
-data.flat_map(
-  lambda x,c: [(1,word) for word in line.lower().split() for line in x],
-  (INT, STRING))
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>MapPartition</strong></td>
-      <td>
-        <p>Transforms a parallel partition in a single function call. The function get the partition
-        as an `Iterator` and can produce an arbitrary number of result values. The number of
-        elements in each partition depends on the degree-of-parallelism and previous operations.</p>
-{% highlight python %}
-data.map_partition(lambda x,c: [value * 2 for value in x], INT)
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Filter</strong></td>
-      <td>
-        <p>Evaluates a boolean function for each element and retains those for which the function
-        returns true.</p>
-{% highlight python %}
-data.filter(lambda x: x > 1000)
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Reduce</strong></td>
-      <td>
-        <p>Combines a group of elements into a single element by repeatedly combining two elements
-        into one. Reduce may be applied on a full data set, or on a grouped data set.</p>
-{% highlight python %}
-data.reduce(lambda x,y : x + y)
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>ReduceGroup</strong></td>
-      <td>
-        <p>Combines a group of elements into one or more elements. ReduceGroup may be applied on a
-        full data set, or on a grouped data set.</p>
-{% highlight python %}
-class Adder(GroupReduceFunction):
-  def reduce(self, iterator, collector):
-    count, word = iterator.next()
-    count += sum([x[0] for x in iterator)      
-    collector.collect((count, word))
-
-data.reduce_group(Adder(), (INT, STRING))
-{% endhighlight %}
-      </td>
-    </tr>
-
-    </tr>
-      <td><strong>Join</strong></td>
-      <td>
-        Joins two data sets by creating all pairs of elements that are equal on their keys.
-        Optionally uses a JoinFunction to turn the pair of elements into a single element. 
-        See <a href="#specifying-keys">keys</a> on how to define join keys.
-{% highlight python %}
-# In this case tuple fields are used as keys. 
-# "0" is the join field on the first tuple
-# "1" is the join field on the second tuple.
-result = input1.join(input2).where(0).equal_to(1)
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>CoGroup</strong></td>
-      <td>
-        <p>The two-dimensional variant of the reduce operation. Groups each input on one or more
-        fields and then joins the groups. The transformation function is called per pair of groups.
-        See <a href="#specifying-keys">keys</a> on how to define coGroup keys.</p>
-{% highlight python %}
-data1.co_group(data2).where(0).equal_to(1)
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Cross</strong></td>
-      <td>
-        <p>Builds the Cartesian product (cross product) of two inputs, creating all pairs of
-        elements. Optionally uses a CrossFunction to turn the pair of elements into a single
-        element.</p>
-{% highlight python %}
-result = data1.cross(data2)
-{% endhighlight %}
-      </td>
-    </tr>
-    <tr>
-      <td><strong>Union</strong></td>
-      <td>
-        <p>Produces the union of two data sets.</p>
-{% highlight python %}
-data.union(data2)
-{% endhighlight %}
-      </td>
-    </tr>
-  </tbody>
-</table>
-
-[Back to Top](#top)
-
-
-Specifying Keys
--------------
-
-Some transformations (like Join or CoGroup) require that a key is defined on
-its argument DataSets, and other transformations (Reduce, GroupReduce) allow that the DataSet is grouped on a key before they are
-applied.
-
-A DataSet is grouped as
-{% highlight python %}
-reduced = data \
-  .group_by(<define key here>) \
-  .reduce_group(<do something>)
-{% endhighlight %}
-
-The data model of Flink is not based on key-value pairs. Therefore,
-you do not need to physically pack the data set types into keys and
-values. Keys are "virtual": they are defined as functions over the
-actual data to guide the grouping operator.
-
-### Define keys for Tuples
-{:.no_toc}
-
-The simplest case is grouping a data set of Tuples on one or more
-fields of the Tuple:
-{% highlight python %}
-reduced = data \
-  .group_by(0) \
-  .reduce_group(<do something>)
-{% endhighlight %}
-
-The data set is grouped on the first field of the tuples. 
-The group-reduce function will thus receive groups of tuples with
-the same value in the first field.
-
-{% highlight python %}
-grouped = data \
-  .group_by(0,1) \
-  .reduce(/*do something*/)
-{% endhighlight %}
-
-The data set is grouped on the composite key consisting of the first and the
-second fields, therefore the reduce function will receive groups
-with the same value for both fields.
-
-A note on nested Tuples: If you have a DataSet with a nested tuple
-specifying `group_by(<index of tuple>)` will cause the system to use the full tuple as a key.
-
-[Back to top](#top)
-
-
-Passing Functions to Flink
---------------------------
-
-Certain operations require user-defined functions, whereas all of them accept lambda functions and rich functions as arguments.
-
-{% highlight python %}
-data.filter(lambda x: x > 5)
-{% endhighlight %}
-
-{% highlight python %}
-class Filter(FilterFunction):
-    def filter(self, value):
-        return value > 5
-
-data.filter(Filter())
-{% endhighlight %}
-
-Rich functions allow the use of imported functions, provide access to broadcast-variables, 
-can be parameterized using __init__(), and are the go-to-option for complex functions.
-They are also the only way to define an optional `combine` function for a reduce operation.
-
-Lambda functions allow the easy insertion of one-liners. Note that a lambda function has to return
-an iterable, if the operation can return multiple values. (All functions receiving a collector argument)
-
-Flink requires type information at the time when it prepares the program for execution 
-(when the main method of the program is called). This is done by passing an exemplary 
-object that has the desired type. This holds also for tuples.
-
-{% highlight python %}
-(INT, STRING)
-{% endhighlight %}
-
-Would denote a tuple containing an int and a string. Note that for Operations that work strictly on tuples (like cross), no braces are required.
-
-There are a few Constants defined in flink.plan.Constants that allow this in a more readable fashion.
-
-[Back to top](#top)
-
-Data Types
-----------
-
-Flink's Python API currently only supports primitive python types (int, float, bool, string) and byte arrays.
-
-#### Tuples/Lists
-
-You can use the tuples (or lists) for composite types. Python tuples are mapped to the Flink Tuple type, that contain 
-a fix number of fields of various types (up to 25). Every field of a tuple can be a primitive type - including further tuples, resulting in nested tuples.
-
-{% highlight python %}
-word_counts = env.from_elements(("hello", 1), ("world",2))
-
-counts = word_counts.map(lambda x: x[1], INT)
-{% endhighlight %}
-
-When working with operators that require a Key for grouping or matching records,
-Tuples let you simply specify the positions of the fields to be used as key. You can specify more
-than one position to use composite keys (see [Section Data Transformations](#transformations)).
-
-{% highlight python %}
-wordCounts \
-    .group_by(0) \
-    .reduce(MyReduceFunction())
-{% endhighlight %}
-
-[Back to top](#top)
-
-Data Sources
-------------
-
-Data sources create the initial data sets, such as from files or from collections.
-
-File-based:
-
-- `read_text(path)` - Reads files line wise and returns them as Strings.
-- `read_csv(path, type)` - Parses files of comma (or another char) delimited fields.
-  Returns a DataSet of tuples. Supports the basic java types and their Value counterparts as field
-  types.
-
-Collection-based:
-
-- `from_elements(*args)` - Creates a data set from a Seq. All elements
-
-**Examples**
-
-{% highlight python %}
-env  = get_environment
-
-# read text file from local files system
-localLiens = env.read_text("file:#/path/to/my/textfile")
-
- read text file from a HDFS running at nnHost:nnPort
-hdfsLines = env.read_text("hdfs://nnHost:nnPort/path/to/my/textfile")
-
- read a CSV file with three fields
-csvInput = env.read_csv("hdfs:///the/CSV/file", (INT, STRING, DOUBLE))
-
- create a set from some given elements
-values = env.from_elements("Foo", "bar", "foobar", "fubar")
-{% endhighlight %}
-
-[Back to top](#top)
-
-Data Sinks
-----------
-
-Data sinks consume DataSets and are used to store or return them:
-
-- `write_text()` - Writes elements line-wise as Strings. The Strings are
-  obtained by calling the *str()* method of each element.
-- `write_csv(...)` - Writes tuples as comma-separated value files. Row and field
-  delimiters are configurable. The value for each field comes from the *str()* method of the objects.
-- `output()` - Prints the *str()* value of each element on the
-  standard out.
-
-A DataSet can be input to multiple operations. Programs can write or print a data set and at the
-same time run additional transformations on them.
-
-**Examples**
-
-Standard data sink methods:
-
-{% highlight scala %}
- write DataSet to a file on the local file system
-textData.write_text("file:///my/result/on/localFS")
-
- write DataSet to a file on a HDFS with a namenode running at nnHost:nnPort
-textData.write_text("hdfs://nnHost:nnPort/my/result/on/localFS")
-
- write DataSet to a file and overwrite the file if it exists
-textData.write_text("file:///my/result/on/localFS", WriteMode.OVERWRITE)
-
- tuples as lines with pipe as the separator "a|b|c"
-values.write_csv("file:///path/to/the/result/file", line_delimiter="\n", field_delimiter="|")
-
- this writes tuples in the text formatting "(a, b, c)", rather than as CSV lines
-values.write_text("file:///path/to/the/result/file")
-{% endhighlight %}
-
-[Back to top](#top)
-
-Broadcast Variables
--------------------
-
-Broadcast variables allow you to make a data set available to all parallel instances of an
-operation, in addition to the regular input of the operation. This is useful for auxiliary data
-sets, or data-dependent parameterization. The data set will then be accessible at the operator as a
-Collection.
-
-- **Broadcast**: broadcast sets are registered by name via `with_broadcast_set(DataSet, String)`
-- **Access**: accessible via `self.context.get_broadcast_variable(String)` at the target operator
-
-{% highlight python %}
-class MapperBcv(MapFunction):
-    def map(self, value):
-        factor = self.context.get_broadcast_variable("bcv")[0][0]
-        return value * factor
-
-# 1. The DataSet to be broadcasted
-toBroadcast = env.from_elements(1, 2, 3) 
-data = env.from_elements("a", "b")
-
-# 2. Broadcast the DataSet
-data.map(MapperBcv(), INT).with_broadcast_set("bcv", toBroadcast) 
-{% endhighlight %}
-
-Make sure that the names (`bcv` in the previous example) match when registering and
-accessing broadcasted data sets.
-
-**Note**: As the content of broadcast variables is kept in-memory on each node, it should not become
-too large. For simpler things like scalar values you can simply parameterize the rich function.
-
-[Back to top](#top)
-
-Parallel Execution
-------------------
-
-This section describes how the parallel execution of programs can be configured in Flink. A Flink
-program consists of multiple tasks (operators, data sources, and sinks). A task is split into
-several parallel instances for execution and each parallel instance processes a subset of the task's
-input data. The number of parallel instances of a task is called its *parallelism* or *degree of
-parallelism (DOP)*.
-
-The degree of parallelism of a task can be specified in Flink on different levels.
-
-### Execution Environment Level
-
-Flink programs are executed in the context of an [execution environmentt](#program-skeleton). An
-execution environment defines a default parallelism for all operators, data sources, and data sinks
-it executes. Execution environment parallelism can be overwritten by explicitly configuring the
-parallelism of an operator.
-
-The default parallelism of an execution environment can be specified by calling the
-`set_degree_of_parallelism()` method. To execute all operators, data sources, and data sinks of the
-[WordCount](#example-program) example program with a parallelism of `3`, set the default parallelism of the
-execution environment as follows:
-
-{% highlight python %}
-env = get_environment()
-env.set_degree_of_parallelism(3)
-
-text.flat_map(lambda x,c: x.lower().split(), (INT, STRING)) \
-    .group_by(1) \
-    .reduce_group(Adder(), (INT, STRING), combinable=True) \
-    .output()
-
-env.execute()
-{% endhighlight %}
-
-### System Level
-
-A system-wide default parallelism for all execution environments can be defined by setting the
-`parallelization.degree.default` property in `./conf/flink-conf.yaml`. See the
-[Configuration](config.html) documentation for details.
-
-[Back to top](#top)
-
-Executing Plans
----------------
-
-To run the plan with Flink, go to your Flink distribution, and run the pyflink.sh script from the /bin folder. 
-use pyflink2.sh for python 2.7, and pyflink3.sh for python 3.4. The script containing the plan has to be passed 
-as the first argument, followed by a number of additional python packages, and finally, separated by - additional 
-arguments that will be fed to the script. 
-
-{% highlight python %}
-./bin/pyflink<2/3>.sh <Script>[ <pathToPackage1>[ <pathToPackageX]][ - <param1>[ <paramX>]]
-{% endhighlight %}
-
-[Back to top](#top)
-
-Debugging
----------------
-
-If you are running Flink programs locally, you can debug your program following this guide.
-First you have to enable debugging by setting the debug switch in the `env.execute(debug=True)` call. After
-submitting your program, open the jobmanager log file, and look for a line that says 
-`Waiting for external Process : <taskname>. Run python /tmp/flink/executor.py <port>` Now open `/tmp/flink` in your python
-IDE and run the `executor.py <port>`.
-
-[Back to top](#top)

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/quickstart/java_api_quickstart.md
----------------------------------------------------------------------
diff --git a/docs/quickstart/java_api_quickstart.md b/docs/quickstart/java_api_quickstart.md
new file mode 100644
index 0000000..0485e2a
--- /dev/null
+++ b/docs/quickstart/java_api_quickstart.md
@@ -0,0 +1,151 @@
+---
+title: "Quickstart: Java API"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* This will be replaced by the TOC
+{:toc}
+
+Start working on your Flink Java program in a few simple steps.
+
+
+## Requirements
+
+The only requirements are working __Maven 3.0.4__ (or higher) and __Java 6.x__ (or higher) installations.
+
+## Create Project
+
+Use one of the following commands to __create a project__:
+
+<ul class="nav nav-tabs" style="border-bottom: none;">
+    <li class="active"><a href="#quickstart-script" data-toggle="tab">Run the <strong>quickstart script</strong></a></li>
+    <li><a href="#maven-archetype" data-toggle="tab">Use <strong>Maven archetypes</strong></a></li>
+</ul>
+<div class="tab-content">
+    <div class="tab-pane active" id="quickstart-script">
+    {% highlight bash %}
+    $ curl http://flink.apache.org/q/quickstart.sh | bash
+    {% endhighlight %}
+    </div>
+    <div class="tab-pane" id="maven-archetype">
+    {% highlight bash %}
+    $ mvn archetype:generate                             \
+      -DarchetypeGroupId=org.apache.flink              \
+      -DarchetypeArtifactId=flink-quickstart-java            \
+      -DarchetypeVersion={{site.version}}
+    {% endhighlight %}
+        This allows you to <strong>name your newly created project</strong>. It will interactively ask you for the groupId, artifactId, and package name.
+    </div>
+</div>
+
+## Inspect Project
+
+There will be a new directory in your working directory. If you've used the _curl_ approach, the directory is called `quickstart`. Otherwise, it has the name of your artifactId.
+
+The sample project is a __Maven project__, which contains two classes. _Job_ is a basic skeleton program and _WordCountJob_ a working example. Please note that the _main_ method of both classes allow you to start Flink in a development/testing mode.
+
+We recommend to __import this project into your IDE__ to develop and test it. If you use Eclipse, the [m2e plugin](http://www.eclipse.org/m2e/) allows to [import Maven projects](http://books.sonatype.com/m2eclipse-book/reference/creating-sect-importing-projects.html#fig-creating-import). Some Eclipse bundles include that plugin by default, other require you to install it manually. The IntelliJ IDE also supports Maven projects out of the box.
+
+
+A note to Mac OS X users: The default JVM heapsize for Java is too small for Flink. You have to manually increase it. Choose "Run Configurations" -> Arguments and write into the "VM Arguments" box: "-Xmx800m" in Eclipse.
+
+## Build Project
+
+If you want to __build your project__, go to your project directory and issue the`mvn clean install -Pbuild-jar` command. You will __find a jar__ that runs on every Flink cluster in __target/your-artifact-id-1.0-SNAPSHOT.jar__. There is also a fat-jar,  __target/your-artifact-id-1.0-SNAPSHOT-flink-fat-jar.jar__. This
+also contains all dependencies that get added to the maven project.
+
+## Next Steps
+
+Write your application!
+
+The quickstart project contains a WordCount implementation, the "Hello World" of Big Data processing systems. The goal of WordCount is to determine the frequencies of words in a text, e.g., how often do the terms "the" or "house" occurs in all Wikipedia texts.
+
+__Sample Input__:
+
+~~~bash
+big data is big
+~~~
+
+__Sample Output__:
+
+~~~bash
+big 2
+data 1
+is 1
+~~~
+
+The following code shows the WordCount implementation from the Quickstart which processes some text lines with two operators (FlatMap and Reduce), and writes the prints the resulting words and counts to std-out.
+
+~~~java
+public class WordCount {
+  
+  public static void main(String[] args) throws Exception {
+    
+    // set up the execution environment
+    final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+    
+    // get input data
+    DataSet<String> text = env.fromElements(
+        "To be, or not to be,--that is the question:--",
+        "Whether 'tis nobler in the mind to suffer",
+        "The slings and arrows of outrageous fortune",
+        "Or to take arms against a sea of troubles,"
+        );
+    
+    DataSet<Tuple2<String, Integer>> counts = 
+        // split up the lines in pairs (2-tuples) containing: (word,1)
+        text.flatMap(new LineSplitter())
+        // group by the tuple field "0" and sum up tuple field "1"
+        .groupBy(0)
+        .aggregate(Aggregations.SUM, 1);
+
+    // emit result
+    counts.print();
+    
+    // execute program
+    env.execute("WordCount Example");
+  }
+}
+~~~
+
+The operations are defined by specialized classes, here the LineSplitter class.
+
+~~~java
+public class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
+
+  @Override
+  public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
+    // normalize and split the line into words
+    String[] tokens = value.toLowerCase().split("\\W+");
+    
+    // emit the pairs
+    for (String token : tokens) {
+      if (token.length() > 0) {
+        out.collect(new Tuple2<String, Integer>(token, 1));
+      }
+    }
+  }
+}
+~~~
+
+{% gh_link /flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/wordcount/WordCount.java "Check GitHub" %} for the full example code.
+
+For a complete overview over our API, have a look at the [Programming Guide](programming_guide.html) and [further example programs](examples.html). If you have any trouble, ask on our [Mailing List](http://mail-archives.apache.org/mod_mbox/flink-dev/). We are happy to provide help.
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/quickstart/run_example_quickstart.md
----------------------------------------------------------------------
diff --git a/docs/quickstart/run_example_quickstart.md b/docs/quickstart/run_example_quickstart.md
new file mode 100644
index 0000000..b75e07c
--- /dev/null
+++ b/docs/quickstart/run_example_quickstart.md
@@ -0,0 +1,155 @@
+---
+title: "Quick Start: Run K-Means Example"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* This will be replaced by the TOC
+{:toc}
+
+This guide walks you through the steps of executing an example program ([K-Means clustering](http://en.wikipedia.org/wiki/K-means_clustering)) on Flink. On the way, you will see the a visualization of the program, the optimized execution plan, and track the progress of its execution.
+
+## Setup Flink
+Follow the [instructions](setup_quickstart.html) to setup Flink and enter the root directory of your Flink setup.
+
+## Generate Input Data
+Flink contains a data generator for K-Means.
+
+~~~bash
+# Assuming you are in the root directory of your Flink setup
+mkdir kmeans
+cd kmeans
+# Run data generator
+java -cp ../examples/flink-java-examples-*-KMeans.jar org.apache.flink.examples.java.clustering.util.KMeansDataGenerator 500 10 0.08
+cp /tmp/points .
+cp /tmp/centers .
+~~~
+
+The generator has the following arguments:
+
+~~~bash
+KMeansDataGenerator <numberOfDataPoints> <numberOfClusterCenters> [<relative stddev>] [<centroid range>] [<seed>]
+~~~
+
+The _relative standard deviation_ is an interesting tuning parameter. It determines the closeness of the points to randomly generated centers.
+
+The `kmeans/` directory should now contain two files: `centers` and `points`. The `points` file contains the points to cluster and the `centers` file contains initial cluster centers.
+
+
+## Inspect the Input Data
+Use the `plotPoints.py` tool to review the generated data points. [Download Python Script](quickstart/plotPoints.py)
+
+~~~ bash
+python plotPoints.py points ./points input
+~~~ 
+
+Note: You might have to install [matplotlib](http://matplotlib.org/) (`python-matplotlib` package on Ubuntu) to use the Python script.
+
+You can review the input data stored in the `input-plot.pdf`, for example with Evince (`evince input-plot.pdf`).
+
+The following overview presents the impact of the different standard deviations on the input data.
+
+|relative stddev = 0.03|relative stddev = 0.08|relative stddev = 0.15|
+|:--------------------:|:--------------------:|:--------------------:|
+|<img src="_img/quickstart-example/kmeans003.png" alt="example1" style="width: 275px;"/>|<img src="_img/quickstart-example/kmeans008.png" alt="example2" style="width: 275px;"/>|<img src="_img/quickstart-example/kmeans015.png" alt="example3" style="width: 275px;"/>|
+
+
+## Start Flink
+Start Flink and the web job submission client on your local machine.
+
+~~~ bash
+# return to the Flink root directory
+cd ..
+# start Flink
+./bin/start-local.sh
+# Start the web client
+./bin/start-webclient.sh
+~~~
+
+## Inspect and Run the K-Means Example Program
+The Flink web client allows to submit Flink programs using a graphical user interface.
+
+<div class="row" style="padding-top:15px">
+	<div class="col-md-6">
+		<a data-lightbox="compiler" href="_img/quickstart-example/run-webclient.png" data-lightbox="example-1"><img class="img-responsive" src="_img/quickstart-example/run-webclient.png" /></a>
+	</div>
+	<div class="col-md-6">
+		1. Open web client on  <a href="http://localhost:8080/launch.html">localhost:8080</a> <br>
+		2. Upload the K-Mean job JAR file. 
+			{% highlight bash %}
+			./examples/flink-java-examples-*-KMeans.jar
+			{% endhighlight %} </br>
+		3. Select it in the left box to see how the operators in the plan are connected to each other. <br>
+		4. Enter the arguments in the lower left box:
+			{% highlight bash %}
+			file://<pathToFlink>/kmeans/points file://<pathToFlink>/kmeans/centers file://<pathToFlink>/kmeans/result 10
+			{% endhighlight %}
+			For example:
+			{% highlight bash %}
+			file:///tmp/flink/kmeans/points file:///tmp/flink/kmeans/centers file:///tmp/flink/kmeans/result 10
+			{% endhighlight %}
+	</div>
+</div>
+<hr>
+<div class="row" style="padding-top:15px">
+	<div class="col-md-6">
+		<a data-lightbox="compiler" href="_img/quickstart-example/compiler-webclient-new.png" data-lightbox="example-1"><img class="img-responsive" src="_img/quickstart-example/compiler-webclient-new.png" /></a>
+	</div>
+
+	<div class="col-md-6">
+		1. Press the <b>RunJob</b> to see the optimizer plan. <br>
+		2. Inspect the operators and see the properties (input sizes, cost estimation) determined by the optimizer.
+	</div>
+</div>
+<hr>
+<div class="row" style="padding-top:15px">
+	<div class="col-md-6">
+		<a data-lightbox="compiler" href="_img/quickstart-example/jobmanager-running-new.png" data-lightbox="example-1"><img class="img-responsive" src="_img/quickstart-example/jobmanager-running-new.png" /></a>
+	</div>
+	<div class="col-md-6">
+		1. Press the <b>Continue</b> button to start executing the job. <br>
+		2. <a href="http://localhost:8080/launch.html">Open Flink's monitoring interface</a> to see the job's progress. (Due to the small input data, the job will finish really quick!)<br>
+		3. Once the job has finished, you can analyze the runtime of the individual operators.
+	</div>
+</div>
+
+## Shutdown Flink
+Stop Flink when you are done.
+
+~~~ bash
+# stop Flink
+./bin/stop-local.sh
+# Stop the Flink web client
+./bin/stop-webclient.sh
+~~~
+
+## Analyze the Result
+Use the [Python Script](quickstart/plotPoints.py) again to visualize the result.
+
+~~~bash
+cd kmeans
+python plotPoints.py result ./result clusters
+~~~
+
+The following three pictures show the results for the sample input above. Play around with the parameters (number of iterations, number of clusters) to see how they affect the result.
+
+
+|relative stddev = 0.03|relative stddev = 0.08|relative stddev = 0.15|
+|:--------------------:|:--------------------:|:--------------------:|
+|<img src="_img/quickstart-example/result003.png" alt="example1" style="width: 275px;"/>|<img src="_img/quickstart-example/result008.png" alt="example2" style="width: 275px;"/>|<img src="_img/quickstart-example/result015.png" alt="example3" style="width: 275px;"/>|
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/quickstart/scala_api_quickstart.md
----------------------------------------------------------------------
diff --git a/docs/quickstart/scala_api_quickstart.md b/docs/quickstart/scala_api_quickstart.md
new file mode 100644
index 0000000..771acfc
--- /dev/null
+++ b/docs/quickstart/scala_api_quickstart.md
@@ -0,0 +1,136 @@
+---
+title: "Quickstart: Scala API"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* This will be replaced by the TOC
+{:toc}
+
+Start working on your Flink Scala program in a few simple steps.
+
+## Requirements
+
+The only requirements are working __Maven 3.0.4__ (or higher) and __Java 6.x__ (or higher) installations.
+
+
+## Create Project
+
+Use one of the following commands to __create a project__:
+
+<ul class="nav nav-tabs" style="border-bottom: none;">
+    <li class="active"><a href="#quickstart-script" data-toggle="tab">Run the <strong>quickstart script</strong></a></li>
+    <li><a href="#maven-archetype" data-toggle="tab">Use <strong>Maven archetypes</strong></a></li>
+</ul>
+<div class="tab-content">
+    <div class="tab-pane active" id="quickstart-script">
+{% highlight bash %}
+$ curl http://flink.apache.org/q/quickstart-scala.sh | bash
+{% endhighlight %}
+    </div>
+    <div class="tab-pane" id="maven-archetype">
+{% highlight bash %}
+$ mvn archetype:generate                             \
+  -DarchetypeGroupId=org.apache.flink              \
+  -DarchetypeArtifactId=flink-quickstart-scala           \
+  -DarchetypeVersion={{site.version}}
+{% endhighlight %}
+    This allows you to <strong>name your newly created project</strong>. It will interactively ask you for the groupId, artifactId, and package name.
+    </div>
+</div>
+
+
+## Inspect Project
+
+There will be a new directory in your working directory. If you've used the _curl_ approach, the directory is called `quickstart`. Otherwise, it has the name of your artifactId.
+
+The sample project is a __Maven project__, which contains two classes. _Job_ is a basic skeleton program and _WordCountJob_ a working example. Please note that the _main_ method of both classes allow you to start Flink in a development/testing mode.
+
+We recommend to __import this project into your IDE__. For Eclipse, you need the following plugins, which you can install from the provided Eclipse Update Sites:
+
+* _Eclipse 4.x_
+  * [Scala IDE](http://download.scala-ide.org/sdk/e38/scala210/stable/site)
+  * [m2eclipse-scala](http://alchim31.free.fr/m2e-scala/update-site)
+  * [Build Helper Maven Plugin](https://repository.sonatype.org/content/repositories/forge-sites/m2e-extras/0.15.0/N/0.15.0.201206251206/)
+* _Eclipse 3.7_
+  * [Scala IDE](http://download.scala-ide.org/sdk/e37/scala210/stable/site)
+  * [m2eclipse-scala](http://alchim31.free.fr/m2e-scala/update-site)
+  * [Build Helper Maven Plugin](https://repository.sonatype.org/content/repositories/forge-sites/m2e-extras/0.14.0/N/0.14.0.201109282148/)
+
+The IntelliJ IDE also supports Maven and offers a plugin for Scala development.
+
+
+## Build Project
+
+If you want to __build your project__, go to your project directory and issue the `mvn clean package -Pbuild-jar` command. You will __find a jar__ that runs on every Flink cluster in __target/your-artifact-id-1.0-SNAPSHOT.jar__. There is also a fat-jar,  __target/your-artifact-id-1.0-SNAPSHOT-flink-fat-jar.jar__. This
+also contains all dependencies that get added to the maven project.
+
+## Next Steps
+
+Write your application!
+
+The quickstart project contains a WordCount implementation, the "Hello World" of Big Data processing systems. The goal of WordCount is to determine the frequencies of words in a text, e.g., how often do the terms "the" or "house" occurs in all Wikipedia texts.
+
+__Sample Input__:
+
+~~~bash
+big data is big
+~~~
+
+__Sample Output__:
+
+~~~bash
+big 2
+data 1
+is 1
+~~~
+
+The following code shows the WordCount implementation from the Quickstart which processes some text lines with two operators (FlatMap and Reduce), and writes the prints the resulting words and counts to std-out.
+
+~~~scala
+object WordCountJob {
+  def main(args: Array[String]) {
+
+    // set up the execution environment
+    val env = ExecutionEnvironment.getExecutionEnvironment
+
+    // get input data
+    val text = env.fromElements("To be, or not to be,--that is the question:--",
+      "Whether 'tis nobler in the mind to suffer", "The slings and arrows of outrageous fortune",
+      "Or to take arms against a sea of troubles,")
+
+    val counts = text.flatMap { _.toLowerCase.split("\\W+") }
+      .map { (_, 1) }
+      .groupBy(0)
+      .sum(1)
+
+    // emit result
+    counts.print()
+
+    // execute program
+    env.execute("WordCount Example")
+  }
+}
+~~~
+
+{% gh_link /flink-examples/flink-scala-examples/src/main/scala/org/apache/flink/examples/scala/wordcount/WordCount.scala "Check GitHub" %} for the full example code.
+
+For a complete overview over our API, have a look at the [Programming Guide](programming_guide.html) and [further example programs](examples.html). If you have any trouble, ask on our [Mailing List](http://mail-archives.apache.org/mod_mbox/flink-dev/). We are happy to provide help.
+
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/quickstart/setup_quickstart.md
----------------------------------------------------------------------
diff --git a/docs/quickstart/setup_quickstart.md b/docs/quickstart/setup_quickstart.md
new file mode 100644
index 0000000..9fd60f1
--- /dev/null
+++ b/docs/quickstart/setup_quickstart.md
@@ -0,0 +1,155 @@
+---
+title: "Quickstart: Setup"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* This will be replaced by the TOC
+{:toc}
+
+Get Flink up and running in a few simple steps.
+
+## Requirements
+
+Flink runs on __Linux, Mac OS X, and Windows__. To be able to run Flink, the
+only requirement is to have a working __Java 6.x__ (or higher)
+installation. Windows users, please take a look at the
+[Flink on Windows](local_setup.html#flink-on-windows) guide which describes
+how to run Flink on Windows for local setups.
+
+## Download
+Download the ready to run binary package. Choose the Flink distribution that __matches your Hadoop version__. If you are unsure which version to choose or you just want to run locally, pick the package for Hadoop 1.2.
+
+<ul class="nav nav-tabs">
+  <li class="active"><a href="#bin-hadoop1" data-toggle="tab">Hadoop 1.2</a></li>
+  <li><a href="#bin-hadoop2" data-toggle="tab">Hadoop 2 (YARN)</a></li>
+</ul>
+<p>
+<div class="tab-content text-center">
+  <div class="tab-pane active" id="bin-hadoop1">
+    <a class="btn btn-info btn-lg" onclick="_gaq.push(['_trackEvent','Action','download-quickstart-setup-1',this.href]);" href="{{site.FLINK_DOWNLOAD_URL_HADOOP1_STABLE}}"><i class="icon-download"> </i> Download Flink for Hadoop 1.2</a>
+  </div>
+  <div class="tab-pane" id="bin-hadoop2">
+    <a class="btn btn-info btn-lg" onclick="_gaq.push(['_trackEvent','Action','download-quickstart-setup-2',this.href]);" href="{{site.FLINK_DOWNLOAD_URL_HADOOP2_STABLE}}"><i class="icon-download"> </i> Download Flink for Hadoop 2</a>
+  </div>
+</div>
+</p>
+
+
+## Start
+  
+1. Go to the download directory.
+2. Unpack the downloaded archive.
+3. Start Flink.
+
+
+~~~bash
+$ cd ~/Downloads        # Go to download directory
+$ tar xzf flink-*.tgz   # Unpack the downloaded archive
+$ cd flink-{{site.version}}
+$ bin/start-local.sh    # Start Flink
+~~~
+
+Check the __JobManager's web frontend__ at [http://localhost:8081](http://localhost:8081) and make
+sure everything is up and running.
+
+## Run Example
+
+Run the __Word Count example__ to see Flink at work.
+
+* __Download test data__:
+
+  ~~~bash
+  $ wget -O hamlet.txt http://www.gutenberg.org/cache/epub/1787/pg1787.txt
+  ~~~ 
+
+* You now have a text file called _hamlet.txt_ in your working directory.
+* __Start the example program__:
+  
+  ~~~bash
+  $ bin/flink run ./examples/flink-java-examples-{{site.version}}-WordCount.jar file://`pwd`/hamlet.txt file://`pwd`/wordcount-result.txt
+  ~~~
+
+* You will find a file called __wordcount-result.txt__ in your current directory.
+  
+
+## Cluster Setup
+  
+__Running Flink on a cluster__ is as easy as running it locally. Having __passwordless SSH__ and
+__the same directory structure__ on all your cluster nodes lets you use our scripts to control
+everything.
+
+1. Copy the unpacked __flink__ directory from the downloaded archive to the same file system path
+on each node of your setup.
+2. Choose a __master node__ (JobManager) and set the `jobmanager.rpc.address` key in
+`conf/flink-conf.yaml` to its IP or hostname. Make sure that all nodes in your cluster have the same
+`jobmanager.rpc.address` configured.
+3. Add the IPs or hostnames (one per line) of all __worker nodes__ (TaskManager) to the slaves files
+in `conf/slaves`.
+
+You can now __start the cluster__ at your master node with `bin/start-cluster.sh`.
+
+
+The following __example__ illustrates the setup with three nodes (with IP addresses from _10.0.0.1_
+to _10.0.0.3_ and hostnames _master_, _worker1_, _worker2_) and shows the contents of the
+configuration files, which need to be accessible at the same path on all machines:
+
+<div class="row">
+  <div class="col-md-6 text-center">
+    <img src="_img/quickstart_cluster.png" style="width: 85%">
+  </div>
+<div class="col-md-6">
+  <div class="row">
+    <p class="lead text-center">
+      /path/to/<strong>flink/conf/<br>flink-conf.yaml</strong>
+    <pre>jobmanager.rpc.address: 10.0.0.1</pre>
+    </p>
+  </div>
+<div class="row" style="margin-top: 1em;">
+  <p class="lead text-center">
+    /path/to/<strong>flink/<br>conf/slaves</strong>
+  <pre>
+10.0.0.2
+10.0.0.3</pre>
+  </p>
+</div>
+</div>
+</div>
+
+Have a look at the [Configuration](config.html) section of the documentation to see other available configuration options.
+For Flink to run efficiently, a few configuration values need to be set.
+
+In particular, 
+
+ * the amount of available memory per TaskManager (`taskmanager.heap.mb`), 
+ * the number of available CPUs per machine (`taskmanager.numberOfTaskSlots`),
+ * the total number of CPUs in the cluster (`parallelism.default`) and
+ * the temporary directories (`taskmanager.tmp.dirs`)
+
+
+are very important configuration values.
+
+## Flink on YARN
+You can easily deploy Flink on your existing __YARN cluster__. 
+
+1. Download the __Flink YARN package__ with the YARN client: [Flink for YARN]({{site.FLINK_DOWNLOAD_URL_YARN_STABLE}})
+2. Make sure your __HADOOP_HOME__ (or _YARN_CONF_DIR_ or _HADOOP_CONF_DIR_) __environment variable__ is set to read your YARN and HDFS configuration.
+3. Run the __YARN client__ with: `./bin/yarn-session.sh`. You can run the client with options `-n 10 -tm 8192` to allocate 10 TaskManagers with 8GB of memory each.
+
+For __more detailed instructions__, check out the programming Guides and examples.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/run_example_quickstart.md
----------------------------------------------------------------------
diff --git a/docs/run_example_quickstart.md b/docs/run_example_quickstart.md
deleted file mode 100644
index 999a249..0000000
--- a/docs/run_example_quickstart.md
+++ /dev/null
@@ -1,155 +0,0 @@
----
-title: "Quick Start: Run K-Means Example"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-This guide walks you through the steps of executing an example program ([K-Means clustering](http://en.wikipedia.org/wiki/K-means_clustering)) on Flink. On the way, you will see the a visualization of the program, the optimized execution plan, and track the progress of its execution.
-
-## Setup Flink
-Follow the [instructions](setup_quickstart.html) to setup Flink and enter the root directory of your Flink setup.
-
-## Generate Input Data
-Flink contains a data generator for K-Means.
-
-~~~bash
-# Assuming you are in the root directory of your Flink setup
-mkdir kmeans
-cd kmeans
-# Run data generator
-java -cp ../examples/flink-java-examples-*-KMeans.jar org.apache.flink.examples.java.clustering.util.KMeansDataGenerator 500 10 0.08
-cp /tmp/points .
-cp /tmp/centers .
-~~~
-
-The generator has the following arguments:
-
-~~~bash
-KMeansDataGenerator <numberOfDataPoints> <numberOfClusterCenters> [<relative stddev>] [<centroid range>] [<seed>]
-~~~
-
-The _relative standard deviation_ is an interesting tuning parameter. It determines the closeness of the points to randomly generated centers.
-
-The `kmeans/` directory should now contain two files: `centers` and `points`. The `points` file contains the points to cluster and the `centers` file contains initial cluster centers.
-
-
-## Inspect the Input Data
-Use the `plotPoints.py` tool to review the generated data points. [Download Python Script](quickstart/plotPoints.py)
-
-~~~ bash
-python plotPoints.py points ./points input
-~~~ 
-
-Note: You might have to install [matplotlib](http://matplotlib.org/) (`python-matplotlib` package on Ubuntu) to use the Python script.
-
-You can review the input data stored in the `input-plot.pdf`, for example with Evince (`evince input-plot.pdf`).
-
-The following overview presents the impact of the different standard deviations on the input data.
-
-|relative stddev = 0.03|relative stddev = 0.08|relative stddev = 0.15|
-|:--------------------:|:--------------------:|:--------------------:|
-|<img src="img/quickstart-example/kmeans003.png" alt="example1" style="width: 275px;"/>|<img src="img/quickstart-example/kmeans008.png" alt="example2" style="width: 275px;"/>|<img src="img/quickstart-example/kmeans015.png" alt="example3" style="width: 275px;"/>|
-
-
-## Start Flink
-Start Flink and the web job submission client on your local machine.
-
-~~~ bash
-# return to the Flink root directory
-cd ..
-# start Flink
-./bin/start-local.sh
-# Start the web client
-./bin/start-webclient.sh
-~~~
-
-## Inspect and Run the K-Means Example Program
-The Flink web client allows to submit Flink programs using a graphical user interface.
-
-<div class="row" style="padding-top:15px">
-	<div class="col-md-6">
-		<a data-lightbox="compiler" href="img/quickstart-example/run-webclient.png" data-lightbox="example-1"><img class="img-responsive" src="img/quickstart-example/run-webclient.png" /></a>
-	</div>
-	<div class="col-md-6">
-		1. Open web client on  <a href="http://localhost:8080/launch.html">localhost:8080</a> <br>
-		2. Upload the K-Mean job JAR file. 
-			{% highlight bash %}
-			./examples/flink-java-examples-*-KMeans.jar
-			{% endhighlight %} </br>
-		3. Select it in the left box to see how the operators in the plan are connected to each other. <br>
-		4. Enter the arguments in the lower left box:
-			{% highlight bash %}
-			file://<pathToFlink>/kmeans/points file://<pathToFlink>/kmeans/centers file://<pathToFlink>/kmeans/result 10
-			{% endhighlight %}
-			For example:
-			{% highlight bash %}
-			file:///tmp/flink/kmeans/points file:///tmp/flink/kmeans/centers file:///tmp/flink/kmeans/result 10
-			{% endhighlight %}
-	</div>
-</div>
-<hr>
-<div class="row" style="padding-top:15px">
-	<div class="col-md-6">
-		<a data-lightbox="compiler" href="img/quickstart-example/compiler-webclient-new.png" data-lightbox="example-1"><img class="img-responsive" src="img/quickstart-example/compiler-webclient-new.png" /></a>
-	</div>
-
-	<div class="col-md-6">
-		1. Press the <b>RunJob</b> to see the optimizer plan. <br>
-		2. Inspect the operators and see the properties (input sizes, cost estimation) determined by the optimizer.
-	</div>
-</div>
-<hr>
-<div class="row" style="padding-top:15px">
-	<div class="col-md-6">
-		<a data-lightbox="compiler" href="img/quickstart-example/jobmanager-running-new.png" data-lightbox="example-1"><img class="img-responsive" src="img/quickstart-example/jobmanager-running-new.png" /></a>
-	</div>
-	<div class="col-md-6">
-		1. Press the <b>Continue</b> button to start executing the job. <br>
-		2. <a href="http://localhost:8080/launch.html">Open Flink's monitoring interface</a> to see the job's progress. (Due to the small input data, the job will finish really quick!)<br>
-		3. Once the job has finished, you can analyze the runtime of the individual operators.
-	</div>
-</div>
-
-## Shutdown Flink
-Stop Flink when you are done.
-
-~~~ bash
-# stop Flink
-./bin/stop-local.sh
-# Stop the Flink web client
-./bin/stop-webclient.sh
-~~~
-
-## Analyze the Result
-Use the [Python Script](quickstart/plotPoints.py) again to visualize the result.
-
-~~~bash
-cd kmeans
-python plotPoints.py result ./result clusters
-~~~
-
-The following three pictures show the results for the sample input above. Play around with the parameters (number of iterations, number of clusters) to see how they affect the result.
-
-
-|relative stddev = 0.03|relative stddev = 0.08|relative stddev = 0.15|
-|:--------------------:|:--------------------:|:--------------------:|
-|<img src="img/quickstart-example/result003.png" alt="example1" style="width: 275px;"/>|<img src="img/quickstart-example/result008.png" alt="example2" style="width: 275px;"/>|<img src="img/quickstart-example/result015.png" alt="example3" style="width: 275px;"/>|
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/scala_api_quickstart.md
----------------------------------------------------------------------
diff --git a/docs/scala_api_quickstart.md b/docs/scala_api_quickstart.md
deleted file mode 100644
index 48767cc..0000000
--- a/docs/scala_api_quickstart.md
+++ /dev/null
@@ -1,136 +0,0 @@
----
-title: "Quickstart: Scala API"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-Start working on your Flink Scala program in a few simple steps.
-
-## Requirements
-
-The only requirements are working __Maven 3.0.4__ (or higher) and __Java 6.x__ (or higher) installations.
-
-
-## Create Project
-
-Use one of the following commands to __create a project__:
-
-<ul class="nav nav-tabs" style="border-bottom: none;">
-    <li class="active"><a href="#quickstart-script" data-toggle="tab">Run the <strong>quickstart script</strong></a></li>
-    <li><a href="#maven-archetype" data-toggle="tab">Use <strong>Maven archetypes</strong></a></li>
-</ul>
-<div class="tab-content">
-    <div class="tab-pane active" id="quickstart-script">
-{% highlight bash %}
-$ curl http://flink.apache.org/q/quickstart-scala.sh | bash
-{% endhighlight %}
-    </div>
-    <div class="tab-pane" id="maven-archetype">
-{% highlight bash %}
-$ mvn archetype:generate                             \
-  -DarchetypeGroupId=org.apache.flink              \
-  -DarchetypeArtifactId=flink-quickstart-scala           \
-  -DarchetypeVersion={{site.FLINK_VERSION_SHORT}}
-{% endhighlight %}
-    This allows you to <strong>name your newly created project</strong>. It will interactively ask you for the groupId, artifactId, and package name.
-    </div>
-</div>
-
-
-## Inspect Project
-
-There will be a new directory in your working directory. If you've used the _curl_ approach, the directory is called `quickstart`. Otherwise, it has the name of your artifactId.
-
-The sample project is a __Maven project__, which contains two classes. _Job_ is a basic skeleton program and _WordCountJob_ a working example. Please note that the _main_ method of both classes allow you to start Flink in a development/testing mode.
-
-We recommend to __import this project into your IDE__. For Eclipse, you need the following plugins, which you can install from the provided Eclipse Update Sites:
-
-* _Eclipse 4.x_
-  * [Scala IDE](http://download.scala-ide.org/sdk/e38/scala210/stable/site)
-  * [m2eclipse-scala](http://alchim31.free.fr/m2e-scala/update-site)
-  * [Build Helper Maven Plugin](https://repository.sonatype.org/content/repositories/forge-sites/m2e-extras/0.15.0/N/0.15.0.201206251206/)
-* _Eclipse 3.7_
-  * [Scala IDE](http://download.scala-ide.org/sdk/e37/scala210/stable/site)
-  * [m2eclipse-scala](http://alchim31.free.fr/m2e-scala/update-site)
-  * [Build Helper Maven Plugin](https://repository.sonatype.org/content/repositories/forge-sites/m2e-extras/0.14.0/N/0.14.0.201109282148/)
-
-The IntelliJ IDE also supports Maven and offers a plugin for Scala development.
-
-
-## Build Project
-
-If you want to __build your project__, go to your project directory and issue the `mvn clean package -Pbuild-jar` command. You will __find a jar__ that runs on every Flink cluster in __target/your-artifact-id-1.0-SNAPSHOT.jar__. There is also a fat-jar,  __target/your-artifact-id-1.0-SNAPSHOT-flink-fat-jar.jar__. This
-also contains all dependencies that get added to the maven project.
-
-## Next Steps
-
-Write your application!
-
-The quickstart project contains a WordCount implementation, the "Hello World" of Big Data processing systems. The goal of WordCount is to determine the frequencies of words in a text, e.g., how often do the terms "the" or "house" occurs in all Wikipedia texts.
-
-__Sample Input__:
-
-~~~bash
-big data is big
-~~~
-
-__Sample Output__:
-
-~~~bash
-big 2
-data 1
-is 1
-~~~
-
-The following code shows the WordCount implementation from the Quickstart which processes some text lines with two operators (FlatMap and Reduce), and writes the prints the resulting words and counts to std-out.
-
-~~~scala
-object WordCountJob {
-  def main(args: Array[String]) {
-
-    // set up the execution environment
-    val env = ExecutionEnvironment.getExecutionEnvironment
-
-    // get input data
-    val text = env.fromElements("To be, or not to be,--that is the question:--",
-      "Whether 'tis nobler in the mind to suffer", "The slings and arrows of outrageous fortune",
-      "Or to take arms against a sea of troubles,")
-
-    val counts = text.flatMap { _.toLowerCase.split("\\W+") }
-      .map { (_, 1) }
-      .groupBy(0)
-      .sum(1)
-
-    // emit result
-    counts.print()
-
-    // execute program
-    env.execute("WordCount Example")
-  }
-}
-~~~
-
-{% gh_link /flink-examples/flink-scala-examples/src/main/scala/org/apache/flink/examples/scala/wordcount/WordCount.scala "Check GitHub" %} for the full example code.
-
-For a complete overview over our API, have a look at the [Programming Guide](programming_guide.html) and [further example programs](examples.html). If you have any trouble, ask on our [Mailing List](http://mail-archives.apache.org/mod_mbox/flink-dev/). We are happy to provide help.
-
-

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/search-results.md
----------------------------------------------------------------------
diff --git a/docs/search-results.md b/docs/search-results.md
new file mode 100644
index 0000000..633c658
--- /dev/null
+++ b/docs/search-results.md
@@ -0,0 +1,35 @@
+---
+title:  "Search Results"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<script>
+  (function() {
+    var cx = '000888944958067045520:z90hn2izm0k';
+    var gcse = document.createElement('script');
+    gcse.type = 'text/javascript';
+    gcse.async = true;
+    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
+        '//www.google.com/cse/cse.js?cx=' + cx;
+    var s = document.getElementsByTagName('script')[0];
+    s.parentNode.insertBefore(gcse, s);
+  })();
+</script>
+
+<gcse:searchresults-only></gcse:searchresults-only>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/search.md
----------------------------------------------------------------------
diff --git a/docs/search.md b/docs/search.md
deleted file mode 100644
index d7505ce..0000000
--- a/docs/search.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title:  "Search"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<script>
-  (function() {
-    var cx = '000888944958067045520:z90hn2izm0k';
-    var gcse = document.createElement('script');
-    gcse.type = 'text/javascript';
-    gcse.async = true;
-    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
-        '//www.google.com/cse/cse.js?cx=' + cx;
-    var s = document.getElementsByTagName('script')[0];
-    s.parentNode.insertBefore(gcse, s);
-  })();
-</script>
-
-<gcse:searchresults-only></gcse:searchresults-only>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup/building.md
----------------------------------------------------------------------
diff --git a/docs/setup/building.md b/docs/setup/building.md
new file mode 100644
index 0000000..2fcf412
--- /dev/null
+++ b/docs/setup/building.md
@@ -0,0 +1,107 @@
+---
+title:  "Build Flink"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+In order to build Flink, you need the source code. Either download the source of a release or clone the git repository. In addition to that, you need Maven 3 and a JDK (Java Development Kit). Note that you can not build Flink with Oracle JDK 6 due to a unresolved bug in the Oracle Java compiler. It works well with OpenJDK 6 and all Java 7 and 8 compilers.
+
+To clone from git, enter:
+
+~~~bash
+git clone {{ site.github_url }}
+~~~
+
+The simplest way of building Flink is by running:
+
+~~~bash
+cd flink
+mvn clean install -DskipTests
+~~~
+
+This instructs Maven (`mvn`) to first remove all existing builds (`clean`) and then create a new Flink binary (`install`). The `-DskipTests` command prevents Maven from executing the unit tests. 
+
+[Read more](http://maven.apache.org/) about Apache Maven.
+
+
+
+## Build Flink for a specific Hadoop Version
+
+This section covers building Flink for a specific Hadoop version. Most users do not need to do this manually. The download page of Flink contains binary packages for common setups.
+
+The problem is that Flink uses HDFS and YARN which are both dependencies from Apache Hadoop. There exist many different versions of Hadoop (from both the upstream project and the different Hadoop distributions). If a user is using a wrong combination of versions, exceptions like this one occur:
+
+~~~bash
+ERROR: The job was not successfully submitted to the nephele job manager:
+    org.apache.flink.nephele.executiongraph.GraphConversionException: Cannot compute input splits for TSV:
+    java.io.IOException: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException:
+    Protocol message contained an invalid tag (zero).; Host Details :
+~~~
+
+There are two main versions of Hadoop that we need to differentiate:
+- Hadoop 1, with all versions starting with zero or one, like 0.20, 0.23 or 1.2.1.
+- Hadoop 2, with all versions starting with 2, like 2.2.0.
+The main differentiation between Hadoop 1 and Hadoop 2 is the availability of Hadoop YARN (Hadoops cluster resource manager).
+
+By default, Flink is using the Hadoop 2 dependencies.
+
+**To build Flink for Hadoop 1**, issue the following command:
+
+~~~bash
+mvn clean install -DskipTests -Dhadoop.profile=1
+~~~
+
+The `-Dhadoop.profile=1` flag instructs Maven to build Flink for Hadoop 1. Note that the features included in Flink change when using a different Hadoop profile. In particular the support for YARN and the build-in HBase support are not available in Hadoop 1 builds.
+
+
+You can also **specify a specific Hadoop version to build against**:
+
+~~~bash
+mvn clean install -DskipTests -Dhadoop.version=2.4.1
+~~~
+
+
+**To build Flink against a vendor specific Hadoop version**, issue the following command:
+
+~~~bash
+mvn clean install -DskipTests -Pvendor-repos -Dhadoop.version=2.2.0-cdh5.0.0-beta-2
+~~~
+
+The `-Pvendor-repos` activates a Maven [build profile](http://maven.apache.org/guides/introduction/introduction-to-profiles.html) that includes the repositories of popular Hadoop vendors such as Cloudera, Hortonworks, or MapR.
+
+**Build Flink for `hadoop2` versions before 2.2.0**
+
+Maven will automatically build Flink with its YARN client. But there were some changes in Hadoop versions before the 2.2.0 Hadoop release that are not supported by Flink's YARN client. Therefore, you can disable building the YARN client with the following string: `-P!include-yarn`. 
+
+So if you are building Flink for Hadoop `2.0.0-alpha`, use the following command:
+
+~~~bash
+-P!include-yarn -Dhadoop.version=2.0.0-alpha
+~~~
+
+## Background
+
+The builds with Maven are controlled by [properties](http://maven.apache.org/pom.html#Properties) and <a href="http://maven.apache.org/guides/introduction/introduction-to-profiles.html">build profiles</a>.
+There are two profiles, one for hadoop1 and one for hadoop2. When the hadoop2 profile is enabled (default), the system will also build the YARN client.
+
+To enable the hadoop1 profile, set `-Dhadoop.profile=1` when building.
+Depending on the profile, there are two Hadoop versions, set via properties. For "hadoop1", we use 1.2.1 by default, for "hadoop2" it is 2.2.0.
+
+You can change these versions with the `hadoop-two.version` (or `hadoop-one.version`) property. For example `-Dhadoop-two.version=2.4.0`.
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup/cluster_setup.md
----------------------------------------------------------------------
diff --git a/docs/setup/cluster_setup.md b/docs/setup/cluster_setup.md
new file mode 100644
index 0000000..dcfeb94
--- /dev/null
+++ b/docs/setup/cluster_setup.md
@@ -0,0 +1,346 @@
+---
+title:  "Cluster Setup"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+This documentation is intended to provide instructions on how to run
+Flink in a fully distributed fashion on a static (but possibly
+heterogeneous) cluster.
+
+This involves two steps. First, installing and configuring Flink and
+second installing and configuring the [Hadoop Distributed
+Filesystem](http://hadoop.apache.org/) (HDFS).
+
+* This will be replaced by the TOC
+{:toc}
+
+## Preparing the Cluster
+
+### Software Requirements
+
+Flink runs on all *UNIX-like environments*, e.g. **Linux**, **Mac OS X**,
+and **Cygwin** (for Windows) and expects the cluster to consist of **one master
+node** and **one or more worker nodes**. Before you start to setup the system,
+make sure you have the following software installed **on each node**:
+
+- **Java 1.6.x** or higher,
+- **ssh** (sshd must be running to use the Flink scripts that manage
+  remote components)
+
+If your cluster does not fulfill these software requirements you will need to
+install/upgrade it.
+
+For example, on Ubuntu Linux, type in the following commands to install Java and
+ssh:
+
+~~~bash
+sudo apt-get install ssh 
+sudo apt-get install openjdk-7-jre
+~~~
+
+You can check the correct installation of Java by issuing the following command:
+
+~~~bash
+java -version
+~~~
+
+The command should output something comparable to the following on every node of
+your cluster (depending on your Java version, there may be small differences):
+
+~~~bash
+java version "1.6.0_22"
+Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
+Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)
+~~~
+
+To make sure the ssh daemon is running properly, you can use the command
+
+~~~bash
+ps aux | grep sshd
+~~~
+
+Something comparable to the following line should appear in the output
+of the command on every host of your cluster:
+
+~~~bash
+root       894  0.0  0.0  49260   320 ?        Ss   Jan09   0:13 /usr/sbin/sshd
+~~~
+
+### Configuring Remote Access with ssh
+
+In order to start/stop the remote processes, the master node requires access via
+ssh to the worker nodes. It is most convenient to use ssh's public key
+authentication for this. To setup public key authentication, log on to the
+master as the user who will later execute all the Flink components. **The
+same user (i.e. a user with the same user name) must also exist on all worker
+nodes**. For the remainder of this instruction we will refer to this user as
+*flink*. Using the super user *root* is highly discouraged for security
+reasons.
+
+Once you logged in to the master node as the desired user, you must generate a
+new public/private key pair. The following command will create a new
+public/private key pair into the *.ssh* directory inside the home directory of
+the user *flink*. See the ssh-keygen man page for more details. Note that
+the private key is not protected by a passphrase.
+
+~~~bash
+ssh-keygen -b 2048 -P '' -f ~/.ssh/id_rsa
+~~~
+
+Next, copy/append the content of the file *.ssh/id_rsa.pub* to your
+authorized_keys file. The content of the authorized_keys file defines which
+public keys are considered trustworthy during the public key authentication
+process. On most systems the appropriate command is
+
+~~~bash
+cat .ssh/id_rsa.pub >> .ssh/authorized_keys
+~~~
+
+On some Linux systems, the authorized keys file may also be expected by the ssh
+daemon under *.ssh/authorized_keys2*. In either case, you should make sure the
+file only contains those public keys which you consider trustworthy for each
+node of cluster.
+
+Finally, the authorized keys file must be copied to every worker node of your
+cluster. You can do this by repeatedly typing in
+
+~~~bash
+scp .ssh/authorized_keys <worker>:~/.ssh/
+~~~
+
+and replacing *\<worker\>* with the host name of the respective worker node.
+After having finished the copy process, you should be able to log on to each
+worker node from your master node via ssh without a password.
+
+### Setting JAVA_HOME on each Node
+
+Flink requires the `JAVA_HOME` environment variable to be set on the
+master and all worker nodes and point to the directory of your Java
+installation.
+
+You can set this variable in `conf/flink-conf.yaml` via the
+`env.java.home` key.
+
+Alternatively, add the following line to your shell profile. If you use the
+*bash* shell (probably the most common shell), the shell profile is located in
+*\~/.bashrc*:
+
+~~~bash
+export JAVA_HOME=/path/to/java_home/
+~~~
+
+If your ssh daemon supports user environments, you can also add `JAVA_HOME` to
+*.\~/.ssh/environment*. As super user *root* you can enable ssh user
+environments with the following commands:
+
+~~~bash
+echo "PermitUserEnvironment yes" >> /etc/ssh/sshd_config
+/etc/init.d/ssh restart
+~~~
+
+## Hadoop Distributed Filesystem (HDFS) Setup
+
+The Flink system currently uses the Hadoop Distributed Filesystem (HDFS)
+to read and write data in a distributed fashion. It is possible to use
+Flink without HDFS or other distributed file systems.
+
+Make sure to have a running HDFS installation. The following instructions are
+just a general overview of some required settings. Please consult one of the
+many installation guides available online for more detailed instructions.
+
+__Note that the following instructions are based on Hadoop 1.2 and might differ 
+for Hadoop 2.__
+
+### Downloading, Installing, and Configuring HDFS
+
+Similar to the Flink system HDFS runs in a distributed fashion. HDFS
+consists of a **NameNode** which manages the distributed file system's meta
+data. The actual data is stored by one or more **DataNodes**. For the remainder
+of this instruction we assume the HDFS's NameNode component runs on the master
+node while all the worker nodes run an HDFS DataNode.
+
+To start, log on to your master node and download Hadoop (which includes  HDFS)
+from the Apache [Hadoop Releases](http://hadoop.apache.org/releases.html) page.
+
+Next, extract the Hadoop archive.
+
+After having extracted the Hadoop archive, change into the Hadoop directory and
+edit the Hadoop environment configuration file:
+
+~~~bash
+cd hadoop-*
+vi conf/hadoop-env.sh
+~~~
+
+Uncomment and modify the following line in the file according to the path of
+your Java installation.
+
+~~~
+export JAVA_HOME=/path/to/java_home/
+~~~
+
+Save the changes and open the HDFS configuration file *conf/hdfs-site.xml*. HDFS
+offers multiple configuration parameters which affect the behavior of the
+distributed file system in various ways. The following excerpt shows a minimal
+configuration which is required to make HDFS work. More information on how to
+configure HDFS can be found in the [HDFS User
+Guide](http://hadoop.apache.org/docs/r1.2.1/hdfs_user_guide.html) guide.
+
+~~~xml
+<configuration>
+  <property>
+    <name>fs.default.name</name>
+    <value>hdfs://MASTER:50040/</value>
+  </property>
+  <property>
+    <name>dfs.data.dir</name>
+    <value>DATAPATH</value>
+  </property>
+</configuration>
+~~~
+
+Replace *MASTER* with the IP/host name of your master node which runs the
+*NameNode*. *DATAPATH* must be replaced with path to the directory in which the
+actual HDFS data shall be stored on each worker node. Make sure that the
+*flink* user has sufficient permissions to read and write in that
+directory.
+
+After having saved the HDFS configuration file, open the file *conf/slaves* and
+enter the IP/host name of those worker nodes which shall act as *DataNode*s.
+Each entry must be separated by a line break.
+
+~~~
+<worker 1>
+<worker 2>
+.
+.
+.
+<worker n>
+~~~
+
+Initialize the HDFS by typing in the following command. Note that the
+command will **delete all data** which has been previously stored in the
+HDFS. However, since we have just installed a fresh HDFS, it should be
+safe to answer the confirmation with *yes*.
+
+~~~bash
+bin/hadoop namenode -format
+~~~
+
+Finally, we need to make sure that the Hadoop directory is available to
+all worker nodes which are intended to act as DataNodes and that all nodes
+**find the directory under the same path**. We recommend to use a shared network
+directory (e.g. an NFS share) for that. Alternatively, one can copy the
+directory to all nodes (with the disadvantage that all configuration and
+code updates need to be synced to all nodes).
+
+### Starting HDFS
+
+To start the HDFS log on to the master and type in the following
+commands
+
+~~~bash
+cd hadoop-*
+bin/start-dfs.sh
+~~~
+
+If your HDFS setup is correct, you should be able to open the HDFS
+status website at *http://MASTER:50070*. In a matter of a seconds,
+all DataNodes should appear as live nodes. For troubleshooting we would
+like to point you to the [Hadoop Quick
+Start](http://wiki.apache.org/hadoop/QuickStart)
+guide.
+
+## Flink Setup
+
+Go to the [downloads page]({{site.baseurl}}/downloads.html) and get the ready to run
+package. Make sure to pick the Flink package **matching your Hadoop
+version**.
+
+After downloading the latest release, copy the archive to your master node and
+extract it:
+
+~~~bash
+tar xzf flink-*.tgz
+cd flink-*
+~~~
+
+### Configuring the Cluster
+
+After having extracted the system files, you need to configure Flink for
+the cluster by editing *conf/flink-conf.yaml*.
+
+Set the `jobmanager.rpc.address` key to point to your master node. Furthermode
+define the maximum amount of main memory the JVM is allowed to allocate on each
+node by setting the `jobmanager.heap.mb` and `taskmanager.heap.mb` keys.
+
+The value is given in MB. If some worker nodes have more main memory which you
+want to allocate to the Flink system you can overwrite the default value
+by setting an environment variable `FLINK_TM_HEAP` on the respective
+node.
+
+Finally you must provide a list of all nodes in your cluster which shall be used
+as worker nodes. Therefore, similar to the HDFS configuration, edit the file
+*conf/slaves* and enter the IP/host name of each worker node. Each worker node
+will later run a TaskManager.
+
+Each entry must be separated by a new line, as in the following example:
+
+~~~
+192.168.0.100
+192.168.0.101
+.
+.
+.
+192.168.0.150
+~~~
+
+The Flink directory must be available on every worker under the same
+path. Similarly as for HDFS, you can use a shared NSF directory, or copy the
+entire Flink directory to every worker node.
+
+Please see the [configuration page](config.html) for details and additional
+configuration options.
+
+In particular, 
+
+ * the amount of available memory per TaskManager (`taskmanager.heap.mb`), 
+ * the number of available CPUs per machine (`taskmanager.numberOfTaskSlots`),
+ * the total number of CPUs in the cluster (`parallelism.default`) and
+ * the temporary directories (`taskmanager.tmp.dirs`)
+
+are very important configuration values.
+
+
+### Starting Flink
+
+The following script starts a JobManager on the local node and connects via
+SSH to all worker nodes listed in the *slaves* file to start the
+TaskManager on each node. Now your Flink system is up and
+running. The JobManager running on the local node will now accept jobs
+at the configured RPC port.
+
+Assuming that you are on the master node and inside the Flink directory:
+
+~~~bash
+bin/start-cluster.sh
+~~~
+
+To stop Flink, there is also a `stop-cluster.sh` script.


[28/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/hadoop_compatibility.md
----------------------------------------------------------------------
diff --git a/docs/apis/hadoop_compatibility.md b/docs/apis/hadoop_compatibility.md
new file mode 100644
index 0000000..d88dc0b
--- /dev/null
+++ b/docs/apis/hadoop_compatibility.md
@@ -0,0 +1,246 @@
+---
+title: "Hadoop Compatibility"
+is_beta: true
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+Flink is compatible with Apache Hadoop MapReduce interfaces and therefore allows
+reusing code that was implemented for Hadoop MapReduce.
+
+You can:
+
+- use Hadoop's `Writable` [data types](programming_guide.html#data-types) in Flink programs.
+- use any Hadoop `InputFormat` as a [DataSource](programming_guide.html#data-sources).
+- use any Hadoop `OutputFormat` as a [DataSink](programming_guide.html#data-sinks).
+- use a Hadoop `Mapper` as [FlatMapFunction](dataset_transformations.html#flatmap).
+- use a Hadoop `Reducer` as [GroupReduceFunction](dataset_transformations.html#groupreduce-on-grouped-dataset).
+
+This document shows how to use existing Hadoop MapReduce code with Flink. Please refer to the
+[Connecting to other systems](example_connectors.html) guide for reading from Hadoop supported file systems.
+
+* This will be replaced by the TOC
+{:toc}
+
+### Project Configuration
+
+Support for Haddop input/output formats is part of the `flink-java` and
+`flink-scala` Maven modules that are always required when writing Flink jobs.
+The code is located in `org.apache.flink.api.java.hadoop` and
+`org.apache.flink.api.scala.hadoop` in an additional sub-package for the
+`mapred` and `mapreduce` API.
+
+Support for Hadoop Mappers and Reducers is contained in the `flink-staging`
+Maven module.
+This code resides in the `org.apache.flink.hadoopcompatibility`
+package.
+
+Add the following dependency to your `pom.xml` if you want to reuse Mappers
+and Reducers.
+
+~~~xml
+<dependency>
+	<groupId>org.apache.flink</groupId>
+	<artifactId>flink-hadoop-compatibility</artifactId>
+	<version>{{site.version}}</version>
+</dependency>
+~~~
+
+### Using Hadoop Data Types
+
+Flink supports all Hadoop `Writable` and `WritableComparable` data types
+out-of-the-box. You do not need to include the Hadoop Compatibility dependency,
+if you only want to use your Hadoop data types. See the
+[Programming Guide](programming_guide.html#data-types) for more details.
+
+### Using Hadoop InputFormats
+
+Hadoop input formats can be used to create a data source by using
+one of the methods `readHadoopFile` or `createHadoopInput` of the
+`ExecutionEnvironment`. The former is used for input formats derived
+from `FileInputFormat` while the latter has to be used for general purpose
+input formats.
+
+The resulting `DataSet` contains 2-tuples where the first field
+is the key and the second field is the value retrieved from the Hadoop
+InputFormat.
+
+The following example shows how to use Hadoop's `TextInputFormat`.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+DataSet<Tuple2<LongWritable, Text>> input =
+    env.readHadoopFile(new TextInputFormat(), LongWritable.class, Text.class, textPath);
+
+// Do something with the data.
+[...]
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val env = ExecutionEnvironment.getExecutionEnvironment
+		
+val input: DataSet[(LongWritable, Text)] =
+  env.readHadoopFile(new TextInputFormat, classOf[LongWritable], classOf[Text], textPath)
+
+// Do something with the data.
+[...]
+~~~
+
+</div>
+
+</div>
+
+### Using Hadoop OutputFormats
+
+Flink provides a compatibility wrapper for Hadoop `OutputFormats`. Any class
+that implements `org.apache.hadoop.mapred.OutputFormat` or extends
+`org.apache.hadoop.mapreduce.OutputFormat` is supported.
+The OutputFormat wrapper expects its input data to be a DataSet containing
+2-tuples of key and value. These are to be processed by the Hadoop OutputFormat.
+
+The following example shows how to use Hadoop's `TextOutputFormat`.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+// Obtain the result we want to emit
+DataSet<Tuple2<Text, IntWritable>> hadoopResult = [...]
+		
+// Set up the Hadoop TextOutputFormat.
+HadoopOutputFormat<Text, IntWritable> hadoopOF = 
+  // create the Flink wrapper.
+  new HadoopOutputFormat<Text, IntWritable>(
+    // set the Hadoop OutputFormat and specify the job.
+    new TextOutputFormat<Text, IntWritable>(), job
+  );
+hadoopOF.getConfiguration().set("mapreduce.output.textoutputformat.separator", " ");
+TextOutputFormat.setOutputPath(job, new Path(outputPath));
+		
+// Emit data using the Hadoop TextOutputFormat.
+hadoopResult.output(hadoopOF);
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+// Obtain your result to emit.
+val hadoopResult: DataSet[(Text, IntWritable)] = [...]
+
+val hadoopOF = new HadoopOutputFormat[Text,IntWritable](
+  new TextOutputFormat[Text, IntWritable],
+  new JobConf)
+
+hadoopOF.getJobConf.set("mapred.textoutputformat.separator", " ")
+FileOutputFormat.setOutputPath(hadoopOF.getJobConf, new Path(resultPath))
+
+hadoopResult.output(hadoopOF)
+
+		
+~~~
+
+</div>
+
+</div>
+
+### Using Hadoop Mappers and Reducers
+
+Hadoop Mappers are semantically equivalent to Flink's [FlatMapFunctions](dataset_transformations.html#flatmap) and Hadoop Reducers are equivalent to Flink's [GroupReduceFunctions](dataset_transformations.html#groupreduce-on-grouped-dataset). Flink provides wrappers for implementations of Hadoop MapReduce's `Mapper` and `Reducer` interfaces, i.e., you can reuse your Hadoop Mappers and Reducers in regular Flink programs. At the moment, only the Mapper and Reduce interfaces of Hadoop's mapred API (`org.apache.hadoop.mapred`) are supported.
+
+The wrappers take a `DataSet<Tuple2<KEYIN,VALUEIN>>` as input and produce a `DataSet<Tuple2<KEYOUT,VALUEOUT>>` as output where `KEYIN` and `KEYOUT` are the keys and `VALUEIN` and `VALUEOUT` are the values of the Hadoop key-value pairs that are processed by the Hadoop functions. For Reducers, Flink offers a wrapper for a GroupReduceFunction with (`HadoopReduceCombineFunction`) and without a Combiner (`HadoopReduceFunction`). The wrappers accept an optional `JobConf` object to configure the Hadoop Mapper or Reducer.
+
+Flink's function wrappers are 
+
+- `org.apache.flink.hadoopcompatibility.mapred.HadoopMapFunction`,
+- `org.apache.flink.hadoopcompatibility.mapred.HadoopReduceFunction`, and
+- `org.apache.flink.hadoopcompatibility.mapred.HadoopReduceCombineFunction`.
+
+and can be used as regular Flink [FlatMapFunctions](dataset_transformations.html#flatmap) or [GroupReduceFunctions](dataset_transformations.html#groupreduce-on-grouped-dataset).
+
+The following example shows how to use Hadoop `Mapper` and `Reducer` functions.
+
+~~~java
+// Obtain data to process somehow.
+DataSet<Tuple2<Text, LongWritable>> text = [...]
+
+DataSet<Tuple2<Text, LongWritable>> result = text
+  // use Hadoop Mapper (Tokenizer) as MapFunction
+  .flatMap(new HadoopMapFunction<LongWritable, Text, Text, LongWritable>(
+    new Tokenizer()
+  ))
+  .groupBy(0)
+  // use Hadoop Reducer (Counter) as Reduce- and CombineFunction
+  .reduceGroup(new HadoopReduceCombineFunction<Text, LongWritable, Text, LongWritable>(
+    new Counter(), new Counter()
+  ));
+~~~
+
+**Please note:** The Reducer wrapper works on groups as defined by Flink's [groupBy()](dataset_transformations.html#transformations-on-grouped-dataset) operation. It does not consider any custom partitioners, sort or grouping comparators you might have set in the `JobConf`. 
+
+### Complete Hadoop WordCount Example
+
+The following example shows a complete WordCount implementation using Hadoop data types, Input- and OutputFormats, and Mapper and Reducer implementations.
+
+~~~java
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+		
+// Set up the Hadoop TextInputFormat.
+Job job = Job.getInstance();
+HadoopInputFormat<LongWritable, Text> hadoopIF = 
+  new HadoopInputFormat<LongWritable, Text>(
+    new TextInputFormat(), LongWritable.class, Text.class, job
+  );
+TextInputFormat.addInputPath(job, new Path(inputPath));
+		
+// Read data using the Hadoop TextInputFormat.
+DataSet<Tuple2<LongWritable, Text>> text = env.createInput(hadoopIF);
+
+DataSet<Tuple2<Text, LongWritable>> result = text
+  // use Hadoop Mapper (Tokenizer) as MapFunction
+  .flatMap(new HadoopMapFunction<LongWritable, Text, Text, LongWritable>(
+    new Tokenizer()
+  ))
+  .groupBy(0)
+  // use Hadoop Reducer (Counter) as Reduce- and CombineFunction
+  .reduceGroup(new HadoopReduceCombineFunction<Text, LongWritable, Text, LongWritable>(
+    new Counter(), new Counter()
+  ));
+
+// Set up the Hadoop TextOutputFormat.
+HadoopOutputFormat<Text, IntWritable> hadoopOF = 
+  new HadoopOutputFormat<Text, IntWritable>(
+    new TextOutputFormat<Text, IntWritable>(), job
+  );
+hadoopOF.getConfiguration().set("mapreduce.output.textoutputformat.separator", " ");
+TextOutputFormat.setOutputPath(job, new Path(outputPath));
+		
+// Emit data using the Hadoop TextOutputFormat.
+result.output(hadoopOF);
+
+// Execute Program
+env.execute("Hadoop WordCount");
+~~~

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/index.md
----------------------------------------------------------------------
diff --git a/docs/apis/index.md b/docs/apis/index.md
new file mode 100644
index 0000000..db82e6f
--- /dev/null
+++ b/docs/apis/index.md
@@ -0,0 +1,21 @@
+---
+title: "Programming Guides"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/iterations.md
----------------------------------------------------------------------
diff --git a/docs/apis/iterations.md b/docs/apis/iterations.md
new file mode 100644
index 0000000..8233230
--- /dev/null
+++ b/docs/apis/iterations.md
@@ -0,0 +1,209 @@
+---
+title:  "Iterations"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+Iterative algorithms occur in many domains of data analysis, such as *machine learning* or *graph analysis*. Such algorithms are crucial in order to realize the promise of Big Data to extract meaningful information out of your data. With increasing interest to run these kinds of algorithms on very large data sets, there is a need to execute iterations in a massively parallel fashion.
+
+Flink programs implement iterative algorithms by defining a **step function** and embedding it into a special iteration operator. There are two  variants of this operator: **Iterate** and **Delta Iterate**. Both operators repeatedly invoke the step function on the current iteration state until a certain termination condition is reached.
+
+Here, we provide background on both operator variants and outline their usage. The [programming guide](programming_guide.html) explain how to implement the operators in both Scala and Java. We also provide a **vertex-centric graph processing API** called [Spargel](spargel_guide.html).
+
+The following table provides an overview of both operators:
+
+
+<table class="table table-striped table-hover table-bordered">
+	<thead>
+		<th></th>
+		<th class="text-center">Iterate</th>
+		<th class="text-center">Delta Iterate</th>
+	</thead>
+	<tr>
+		<td class="text-center" width="20%"><strong>Iteration Input</strong></td>
+		<td class="text-center" width="40%"><strong>Partial Solution</strong></td>
+		<td class="text-center" width="40%"><strong>Workset</strong> and <strong>Solution Set</strong></td>
+	</tr>
+	<tr>
+		<td class="text-center"><strong>Step Function</strong></td>
+		<td colspan="2" class="text-center">Arbitrary Data Flows</td>
+	</tr>
+	<tr>
+		<td class="text-center"><strong>State Update</strong></td>
+		<td class="text-center">Next <strong>partial solution</strong></td>
+		<td>
+			<ul>
+				<li>Next workset</li>
+				<li><strong>Changes to solution set</strong></li>
+			</ul>
+		</td>
+	</tr>
+	<tr>
+		<td class="text-center"><strong>Iteration Result</strong></td>
+		<td class="text-center">Last partial solution</td>
+		<td class="text-center">Solution set state after last iteration</td>
+	</tr>
+	<tr>
+		<td class="text-center"><strong>Termination</strong></td>
+		<td>
+			<ul>
+				<li><strong>Maximum number of iterations</strong> (default)</li>
+				<li>Custom aggregator convergence</li>
+			</ul>
+		</td>
+		<td>
+			<ul>
+				<li><strong>Maximum number of iterations or empty workset</strong> (default)</li>
+				<li>Custom aggregator convergence</li>
+			</ul>
+		</td>
+	</tr>
+</table>
+
+
+* This will be replaced by the TOC
+{:toc}
+
+Iterate Operator
+----------------
+
+The **iterate operator** covers the *simple form of iterations*: in each iteration, the **step function** consumes the **entire input** (the *result of the previous iteration*, or the *initial data set*), and computes the **next version of the partial solution** (e.g. `map`, `reduce`, `join`, etc.).
+
+<p class="text-center">
+    <img alt="Iterate Operator" width="60%" src="fig/iterations_iterate_operator.png" />
+</p>
+
+  1. **Iteration Input**: Initial input for the *first iteration* from a *data source* or *previous operators*.
+  2. **Step Function**: The step function will be executed in each iteration. It is an arbitrary data flow consisting of operators like `map`, `reduce`, `join`, etc. and depends on your specific task at hand.
+  3. **Next Partial Solution**: In each iteration, the output of the step function will be fed back into the *next iteration*.
+  4. **Iteration Result**: Output of the *last iteration* is written to a *data sink* or used as input to the *following operators*.
+
+There are multiple options to specify **termination conditions** for an iteration:
+
+  - **Maximum number of iterations**: Without any further conditions, the iteration will be executed this many times.
+  - **Custom aggregator convergence**: Iterations allow to specify *custom aggregators* and *convergence criteria* like sum aggregate the number of emitted records (aggregator) and terminate if this number is zero (convergence criterion).
+
+You can also think about the iterate operator in pseudo-code:
+
+~~~java
+IterationState state = getInitialState();
+
+while (!terminationCriterion()) {
+	state = step(state);
+}
+
+setFinalState(state);
+~~~
+
+<div class="panel panel-default">
+	<div class="panel-body">
+	See the <strong><a href="programming_guide.html">Programming Guide</a> </strong> for details and code examples.</div>
+</div>
+
+### Example: Incrementing Numbers
+
+In the following example, we **iteratively incremenet a set numbers**:
+
+<p class="text-center">
+    <img alt="Iterate Operator Example" width="60%" src="fig/iterations_iterate_operator_example.png" />
+</p>
+
+  1. **Iteration Input**: The inital input is read from a data source and consists of five single-field records (integers `1` to `5`).
+  2. **Step function**: The step function is a single `map` operator, which increments the integer field from `i` to `i+1`. It will be applied to every record of the input.
+  3. **Next Partial Solution**: The output of the step function will be the output of the map operator, i.e. records with incremented integers.
+  4. **Iteration Result**: After ten iterations, the initial numbers will have been incremented ten times, resulting in integers `11` to `15`.
+
+~~~
+// 1st           2nd                       10th
+map(1) -> 2      map(2) -> 3      ...      map(10) -> 11
+map(2) -> 3      map(3) -> 4      ...      map(11) -> 12
+map(3) -> 4      map(4) -> 5      ...      map(12) -> 13
+map(4) -> 5      map(5) -> 6      ...      map(13) -> 14
+map(5) -> 6      map(6) -> 7      ...      map(14) -> 15
+~~~
+
+Note that **1**, **2**, and **4** can be arbitrary data flows.
+
+
+Delta Iterate Operator
+----------------------
+
+The **delta iterate operator** covers the case of **incremental iterations**. Incremental iterations **selectively modify elements** of their **solution** and evolve the solution rather than fully recompute it.
+
+Where applicable, this leads to **more efficient algorithms**, because not every element in the solution set changes in each iteration. This allows to **focus on the hot parts** of the solution and leave the **cold parts untouched**. Frequently, the majority of the solution cools down comparatively fast and the later iterations operate only on a small subset of the data.
+
+<p class="text-center">
+    <img alt="Delta Iterate Operator" width="60%" src="fig/iterations_delta_iterate_operator.png" />
+</p>
+
+  1. **Iteration Input**: The initial workset and solution set are read from *data sources* or *previous operators* as input to the first iteration.
+  2. **Step Function**: The step function will be executed in each iteration. It is an arbitrary data flow consisting of operators like `map`, `reduce`, `join`, etc. and depends on your specific task at hand.
+  3. **Next Workset/Update Solution Set**: The *next workset* drives the iterative computation and will be fed back into the *next iteration*. Furthermore, the solution set will be updated and implicitly forwarded (it is not required to be rebuild). Both data sets can be updated by different operators of the step function.
+  4. **Iteration Result**: After the *last iteration*, the *solution set* is written to a *data sink* or used as input to the *following operators*.
+
+The default **termination condition** for delta iterations is specified by the **empty workset convergence criterion** and a **maximum number of iterations**. The iteration will terminate when a produced *next workset* is empty or when the maximum number of iterations is reached. It is also possible to specify a **custom aggregator** and **convergence criterion**.
+
+You can also think about the iterate operator in pseudo-code:
+
+~~~java
+IterationState workset = getInitialState();
+IterationState solution = getInitialSolution();
+
+while (!terminationCriterion()) {
+	(delta, workset) = step(workset, solution);
+
+	solution.update(delta)
+}
+
+setFinalState(solution);
+~~~
+
+<div class="panel panel-default">
+	<div class="panel-body">
+	See the <strong><a href="programming_guide.html">programming guide</a></strong> for details and code examples.</div>
+</div>
+
+### Example: Propagate Minimum in Graph
+
+In the following example, every vertex has an **ID** and a **coloring**. Each vertex will propagate its vertex ID to neighboring vertices. The **goal** is to *assign the minimum ID to every vertex in a subgraph*. If a received ID is smaller then the current one, it changes to the color of the vertex with the received ID. One application of this can be found in *community analysis* or *connected components* computation.
+
+<p class="text-center">
+    <img alt="Delta Iterate Operator Example" width="100%" src="fig/iterations_delta_iterate_operator_example.png" />
+</p>
+
+The **intial input** is set as **both workset and solution set.** In the above figure, the colors visualize the **evolution of the solution set**. With each iteration, the color of the minimum ID is spreading in the respective subgraph. At the same time, the amount of work (exchanged and compared vertex IDs) decreases with each iteration. This corresponds to the **decreasing size of the workset**, which goes from all seven vertices to zero after three iterations, at which time the iteration terminates. The **important observation** is that *the lower subgraph converges before the upper half* does and the delta iteration is able to capture this with the workset abstraction.
+
+In the upper subgraph **ID 1** (*orange*) is the **minimum ID**. In the **first iteration**, it will get propagated to vertex 2, which will subsequently change its color to orange. Vertices 3 and 4 will receive **ID 2** (in *yellow*) as their current minimum ID and change to yellow. Because the color of *vertex 1* didn't change in the first iteration, it can be skipped it in the next workset.
+
+In the lower subgraph **ID 5** (*cyan*) is the **minimum ID**. All vertices of the lower subgraph will receive it in the first iteration. Again, we can skip the unchanged vertices (*vertex 5*) for the next workset.
+
+In the **2nd iteration**, the workset size has already decreased from seven to five elements (vertices 2, 3, 4, 6, and 7). These are part of the iteration and further propagate their current minimum IDs. After this iteration, the lower subgraph has already converged (**cold part** of the graph), as it has no elements in the workset, whereas the upper half needs a further iteration (**hot part** of the graph) for the two remaining workset elements (vertices 3 and 4).
+
+The iteration **terminates**, when the workset is empty after the **3rd iteration**.
+
+<a href="#supersteps"></a>
+
+Superstep Synchronization
+-------------------------
+
+We referred to each execution of the step function of an iteration operator as *a single iteration*. In parallel setups, **multiple instances of the step function are evaluated in parallel** on different partitions of the iteration state. In many settings, one evaluation of the step function on all parallel instances forms a so called **superstep**, which is also the granularity of synchronization. Therefore, *all* parallel tasks of an iteration need to complete the superstep, before a next superstep will be initialized. **Termination criteria** will also be evaluated at superstep barriers.
+
+<p class="text-center">
+    <img alt="Supersteps" width="50%" src="fig/iterations_supersteps.png" />
+</p>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/java8.md
----------------------------------------------------------------------
diff --git a/docs/apis/java8.md b/docs/apis/java8.md
new file mode 100644
index 0000000..ec17db5
--- /dev/null
+++ b/docs/apis/java8.md
@@ -0,0 +1,190 @@
+---
+title: "Java 8 Programming Guide"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+Java 8 introduces several new language features designed for faster and clearer coding. With the most important feature, 
+the so-called "Lambda Expressions", Java 8 opens the door to functional programming. Lambda Expressions allow for implementing and 
+passing functions in a straightforward way without having to declare additional (anonymous) classes.
+
+The newest version of Flink supports the usage of Lambda Expressions for all operators of the Java API.
+This document shows how to use Lambda Expressions and describes current limitations. For a general introduction to the
+Flink API, please refer to the [Programming Guide](programming_guide.html)
+
+* TOC
+{:toc}
+
+### Examples
+
+The following example illustrates how to implement a simple, inline `map()` function that squares its input using a Lambda Expression. 
+The types of input `i` and output parameters of the `map()` function need not to be declared as they are inferred by the Java 8 compiler.
+
+~~~java
+env.fromElements(1, 2, 3)
+// returns the squared i
+.map(i -> i*i)
+.print();
+~~~
+
+The next two examples show different implementations of a function that uses a `Collector` for output. 
+Functions, such as `flatMap()`, require a output type (in this case `String`) to be defined for the `Collector` in order to be type-safe. 
+If the `Collector` type can not be inferred from the surrounding context, it need to be declared in the Lambda Expression's parameter list manually. 
+Otherwise the output will be treated as type `Object` which can lead to undesired behaviour.
+
+~~~java
+DataSet<String> input = env.fromElements(1, 2, 3);
+
+// collector type must be declared
+input.flatMap((Integer number, Collector<String> out) -> {
+    for(int i = 0; i < number; i++) {
+        out.collect("a");
+    }
+})
+// returns "a", "a", "aa", "a", "aa" , "aaa"
+.print();
+~~~
+
+~~~java
+DataSet<String> input = env.fromElements(1, 2, 3);
+
+// collector type must not be declared, it is inferred from the type of the dataset
+DataSet<String> manyALetters = input.flatMap((number, out) -> {	
+    for(int i = 0; i < number; i++) {
+        out.collect("a");
+    }
+});
+
+// returns "a", "a", "aa", "a", "aa" , "aaa"
+manyALetters.print();
+~~~
+
+The following code demonstrates a word count which makes extensive use of Lambda Expressions.
+
+~~~java
+DataSet<String> input = env.fromElements("Please count", "the words", "but not this");
+		
+// filter out strings that contain "not"
+input.filter(line -> !line.contains("not"))
+// split each line by space
+.map(line -> line.split(" "))
+// emit a pair <word,1> for each array element
+.flatMap((String[] wordArray, Collector<Tuple2<String, Integer>> out) 
+    -> Arrays.stream(wordArray).forEach(t -> out.collect(new Tuple2<>(t, 1)))
+    )
+// group and sum up
+.groupBy(0).sum(1)
+// print
+.print();
+~~~
+
+### Compiler Limitations
+Currently, Flink only supports jobs containing Lambda Expressions completely if they are **compiled with the Eclipse JDT compiler contained in Eclipse Luna 4.4.2 (and above)**. 
+
+Only the Eclipse JDT compiler preserves the generic type information necessary to use the entire Lambda Expressions feature type-safely. 
+Other compilers such as the OpenJDK's and Oracle JDK's `javac` throw away all generic parameters related to Lambda Expressions. This means that types such as `Tuple2<String,Integer` or `Collector<String>` declared as a Lambda function input or output parameter will be pruned to `Tuple2` or `Collector` in the compiled `.class` files, which is too little information for the Flink Compiler. 
+
+How to compile a Flink job that contains Lambda Expressions with the JDT compiler will be covered in the next section. 
+
+However, it is possible to implement functions such as `map()` or `filter()` with Lambda Expressions in Java 8 compilers other than the Eclipse JDT compiler as long as the function has no `Collector`s or `Iterable`s *and* only if the function handles unparameterized types such as `Integer`, `Long`, `String`, `MyOwnClass` (types without Generics!).
+
+#### Compile Flink jobs with the Eclipse JDT compiler and Maven
+
+If you are using the Eclipse IDE, you can run and debug your Flink code within the IDE without any problems after some configuration steps. The Eclipse IDE by default compiles its Java sources with the Eclipse JDT compiler. The next section describes how to configure the Eclipse IDE.
+
+If you are using a different IDE such as IntelliJ IDEA or you want to package your Jar-File with Maven to run your job on a cluster, you need to modify your project's `pom.xml` file and build your program with Maven. The [quickstart](setup_quickstart.html) contains preconfigured Maven projects which can be used for new projects or as a reference. Uncomment the mentioned lines in your generated quickstart `pom.xml` file if you want to use Java 8 with Lambda Expressions. 
+
+Alternatively, you can manually insert the following lines to your Maven `pom.xml` file. Maven will then use the Eclipse JDT compiler for compilation.
+
+~~~xml
+<!-- put these lines under "project/build/pluginManagement/plugins" of your pom.xml -->
+
+<plugin>
+    <!-- Use compiler plugin with tycho as the adapter to the JDT compiler. -->
+    <artifactId>maven-compiler-plugin</artifactId>
+    <configuration>
+        <source>1.8</source>
+        <target>1.8</target>
+        <compilerId>jdt</compilerId>
+    </configuration>
+    <dependencies>
+        <!-- This dependency provides the implementation of compiler "jdt": -->
+        <dependency>
+            <groupId>org.eclipse.tycho</groupId>
+            <artifactId>tycho-compiler-jdt</artifactId>
+            <version>0.21.0</version>
+        </dependency>
+    </dependencies>
+</plugin>
+~~~
+
+If you are using Eclipse for development, the m2e plugin might complain about the inserted lines above and marks your `pom.xml` as invalid. If so, insert the following lines to your `pom.xml`.
+
+~~~xml
+<!-- put these lines under "project/build/pluginManagement/plugins/plugin[groupId="org.eclipse.m2e", artifactId="lifecycle-mapping"]/configuration/lifecycleMappingMetadata/pluginExecutions" of your pom.xml -->
+
+<pluginExecution>
+    <pluginExecutionFilter>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <versionRange>[3.1,)</versionRange>
+        <goals>
+            <goal>testCompile</goal>
+            <goal>compile</goal> 
+        </goals>
+    </pluginExecutionFilter>
+    <action>
+        <ignore></ignore>
+    </action>
+</pluginExecution>
+~~~
+
+#### Run and debug Flink jobs within the Eclipse IDE
+
+First of all, make sure you are running a current version of Eclipse IDE (4.4.2 or later). Also make sure that you have a Java 8 Runtime Environment (JRE) installed in Eclipse IDE (`Window` -> `Preferences` -> `Java` -> `Installed JREs`).
+
+Create/Import your Eclipse project. 
+
+If you are using Maven, you also need to change the Java version in your `pom.xml` for the `maven-compiler-plugin`. Otherwise right click the `JRE System Library` section of your project and open the `Properties` window in order to switch to a Java 8 JRE (or above) that supports Lambda Expressions.
+
+The Eclipse JDT compiler needs a special compiler flag in order to store type information in `.class` files. Open the JDT configuration file at `{project directoy}/.settings/org.eclipse.jdt.core.prefs` with your favorite text editor and add the following line:
+
+~~~
+org.eclipse.jdt.core.compiler.codegen.lambda.genericSignature=generate
+~~~
+
+If not already done, also modify the Java versions of the following properties to `1.8` (or above):
+
+~~~
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.source=1.8
+~~~
+
+After you have saved the file, perform a complete project refresh in Eclipse IDE. 
+
+If you are using Maven, right click your Eclipse project and select `Maven` -> `Update Project...`.
+
+You have configured everything correctly, if the following Flink program runs without exceptions:
+
+~~~java
+final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+env.fromElements(1, 2, 3).map((in) -> new Tuple1<String>(" " + in)).print();
+env.execute();
+~~~

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/local_execution.md
----------------------------------------------------------------------
diff --git a/docs/apis/local_execution.md b/docs/apis/local_execution.md
new file mode 100644
index 0000000..dacd114
--- /dev/null
+++ b/docs/apis/local_execution.md
@@ -0,0 +1,123 @@
+---
+title:  "Local Execution"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+Flink can run on a single machine, even in a single Java Virtual Machine. This allows users to test and debug Flink programs locally. This section gives an overview of the local execution mechanisms.
+
+The local environments and executors allow you to run Flink programs in a local Java Virtual Machine, or with within any JVM as part of existing programs. Most examples can be launched locally by simply hitting the "Run" button of your IDE.
+
+There are two different kinds of local execution supported in Flink. The `LocalExecutionEnvironment` is starting the full Flink runtime, including a JobManager and a TaskManager. These include memory management and all the internal algorithms that are executed in the cluster mode.
+
+The `CollectionEnvironment` is executing the Flink program on Java collections. This mode will not start the full Flink runtime, so the execution is very low-overhead and lightweight. For example a `DataSet.map()`-transformation will be executed by applying the `map()` function to all elements in a Java list.
+
+* TOC
+{:toc}
+
+
+## Debugging
+
+If you are running Flink programs locally, you can also debug your program like any other Java program. You can either use `System.out.println()` to write out some internal variables or you can use the debugger. It is possible to set breakpoints within `map()`, `reduce()` and all the other methods.
+Please also refer to the [debugging section](programming_guide.html#debugging) in the Java API documentation for a guide to testing and local debugging utilities in the Java API.
+
+## Maven Dependency
+
+If you are developing your program in a Maven project, you have to add the `flink-clients` module using this dependency:
+
+~~~xml
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-clients</artifactId>
+  <version>{{site.version}}</version>
+</dependency>
+~~~
+
+## Local Environment
+
+The `LocalEnvironment` is a handle to local execution for Flink programs. Use it to run a program within a local JVM - standalone or embedded in other programs.
+
+The local environment is instantiated via the method `ExecutionEnvironment.createLocalEnvironment()`. By default, it will use as many local threads for execution as your machine has CPU cores (hardware contexts). You can alternatively specify the desired parallelism. The local environment can be configured to log to the console using `enableLogging()`/`disableLogging()`.
+
+In most cases, calling `ExecutionEnvironment.getExecutionEnvironment()` is the even better way to go. That method returns a `LocalEnvironment` when the program is started locally (outside the command line interface), and it returns a pre-configured environment for cluster execution, when the program is invoked by the [command line interface](cli.html).
+
+~~~java
+public static void main(String[] args) throws Exception {
+    ExecutionEnvironment env = ExecutionEnvironment.createLocalEnvironment();
+
+    DataSet<String> data = env.readTextFile("file:///path/to/file");
+
+    data
+        .filter(new FilterFunction<String>() {
+            public boolean filter(String value) {
+                return value.startsWith("http://");
+            }
+        })
+        .writeAsText("file:///path/to/result");
+
+    JobExecutionResult res = env.execute();
+}
+~~~
+
+The `JobExecutionResult` object, which is returned after the execution finished, contains the program runtime and the accumulator results.
+
+The `LocalEnvironment` allows also to pass custom configuration values to Flink.
+
+~~~java
+Configuration conf = new Configuration();
+conf.setFloat(ConfigConstants.TASK_MANAGER_MEMORY_FRACTION_KEY, 0.5f);
+final ExecutionEnvironment env = ExecutionEnvironment.createLocalEnvironment(conf);
+~~~
+
+*Note:* The local execution environments do not start any web frontend to monitor the execution.
+
+## Collection Environment
+
+The execution on Java Collections using the `CollectionEnvironment` is a low-overhead approach for executing Flink programs. Typical use-cases for this mode are automated tests, debugging and code re-use.
+
+Users can use algorithms implemented for batch processing also for cases that are more interactive. A slightly changed variant of a Flink program could be used in a Java Application Server for processing incoming requests.
+
+**Skeleton for Collection-based execution**
+
+~~~java
+public static void main(String[] args) throws Exception {
+    // initialize a new Collection-based execution environment
+    final ExecutionEnvironment env = new CollectionEnvironment();
+    
+    DataSet<User> users = env.fromCollection( /* get elements from a Java Collection */);
+
+    /* Data Set transformations ... */
+
+    // retrieve the resulting Tuple2 elements into a ArrayList.
+    Collection<...> result = new ArrayList<...>();
+    resultDataSet.output(new LocalCollectionOutputFormat<...>(result));
+    
+    // kick off execution.
+    env.execute();
+    
+    // Do some work with the resulting ArrayList (=Collection).
+    for(... t : result) {
+        System.err.println("Result = "+t);
+    }
+}
+~~~
+
+The `flink-java-examples` module contains a full example, called `CollectionExecutionExample`.
+
+Please note that the execution of the collection-based Flink programs is only possible on small data, which fits into the JVM heap. The execution on collections is not multi-threaded, only one thread is used.


[17/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/job_and_execution_graph.svg
----------------------------------------------------------------------
diff --git a/docs/img/job_and_execution_graph.svg b/docs/img/job_and_execution_graph.svg
deleted file mode 100644
index 2f90ea1..0000000
--- a/docs/img/job_and_execution_graph.svg
+++ /dev/null
@@ -1,851 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="860.40625"
-   height="541.0625"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.5 r10040">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.35"
-     inkscape:cx="430.20675"
-     inkscape:cy="270.53212"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1600"
-     inkscape:window-height="838"
-     inkscape:window-x="1912"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(55.206749,-261.8318)">
-    <g
-       id="g2989"
-       transform="translate(-78.581749,159.5193)">
-      <path
-         id="path2991"
-         d="m 336.57135,443.36045 c 0,-3.6384 2.96324,-6.60164 6.60164,-6.60164 l 500.22462,0 c 3.63841,0 6.60165,2.96324 6.60165,6.60164 l 0,26.36907 c 0,3.63841 -2.96324,6.56414 -6.60165,6.56414 l -500.22462,0 c -3.6384,0 -6.60164,-2.92573 -6.60164,-6.56414 z"
-         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path2993"
-         d="m 336.57135,443.36045 c 0,-3.6384 2.96324,-6.60164 6.60164,-6.60164 l 500.22462,0 c 3.63841,0 6.60165,2.96324 6.60165,6.60164 l 0,26.36907 c 0,3.63841 -2.96324,6.56414 -6.60165,6.56414 l -500.22462,0 c -3.6384,0 -6.60164,-2.92573 -6.60164,-6.56414 z"
-         style="fill:none;stroke:#ed7d31;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text2995"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="453.48053"
-         x="347.62067"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text2997"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="469.98465"
-         x="347.62067"
-         xml:space="preserve">Result</text>
-      <path
-         id="path2999"
-         d="m 336.57135,550.86223 c 0,-9.33982 7.57689,-16.8792 16.8792,-16.8792 l 479.6695,0 c 9.30232,0 16.87921,7.53938 16.87921,16.8792 l 0,67.51682 c 0,9.30232 -7.57689,16.87921 -16.87921,16.87921 l -479.6695,0 c -9.30231,0 -16.8792,-7.57689 -16.8792,-16.87921 z"
-         style="fill:#c5e0b4;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3001"
-         d="m 336.57135,550.86223 c 0,-9.33982 7.57689,-16.8792 16.8792,-16.8792 l 479.6695,0 c 9.30232,0 16.87921,7.53938 16.87921,16.8792 l 0,67.51682 c 0,9.30232 -7.57689,16.87921 -16.87921,16.87921 l -479.6695,0 c -9.30231,0 -16.8792,-7.57689 -16.8792,-16.87921 z"
-         style="fill:none;stroke:#548235;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3003"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="581.19519"
-         x="350.63596"
-         xml:space="preserve">Execution</text>
-      <text
-         id="text3005"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="599.19965"
-         x="350.63596"
-         xml:space="preserve">Job Vertex</text>
-      <path
-         id="path3007"
-         d="m 336.57135,345.1985 c 0,-9.33983 7.57689,-16.87921 16.91671,-16.87921 l 479.59448,0 c 9.33983,0 16.91672,7.53938 16.91672,16.87921 l 0,67.62935 c 0,9.33982 -7.57689,16.91671 -16.91672,16.91671 l -479.59448,0 c -9.33982,0 -16.91671,-7.57689 -16.91671,-16.91671 z"
-         style="fill:#c5e0b4;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3009"
-         d="m 336.57135,345.1985 c 0,-9.33983 7.57689,-16.87921 16.91671,-16.87921 l 479.59448,0 c 9.33983,0 16.91672,7.53938 16.91672,16.87921 l 0,67.62935 c 0,9.33982 -7.57689,16.91671 -16.91672,16.91671 l -479.59448,0 c -9.33982,0 -16.91671,-7.57689 -16.91671,-16.91671 z"
-         style="fill:none;stroke:#548235;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3011"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="375.60931"
-         x="350.63596"
-         xml:space="preserve">Execution</text>
-      <text
-         id="text3013"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="393.6138"
-         x="350.63596"
-         xml:space="preserve">Job Vertex</text>
-      <path
-         id="path3015"
-         d="m 336.57135,168.41696 c 0,-9.30232 7.57689,-16.87921 16.8792,-16.87921 l 479.6695,0 c 9.30232,0 16.87921,7.57689 16.87921,16.87921 l 0,67.51682 c 0,9.33982 -7.57689,16.8792 -16.87921,16.8792 l -479.6695,0 c -9.30231,0 -16.8792,-7.53938 -16.8792,-16.8792 z"
-         style="fill:#c5e0b4;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3017"
-         d="m 336.57135,168.41696 c 0,-9.30232 7.57689,-16.87921 16.8792,-16.87921 l 479.6695,0 c 9.30232,0 16.87921,7.57689 16.87921,16.87921 l 0,67.51682 c 0,9.33982 -7.57689,16.8792 -16.87921,16.8792 l -479.6695,0 c -9.30231,0 -16.8792,-7.53938 -16.8792,-16.8792 z"
-         style="fill:none;stroke:#548235;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3019"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="198.77649"
-         x="350.63596"
-         xml:space="preserve">Execution</text>
-      <text
-         id="text3021"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="216.78098"
-         x="350.63596"
-         xml:space="preserve">Job Vertex</text>
-      <path
-         id="path3023"
-         d="m 24.643639,116.76659 c 0,-7.31432 5.888967,-13.20329 13.16578,-13.20329 l 211.665231,0 c 7.27681,0 13.20329,5.88897 13.20329,13.20329 l 0,512.1901 c 0,7.27681 -5.92648,13.16578 -13.20329,13.16578 l -211.665231,0 c -7.276813,0 -13.16578,-5.88897 -13.16578,-13.16578 z"
-         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3025"
-         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="123.25767"
-         x="108.06521"
-         xml:space="preserve">JobGraph</text>
-      <path
-         id="path3027"
-         d="m 181.95783,550.29959 c 17.17928,17.14177 17.17928,44.9362 0,62.07797 -17.17928,17.17928 -45.04872,17.17928 -62.228,0 -17.17928,-17.14177 -17.17928,-44.9362 0,-62.07797 17.17928,-17.17928 45.04872,-17.17928 62.228,0"
-         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3029"
-         d="m 181.95783,550.29959 c 17.17928,17.14177 17.17928,44.9362 0,62.07797 -17.17928,17.17928 -45.04872,17.17928 -62.228,0 -17.17928,-17.14177 -17.17928,-44.9362 0,-62.07797 17.17928,-17.17928 45.04872,-17.17928 62.228,0"
-         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3031"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="578.25909"
-         x="119.9825"
-         xml:space="preserve">JobVertex</text>
-      <text
-         id="text3033"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="594.76318"
-         x="141.73792"
-         xml:space="preserve">(A)</text>
-      <path
-         id="path3035"
-         d="m 235.24923,198.02121 c 17.15115,17.17928 17.15115,45.02997 0,62.20924 -17.15115,17.18866 -44.95495,17.18866 -62.1061,0 -17.15114,-17.17927 -17.15114,-45.02996 0,-62.20924 17.15115,-17.18866 44.95495,-17.18866 62.1061,0"
-         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3037"
-         d="m 235.24923,198.02121 c 17.15115,17.17928 17.15115,45.02997 0,62.20924 -17.15115,17.18866 -44.95495,17.18866 -62.1061,0 -17.15114,-17.17927 -17.15114,-45.02996 0,-62.20924 17.15115,-17.18866 44.95495,-17.18866 62.1061,0"
-         style="fill:none;stroke:#85888d;stroke-width:2.50374866px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3039"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="226.05666"
-         x="173.28711"
-         xml:space="preserve">JobVertex</text>
-      <text
-         id="text3041"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="242.56078"
-         x="194.59242"
-         xml:space="preserve">(D)</text>
-      <path
-         id="path3043"
-         d="m 127.8506,390.07843 c 17.19804,17.14177 17.19804,44.95495 0,62.09672 -17.17928,17.16052 -45.029967,17.16052 -62.209247,0 -17.17928,-17.14177 -17.17928,-44.95495 0,-62.09672 17.17928,-17.16053 45.029967,-17.16053 62.209247,0"
-         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3045"
-         d="m 127.8506,390.07843 c 17.19804,17.14177 17.19804,44.95495 0,62.09672 -17.17928,17.16052 -45.029967,17.16052 -62.209247,0 -17.17928,-17.14177 -17.17928,-44.95495 0,-62.09672 17.17928,-17.16053 45.029967,-17.16053 62.209247,0"
-         style="fill:none;stroke:#85888d;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3047"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="418.08206"
-         x="65.897766"
-         xml:space="preserve">JobVertex</text>
-      <text
-         id="text3049"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="434.58615"
-         x="87.653183"
-         xml:space="preserve">(B)</text>
-      <path
-         id="path3051"
-         d="m 495.49844,554.70694 -16.84169,-20.29255 2.88821,-2.4006 16.82295,20.29255 -2.86947,2.4006 z m -18.52962,-16.44785 -2.85071,-12.26555 11.51537,5.08251 -8.66466,7.18304 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3053"
-         d="m 50.412559,493.43543 c 0,-2.982 2.419353,-5.4201 5.4201,-5.4201 l 75.900161,0 c 3.00075,0 5.4201,2.4381 5.4201,5.4201 l 0,21.6804 c 0,2.98199 -2.41935,5.4201 -5.4201,5.4201 l -75.900161,0 c -3.000747,0 -5.4201,-2.43811 -5.4201,-5.4201 z"
-         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3055"
-         d="m 50.412559,493.43543 c 0,-2.982 2.419353,-5.4201 5.4201,-5.4201 l 75.900161,0 c 3.00075,0 5.4201,2.4381 5.4201,5.4201 l 0,21.6804 c 0,2.98199 -2.41935,5.4201 -5.4201,5.4201 l -75.900161,0 c -3.000747,0 -5.4201,-2.43811 -5.4201,-5.4201 z"
-         style="fill:none;stroke:#ed7d31;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3057"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="501.16693"
-         x="55.542233"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text3059"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="517.67102"
-         x="66.945076"
-         xml:space="preserve">Data Set</text>
-      <path
-         id="path3061"
-         d="m 162.79056,493.43543 c 0,-2.982 2.41935,-5.4201 5.4201,-5.4201 l 75.90015,0 c 2.982,0 5.4201,2.4381 5.4201,5.4201 l 0,21.6804 c 0,2.98199 -2.4381,5.4201 -5.4201,5.4201 l -75.90015,0 c -3.00075,0 -5.4201,-2.43811 -5.4201,-5.4201 z"
-         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3063"
-         d="m 162.79056,493.43543 c 0,-2.982 2.41935,-5.4201 5.4201,-5.4201 l 75.90015,0 c 2.982,0 5.4201,2.4381 5.4201,5.4201 l 0,21.6804 c 0,2.98199 -2.4381,5.4201 -5.4201,5.4201 l -75.90015,0 c -3.00075,0 -5.4201,-2.43811 -5.4201,-5.4201 z"
-         style="fill:none;stroke:#ed7d31;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3065"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="501.16693"
-         x="167.96423"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text3067"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="517.67102"
-         x="179.36708"
-         xml:space="preserve">Data Set</text>
-      <path
-         id="path3069"
-         d="m 118.47326,152.2223 c 17.18866,17.17928 17.18866,45.03934 0,62.21862 -17.1699,17.17928 -45.029963,17.17928 -62.209243,0 -17.17928,-17.17928 -17.17928,-45.03934 0,-62.21862 17.17928,-17.17928 45.039343,-17.17928 62.209243,0"
-         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3071"
-         d="m 118.47326,152.2223 c 17.18866,17.17928 17.18866,45.03934 0,62.21862 -17.1699,17.17928 -45.029963,17.17928 -62.209243,0 -17.17928,-17.17928 -17.17928,-45.03934 0,-62.21862 17.17928,-17.17928 45.039343,-17.17928 62.209243,0"
-         style="fill:none;stroke:#85888d;stroke-width:2.50374866px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3073"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="180.25125"
-         x="56.508911"
-         xml:space="preserve">JobVertex</text>
-      <text
-         id="text3075"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="196.75536"
-         x="77.814217"
-         xml:space="preserve">(C)</text>
-      <path
-         id="path3077"
-         d="m 181.65776,551.49989 19.26104,-20.78017 -2.73818,-2.55064 -19.26105,20.78018 2.73819,2.55063 z m 20.74266,-16.86045 3.52588,-12.07801 -11.77793,4.42611 8.25205,7.6519 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3079"
-         d="m 95.57381,485.98982 0,-11.57163 -3.750935,0 0,11.57163 3.750935,0 z m 3.750934,-9.69616 -5.626401,-11.25281 -5.626402,11.25281 11.252803,0 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3081"
-         d="m 115.41625,326.10624 52.00671,-45.40506 -2.45686,-2.8132 -52.02546,45.40506 2.47561,2.8132 z m 53.05697,-41.3353 4.78244,-11.64665 -12.17178,3.16954 7.38934,8.47711 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3083"
-         d="m 217.64797,484.90205 0,-194.74852 -3.75093,0 0,194.74852 3.75093,0 z m 3.75094,-192.87305 -5.62641,-11.2528 -5.6264,11.2528 11.25281,0 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3085"
-         d="m 95.104943,321.88644 0.28132,-85.16497 -3.750934,-0.0188 -0.28132,85.18372 3.750934,0 z m 4.032255,-83.2895 -5.588893,-11.27156 -5.663911,11.23405 11.252804,0.0375 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3087"
-         d="m 55.101227,332.7829 c 0,-3.00074 2.419353,-5.4201 5.4201,-5.4201 l 75.750123,0 c 2.98199,0 5.4201,2.41936 5.4201,5.4201 l 0,21.66165 c 0,3.00075 -2.43811,5.4201 -5.4201,5.4201 l -75.750123,0 c -3.000747,0 -5.4201,-2.41935 -5.4201,-5.4201 z"
-         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3089"
-         d="m 55.101227,332.7829 c 0,-3.00074 2.419353,-5.4201 5.4201,-5.4201 l 75.750123,0 c 2.98199,0 5.4201,2.41936 5.4201,5.4201 l 0,21.66165 c 0,3.00075 -2.43811,5.4201 -5.4201,5.4201 l -75.750123,0 c -3.000747,0 -5.4201,-2.41935 -5.4201,-5.4201 z"
-         style="fill:none;stroke:#ed7d31;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3091"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="340.54807"
-         x="60.154701"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text3093"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="357.05219"
-         x="71.557541"
-         xml:space="preserve">Data Set</text>
-      <path
-         id="path3095"
-         d="m 326.59386,117.55429 c 0,-7.72693 6.26406,-13.99099 13.99099,-13.99099 l 527.94402,0 c 7.72693,0 13.99099,6.26406 13.99099,13.99099 l 0,510.6147 c 0,7.68942 -6.26406,13.95348 -13.99099,13.95348 l -527.94402,0 c -7.72693,0 -13.99099,-6.26406 -13.99099,-13.95348 z"
-         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3097"
-         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="123.49081"
-         x="546.51147"
-         xml:space="preserve">ExecutionGraph</text>
-      <path
-         id="path3099"
-         d="m 560.50214,552.51264 c 17.14177,17.17928 17.14177,45.01122 0,62.1905 -17.14178,17.17928 -44.97371,17.17928 -62.11548,0 -17.14177,-17.17928 -17.14177,-45.01122 0,-62.1905 17.14177,-17.21678 44.9737,-17.21678 62.11548,0"
-         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3101"
-         d="m 560.50214,552.51264 c 17.14177,17.17928 17.14177,45.01122 0,62.1905 -17.14178,17.17928 -44.97371,17.17928 -62.11548,0 -17.14177,-17.17928 -17.14177,-45.01122 0,-62.1905 17.14177,-17.21678 44.9737,-17.21678 62.11548,0"
-         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3103"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="572.29529"
-         x="499.31607"
-         xml:space="preserve">Execution</text>
-      <text
-         id="text3105"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="588.79938"
-         x="509.66867"
-         xml:space="preserve">Vertex</text>
-      <text
-         id="text3107"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="605.30347"
-         x="508.76843"
-         xml:space="preserve">A (0/2)</text>
-      <path
-         id="path3109"
-         d="m 766.16587,550.29959 c 17.17928,17.14177 17.17928,44.9362 0,62.07797 -17.17928,17.17928 -45.04872,17.17928 -62.228,0 -17.17928,-17.14177 -17.17928,-44.9362 0,-62.07797 17.17928,-17.17928 45.04872,-17.17928 62.228,0"
-         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3111"
-         d="m 766.16587,550.29959 c 17.17928,17.14177 17.17928,44.9362 0,62.07797 -17.17928,17.17928 -45.04872,17.17928 -62.228,0 -17.17928,-17.14177 -17.17928,-44.9362 0,-62.07797 17.17928,-17.17928 45.04872,-17.17928 62.228,0"
-         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3113"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="570.00702"
-         x="704.90192"
-         xml:space="preserve">Execution</text>
-      <text
-         id="text3115"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="586.51111"
-         x="715.25446"
-         xml:space="preserve">Vertex</text>
-      <text
-         id="text3117"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="603.01526"
-         x="714.35425"
-         xml:space="preserve">A (1/2)</text>
-      <path
-         id="path3119"
-         d="m 336.57135,494.29814 c 0,-3.45086 2.8132,-6.26406 6.30157,-6.26406 l 500.86228,0 c 3.45086,0 6.26406,2.8132 6.26406,6.26406 l 0,25.13126 c 0,3.45086 -2.8132,6.26406 -6.26406,6.26406 l -500.86228,0 c -3.48837,0 -6.30157,-2.8132 -6.30157,-6.26406 z"
-         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3121"
-         d="m 336.57135,494.29814 c 0,-3.45086 2.8132,-6.26406 6.30157,-6.26406 l 500.86228,0 c 3.45086,0 6.26406,2.8132 6.26406,6.26406 l 0,25.13126 c 0,3.45086 -2.8132,6.26406 -6.26406,6.26406 l -500.86228,0 c -3.48837,0 -6.30157,-2.8132 -6.30157,-6.26406 z"
-         style="fill:none;stroke:#ed7d31;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3123"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="503.78391"
-         x="347.53018"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text3125"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="520.28802"
-         x="347.53018"
-         xml:space="preserve">Result</text>
-      <path
-         id="path3127"
-         d="m 434.09564,496.3424 c 0,-2.79444 2.25056,-5.04501 5.04501,-5.04501 l 79.33226,0 c 2.7757,0 5.02626,2.25057 5.02626,5.04501 l 0,20.10501 c 0,2.77569 -2.25056,5.02625 -5.02626,5.02625 l -79.33226,0 c -2.79445,0 -5.04501,-2.25056 -5.04501,-5.02625 z"
-         style="fill:#fbe5d6;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3129"
-         d="m 434.09564,496.3424 c 0,-2.79444 2.25056,-5.04501 5.04501,-5.04501 l 79.33226,0 c 2.7757,0 5.02626,2.25057 5.02626,5.04501 l 0,20.10501 c 0,2.77569 -2.25056,5.02625 -5.02626,5.02625 l -79.33226,0 c -2.79445,0 -5.04501,-2.25056 -5.04501,-5.02625 z"
-         style="fill:none;stroke:#843c0c;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3131"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="503.60291"
-         x="444.14053"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text3133"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="518.60663"
-         x="436.7887"
-         xml:space="preserve">Result</text>
-      <text
-         id="text3135"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="518.60663"
-         x="475.49835"
-         xml:space="preserve">Partition</text>
-      <path
-         id="path3137"
-         d="m 631.65736,496.36116 c 0,-2.8132 2.25056,-5.06377 5.02625,-5.06377 l 79.33227,0 c 2.77569,0 5.02625,2.25057 5.02625,5.06377 l 0,20.105 c 0,2.7757 -2.25056,5.02626 -5.02625,5.02626 l -79.33227,0 c -2.77569,0 -5.02625,-2.25056 -5.02625,-5.02626 z"
-         style="fill:#fbe5d6;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3139"
-         d="m 631.65736,496.36116 c 0,-2.8132 2.25056,-5.06377 5.02625,-5.06377 l 79.33227,0 c 2.77569,0 5.02625,2.25057 5.02625,5.06377 l 0,20.105 c 0,2.7757 -2.25056,5.02626 -5.02625,5.02626 l -79.33227,0 c -2.77569,0 -5.02625,-2.25056 -5.02625,-5.02626 z"
-         style="fill:none;stroke:#843c0c;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3141"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="503.60291"
-         x="641.72223"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text3143"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="518.60663"
-         x="634.37042"
-         xml:space="preserve">Result</text>
-      <text
-         id="text3145"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="518.60663"
-         x="673.08008"
-         xml:space="preserve">Partition</text>
-      <path
-         id="path3147"
-         d="m 116.78534,552.36261 -16.71041,-20.42384 2.90698,-2.36309 16.71041,20.40508 -2.90698,2.38185 z m -18.417084,-16.59789 -2.794446,-12.26555 11.49661,5.13878 -8.702164,7.12677 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3149"
-         d="m 506.09483,345.06721 c 17.16053,17.14178 17.16053,44.95495 0,62.09672 -17.14177,17.16053 -44.95495,17.16053 -62.09672,0 -17.16052,-17.14177 -17.16052,-44.95494 0,-62.09672 17.14177,-17.16052 44.95495,-17.16052 62.09672,0"
-         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3151"
-         d="m 506.09483,345.06721 c 17.16053,17.14178 17.16053,44.95495 0,62.09672 -17.14177,17.16053 -44.95495,17.16053 -62.09672,0 -17.16052,-17.14177 -17.16052,-44.95494 0,-62.09672 17.14177,-17.16052 44.95495,-17.16052 62.09672,0"
-         style="fill:none;stroke:#85888d;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3153"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="364.74869"
-         x="444.95163"
-         xml:space="preserve">Execution</text>
-      <text
-         id="text3155"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="381.25281"
-         x="455.3042"
-         xml:space="preserve">Vertex</text>
-      <text
-         id="text3157"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="397.75693"
-         x="454.40399"
-         xml:space="preserve">B (0/2)</text>
-      <path
-         id="path3159"
-         d="m 702.24995,347.56159 c 17.14177,17.17928 17.14177,44.9737 0,62.11547 -17.14177,17.14177 -44.9362,17.14177 -62.11548,0 -17.14177,-17.14177 -17.14177,-44.93619 0,-62.11547 17.17928,-17.14177 44.97371,-17.14177 62.11548,0"
-         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3161"
-         d="m 702.24995,347.56159 c 17.14177,17.17928 17.14177,44.9737 0,62.11547 -17.14177,17.14177 -44.9362,17.14177 -62.11548,0 -17.14177,-17.14177 -17.14177,-44.93619 0,-62.11547 17.17928,-17.14177 44.97371,-17.14177 62.11548,0"
-         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3163"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="367.29498"
-         x="641.09949"
-         xml:space="preserve">Execution</text>
-      <text
-         id="text3165"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="383.7991"
-         x="651.45203"
-         xml:space="preserve">Vertex</text>
-      <text
-         id="text3167"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="400.30319"
-         x="650.55182"
-         xml:space="preserve">B (1/2)</text>
-      <path
-         id="path3169"
-         d="m 551.10604,540.0783 14.4411,-53.91969 -3.61965,-0.97524 -14.4411,53.93844 3.61965,0.95649 z m 17.59189,-51.14399 -2.53188,-12.32182 -8.34583,9.41484 10.87771,2.90698 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3171"
-         d="m 770.55446,543.36036 14.4411,-53.90092 -3.6384,-0.97525 -14.4411,53.93844 3.6384,0.93773 z m 17.59189,-51.12523 -2.55064,-12.34058 -8.32707,9.41485 10.87771,2.92573 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3173"
-         d="m 694.448,553.30034 -16.84169,-20.44259 2.88822,-2.36309 16.84169,20.40508 -2.88822,2.4006 z m -18.56712,-16.57913 -2.8132,-12.26555 11.51537,5.10127 -8.70217,7.16428 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3175"
-         d="m 336.57135,275.50614 c 0,-3.63841 2.96324,-6.60165 6.60164,-6.60165 l 500.22462,0 c 3.63841,0 6.60165,2.96324 6.60165,6.60165 l 0,26.36906 c 0,3.63841 -2.96324,6.56414 -6.60165,6.56414 l -500.22462,0 c -3.6384,0 -6.60164,-2.92573 -6.60164,-6.56414 z"
-         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3177"
-         d="m 336.57135,275.50614 c 0,-3.63841 2.96324,-6.60165 6.60164,-6.60165 l 500.22462,0 c 3.63841,0 6.60165,2.96324 6.60165,6.60165 l 0,26.36906 c 0,3.63841 -2.96324,6.56414 -6.60165,6.56414 l -500.22462,0 c -3.6384,0 -6.60164,-2.92573 -6.60164,-6.56414 z"
-         style="fill:none;stroke:#ed7d31;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3179"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="285.63223"
-         x="347.62067"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text3181"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="302.13635"
-         x="347.62067"
-         xml:space="preserve">Result</text>
-      <path
-         id="path3183"
-         d="m 628.39405,278.76945 c 0,-2.77569 2.25056,-5.02625 5.02625,-5.02625 l 79.4823,0 c 2.77569,0 5.02625,2.25056 5.02625,5.02625 l 0,20.14252 c 0,2.77569 -2.25056,5.02625 -5.02625,5.02625 l -79.4823,0 c -2.77569,0 -5.02625,-2.25056 -5.02625,-5.02625 z"
-         style="fill:#fbe5d6;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3185"
-         d="m 628.39405,278.76945 c 0,-2.77569 2.25056,-5.02625 5.02625,-5.02625 l 79.4823,0 c 2.77569,0 5.02625,2.25056 5.02625,5.02625 l 0,20.14252 c 0,2.77569 -2.25056,5.02625 -5.02625,5.02625 l -79.4823,0 c -2.77569,0 -5.02625,-2.25056 -5.02625,-5.02625 z"
-         style="fill:none;stroke:#843c0c;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3187"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="286.06693"
-         x="638.53546"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text3189"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="301.07068"
-         x="631.18365"
-         xml:space="preserve">Result</text>
-      <text
-         id="text3191"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="301.07068"
-         x="669.89331"
-         xml:space="preserve">Partition</text>
-      <path
-         id="path3193"
-         d="m 430.34471,278.7882 c 0,-2.79444 2.25056,-5.045 5.04501,-5.045 l 79.33226,0 c 2.77569,0 5.02625,2.25056 5.02625,5.045 l 0,20.10501 c 0,2.77569 -2.25056,5.02625 -5.02625,5.02625 l -79.33226,0 c -2.79445,0 -5.04501,-2.25056 -5.04501,-5.02625 z"
-         style="fill:#fbe5d6;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3195"
-         d="m 430.34471,278.7882 c 0,-2.79444 2.25056,-5.045 5.04501,-5.045 l 79.33226,0 c 2.77569,0 5.02625,2.25056 5.02625,5.045 l 0,20.10501 c 0,2.77569 -2.25056,5.02625 -5.02625,5.02625 l -79.33226,0 c -2.79445,0 -5.04501,-2.25056 -5.04501,-5.02625 z"
-         style="fill:none;stroke:#843c0c;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3197"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="286.06693"
-         x="440.48862"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text3199"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="301.07068"
-         x="433.13678"
-         xml:space="preserve">Result</text>
-      <text
-         id="text3201"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="301.07068"
-         x="471.84641"
-         xml:space="preserve">Partition</text>
-      <path
-         id="path3203"
-         d="m 475.99358,326.25628 0,-8.73968 -3.75093,0 0,8.73968 3.75093,0 z m 3.75094,-6.86421 -5.62641,-11.2528 -5.6264,11.2528 11.25281,0 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3205"
-         d="m 674.94315,327.38156 0,-9.86496 -3.75094,0 0,9.86496 3.75094,0 z m 3.75093,-7.98949 -5.6264,-11.2528 -5.6264,11.2528 11.2528,0 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3207"
-         d="m 458.64551,268.60442 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.62641 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.6264 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.62641 0,-2.8132 2.8132,-0.0187 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0187 z m -0.0375,-5.6264 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.81321,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.6264 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.
 0188 z m -0.0188,-5.62641 -0.0188,-2.8132 2.8132,-0.0187 0.0188,2.8132 -2.8132,0.0187 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.6264 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.6264 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0188,-5.62641 -0.0188,-2.8132 2.8132,-0.0187 0.0188,2.8132 -2.8132,0.0187 z m -0.0375,-5.6264 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0187 0.0188,2.8132 -2.81321,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.6264 0,-0.16879 2.8132,0 0,0.15003 -2.8132,0.0188 z m -2.79445,1.25656 4.16354,-8.45836 4.27607,8.42085 -8.43961,0.0375 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3209"
-         d="m 654.16297,263.76571 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.6264 -0.0375,-2.8132 2.77569,-0.0375 0.075,2.8132 -2.8132,0.0375 z m -0.11253,-5.6264 -0.0375,-2.81321 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.62641 -0.0375,-2.8132 2.81321,-0.0375 0.0375,2.8132 -2.81321,0.0375 z m -0.075,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.6264 -0.075,-2.8132 2.8132,-0.0375 0.075,2.8132 -2.8132,0.0375 z m -0.11253,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.58889 -0.0375,-2.8132 2.8132,-0.075 0.0375,2.8132 -2.8132,0.075 z m -0.075,-5.62641 -0.0375,-2.8132 2.8132,-0.075 0.0375,2.8132 -2.8132,0.075 z m -0.075,-5.6264 -0.075,-2.8132 2.8132,-0.075 0.075,2.8132 -2.8132,0.075 z m -0.11253,-5.6264 -0.0375,-2.8132 2.8132,-0.075 0.0375,2.8132 -2.81321,0.075 z m -0.075,-5.6264 -0.0375,-2.813
 2 2.8132,-0.075 0.0375,2.8132 -2.8132,0.075 z m -0.075,-5.6264 -0.0375,-2.8132 2.8132,-0.075 0.0375,2.8132 -2.8132,0.075 z m -0.075,-5.6264 -0.075,-2.8132 2.8132,-0.075 0.075,2.8132 -2.8132,0.075 z m -0.11253,-5.62641 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.7757 -2.8132,0.075 z m -0.075,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.6264 -0.075,-2.8132 2.8132,-0.0375 0.075,2.8132 -2.81321,0.0375 z m -0.11252,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -2.85071,-3.75094 4.08852,-8.47711 4.35108,8.36458 -8.4396,0.11253 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3211"
-         d="m 607.35131,168.64201 c 17.17928,17.14177 17.17928,44.9362 0,62.07797 -17.17928,17.17928 -45.01122,17.17928 -62.1905,0 -17.17928,-17.14177 -17.17928,-44.9362 0,-62.07797 17.17928,-17.17928 45.01122,-17.17928 62.1905,0"
-         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3213"
-         d="m 607.35131,168.64201 c 17.17928,17.14177 17.17928,44.9362 0,62.07797 -17.17928,17.17928 -45.01122,17.17928 -62.1905,0 -17.17928,-17.14177 -17.17928,-44.9362 0,-62.07797 17.17928,-17.17928 45.01122,-17.17928 62.1905,0"
-         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3215"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="188.31085"
-         x="546.13019"
-         xml:space="preserve">Execution</text>
-      <text
-         id="text3217"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="204.81496"
-         x="556.48279"
-         xml:space="preserve">Vertex</text>
-      <text
-         id="text3219"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="221.31908"
-         x="555.13245"
-         xml:space="preserve">D (0/2)</text>
-      <path
-         id="path3221"
-         d="m 803.48767,171.11763 c 17.21679,17.14177 17.21679,44.9737 0,62.11547 -17.17928,17.14177 -45.01121,17.14177 -62.19049,0 -17.17928,-17.14177 -17.17928,-44.9737 0,-62.11547 17.17928,-17.14177 45.01121,-17.14177 62.19049,0"
-         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3223"
-         d="m 803.48767,171.11763 c 17.21679,17.14177 17.21679,44.9737 0,62.11547 -17.17928,17.14177 -45.01121,17.14177 -62.19049,0 -17.17928,-17.14177 -17.17928,-44.9737 0,-62.11547 17.17928,-17.14177 45.01121,-17.14177 62.19049,0"
-         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3225"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="190.85715"
-         x="742.27802"
-         xml:space="preserve">Execution</text>
-      <text
-         id="text3227"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="207.36125"
-         x="752.63055"
-         xml:space="preserve">Vertex</text>
-      <text
-         id="text3229"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="223.86537"
-         x="751.28021"
-         xml:space="preserve">D (1/2)</text>
-      <path
-         id="path3231"
-         d="m 789.04657,432.7078 -0.60015,-173.63076 3.75094,0 0.60015,173.63076 -3.75094,0 z m -4.35108,-171.75529 5.58889,-11.2528 5.66391,11.21529 -11.2528,0.0375 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3233"
-         d="m 580.85095,432.7078 -0.43135,-173.64951 3.75093,0 0.43136,173.63075 -3.75094,0.0188 z m -4.18229,-171.75529 5.58889,-11.27156 5.66392,11.23405 -11.25281,0.0375 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3235"
-         d="m 491.55996,267.1228 46.5491,-24.39983 -1.74419,-3.31958 -46.54909,24.39983 1.74418,3.31958 z m 46.62412,-20.19879 7.35183,-10.22129 -12.58439,0.24381 5.23256,9.97748 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3237"
-         d="m 685.37074,265.41612 46.51159,-24.26854 -1.72543,-3.30083 -46.5491,24.23104 1.76294,3.33833 z m 46.58661,-20.0675 7.38934,-10.20254 -12.56563,0.22506 5.17629,9.97748 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3239"
-         d="m 275.46863,368.81063 19.93621,0 0,-24.26855 19.91746,48.5371 -19.91746,48.51833 0,-24.24979 -19.93621,0 z"
-         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3241"
-         d="m 275.46863,368.81063 19.93621,0 0,-24.26855 19.91746,48.5371 -19.91746,48.51833 0,-24.24979 -19.93621,0 z"
-         style="fill:none;stroke:#000000;stroke-width:1.25656307px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3243"
-         d="m 487.6965,488.55921 157.72679,-54.01345 -1.2003,-3.56339 -157.72679,54.01345 1.2003,3.56339 z m 157.16415,-49.84992 8.85221,-8.96473 -12.49062,-1.68792 3.63841,10.65265 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3245"
-         d="m 657.95141,488.70925 -164.14089,-55.88892 1.2003,-3.56339 164.14089,55.88892 -1.2003,3.56339 z m -163.57825,-51.72539 -8.8522,-8.96473 12.49061,-1.68792 -3.63841,10.65265 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3247"
-         d="m 518.19159,446.64252 c 0,-2.79445 2.25057,-5.04501 5.02626,-5.04501 l 79.33226,0 c 2.77569,0 5.02625,2.25056 5.02625,5.04501 l 0,20.10501 c 0,2.77569 -2.25056,5.02625 -5.02625,5.02625 l -79.33226,0 c -2.77569,0 -5.02626,-2.25056 -5.02626,-5.02625 z"
-         style="fill:#fbe5d6;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3249"
-         d="m 518.19159,446.66127 c 0,-2.8132 2.25057,-5.06376 5.02626,-5.06376 l 79.33226,0 c 2.77569,0 5.02625,2.25056 5.02625,5.06376 l 0,20.10501 c 0,2.77569 -2.25056,5.02626 -5.02625,5.02626 l -79.33226,0 c -2.77569,0 -5.02626,-2.25057 -5.02626,-5.02626 z"
-         style="fill:none;stroke:#843c0c;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3251"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="453.91522"
-         x="528.3172"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text3253"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="468.91898"
-         x="520.96539"
-         xml:space="preserve">Result</text>
-      <text
-         id="text3255"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="468.91898"
-         x="559.67505"
-         xml:space="preserve">Partition</text>
-      <path
-         id="path3257"
-         d="m 746.2109,446.66127 c 0,-2.8132 2.25056,-5.06376 5.02625,-5.06376 l 79.36978,0 c 2.77569,0 5.02625,2.25056 5.02625,5.06376 l 0,20.10501 c 0,2.77569 -2.25056,5.02626 -5.02625,5.02626 l -79.36978,0 c -2.77569,0 -5.02625,-2.25057 -5.02625,-5.02626 z"
-         style="fill:#fbe5d6;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3259"
-         d="m 746.2109,446.66127 c 0,-2.8132 2.25056,-5.06376 5.02625,-5.06376 l 79.36978,0 c 2.77569,0 5.02625,2.25056 5.02625,5.06376 l 0,20.10501 c 0,2.77569 -2.25056,5.02626 -5.02625,5.02626 l -79.36978,0 c -2.77569,0 -5.02625,-2.25057 -5.02625,-5.02626 z"
-         style="fill:none;stroke:#843c0c;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3261"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="453.91522"
-         x="756.29614"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text3263"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="468.91898"
-         x="748.94434"
-         xml:space="preserve">Result</text>
-      <text
-         id="text3265"
-         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="468.91898"
-         x="787.65393"
-         xml:space="preserve">Partition</text>
-      <path
-         id="path3267"
-         d="m 463.63425,485.7085 -0.78769,-54.38855 3.75093,-0.0563 0.7877,54.38855 -3.75094,0.0563 z m -4.51987,-52.45682 5.45761,-11.34657 5.79519,11.17778 -11.2528,0.16879 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3269"
-         d="m 678.54404,488.03408 0,-54.08847 -3.75093,0 0,54.08847 3.75093,0 z m 3.75094,-52.21301 -5.6264,-11.2528 -5.62641,11.2528 11.25281,0 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3271"
-         d="m 96.98041,377.21272 0,-7.8207 3.75093,0 0,7.8207 -3.75093,0 z m -3.750934,-5.94523 5.626401,-11.2528 5.626403,11.2528 -11.252804,0 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-    </g>
-  </g>
-</svg>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/license.txt
----------------------------------------------------------------------
diff --git a/docs/img/license.txt b/docs/img/license.txt
deleted file mode 100644
index 35b8673..0000000
--- a/docs/img/license.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-All image files in the folder and its subfolders are
-licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/logo.png
----------------------------------------------------------------------
diff --git a/docs/img/logo.png b/docs/img/logo.png
deleted file mode 100644
index 8a7996d..0000000
Binary files a/docs/img/logo.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/overview-stack-0.9.png
----------------------------------------------------------------------
diff --git a/docs/img/overview-stack-0.9.png b/docs/img/overview-stack-0.9.png
deleted file mode 100644
index 70b775a..0000000
Binary files a/docs/img/overview-stack-0.9.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/plan_visualizer.png
----------------------------------------------------------------------
diff --git a/docs/img/plan_visualizer.png b/docs/img/plan_visualizer.png
deleted file mode 100644
index 85b8c55..0000000
Binary files a/docs/img/plan_visualizer.png and /dev/null differ


[19/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/ClientJmTm.svg
----------------------------------------------------------------------
diff --git a/docs/img/ClientJmTm.svg b/docs/img/ClientJmTm.svg
deleted file mode 100644
index b158b7d..0000000
--- a/docs/img/ClientJmTm.svg
+++ /dev/null
@@ -1,348 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="817.49274"
-   height="463.47787"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.5 r10040">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.7"
-     inkscape:cx="118.68649"
-     inkscape:cy="265.49231"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1600"
-     inkscape:window-height="838"
-     inkscape:window-x="1912"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(0.17493185,-2.7660971)">
-    <g
-       id="g2989"
-       transform="translate(-24.016809,-116.88402)">
-      <path
-         id="path2991"
-         d="m 400.33723,121.08016 0,124.38099 248.19934,0 0,-124.38099 -248.19934,0 z"
-         style="fill:#f2dcdb;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path2993"
-         d="m 400.33723,121.08016 248.19934,0 0,124.38099 -248.19934,0 z"
-         style="fill:none;stroke:#000000;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text2995"
-         style="font-size:22.5056076px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="162.61018"
-         x="447.93558"
-         xml:space="preserve">JobManager</text>
-      <path
-         id="path2997"
-         d="m 40.510092,137.88435 164.103378,0 0,37.75316 163.46573,0 0,-12.58439 25.16877,25.16877 -25.16877,25.16877 0,-12.58438 -163.46573,0 0,37.75315 -164.103378,0 z"
-         style="fill:#b9cde5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path2999"
-         d="m 40.510092,137.88435 164.103378,0 0,37.75316 163.46573,0 0,-12.58439 25.16877,25.16877 -25.16877,25.16877 0,-12.58438 -163.46573,0 0,37.75315 -164.103378,0 z"
-         style="fill:none;stroke:#000000;stroke-width:2.55063534px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3001"
-         d="m 55.288774,144.86109 0,36.45908 132.483006,0 0,-36.45908 -132.483006,0 z"
-         style="fill:#b9cde5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3003"
-         style="font-size:22.5056076px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="171.84125"
-         x="85.103935"
-         xml:space="preserve">Client</text>
-      <path
-         id="path3005"
-         d="m 24.46547,120.27371 42.507465,0 0,42.46058 -7.079889,7.07989 -35.427576,0 z"
-         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3007"
-         d="m 59.893046,169.81418 1.415978,-5.66391 5.663911,-1.41598 z"
-         style="fill:#cdcdcd;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3009"
-         d="m 59.893046,169.81418 1.415978,-5.66391 5.663911,-1.41598 -7.079889,7.07989 -35.427576,0 0,-49.54047 42.507465,0 0,42.46058"
-         style="fill:none;stroke:#000000;stroke-width:1.24718571px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3011"
-         d="m 29.78242,124.80297 26.584747,0"
-         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3013"
-         d="m 29.78242,129.18218 31.901697,0"
-         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3015"
-         d="m 29.78242,133.71144 21.267798,0"
-         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3017"
-         d="m 29.78242,138.24069 31.901697,0"
-         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3019"
-         d="m 29.78242,142.77932 31.901697,0"
-         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3021"
-         d="m 29.78242,147.30857 13.287685,0"
-         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3023"
-         d="m 29.78242,151.83783 26.556615,0"
-         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3025"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="229.55898"
-         x="239.21106"
-         xml:space="preserve">Submit Job</text>
-      <text
-         id="text3027"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="206.73724"
-         x="78.214714"
-         xml:space="preserve">Compiler/</text>
-      <text
-         id="text3029"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="227.74248"
-         x="78.814865"
-         xml:space="preserve">Optimizer</text>
-      <text
-         id="text3031"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="206.94733"
-         x="473.13199"
-         xml:space="preserve">Scheduling,</text>
-      <text
-         id="text3033"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="227.95258"
-         x="424.21982"
-         xml:space="preserve">Resource Management</text>
-      <path
-         id="path3035"
-         d="m 591.89746,422.65529 0,124.38099 248.16182,0 0,-124.38099 -248.16182,0 z"
-         style="fill:#d7e4bd;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3037"
-         d="m 591.89746,422.65529 248.16182,0 0,124.38099 -248.16182,0 z"
-         style="fill:none;stroke:#000000;stroke-width:2.55063534px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3039"
-         d="m 621.82991,437.28394 0,36.30904 187.99684,0 0,-36.30904 -187.99684,0 z"
-         style="fill:#d7e4bd;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3041"
-         style="font-size:22.5056076px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="464.15421"
-         x="631.76624"
-         xml:space="preserve">TaskManager</text>
-      <path
-         id="path3043"
-         d="m 177.34418,422.65529 0,124.38099 248.16182,0 0,-124.38099 -248.16182,0 z"
-         style="fill:#d7e4bd;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3045"
-         d="m 177.34418,422.65529 248.16182,0 0,124.38099 -248.16182,0 z"
-         style="fill:none;stroke:#000000;stroke-width:2.55063534px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3047"
-         d="m 207.42668,437.28394 0,36.30904 187.84679,0 0,-36.30904 -187.84679,0 z"
-         style="fill:#d7e4bd;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3049"
-         style="font-size:22.5056076px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="464.15421"
-         x="217.23552"
-         xml:space="preserve">TaskManager</text>
-      <path
-         id="path3051"
-         d="m 416.89761,258.47689 -147.58052,146.38022 3.95724,3.99475 147.58052,-146.38022 z m -143.26694,128.76958 -6.30157,23.53712 23.59338,-6.11403 c 1.50037,-0.37509 2.40059,-1.91297 2.0255,-3.41335 -0.39385,-1.51913 -1.93173,-2.41935 -3.4321,-2.0255 l -18.92347,4.89497 3.43211,3.45086 5.045,-18.8672 c 0.39385,-1.51913 -0.48762,-3.05701 -1.98799,-3.45086 -1.50038,-0.41261 -3.05701,0.48762 -3.45086,1.98799 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3053"
-         d="m 612.90269,257.57667 140.0974,144.26094 -4.05101,3.93848 -140.0974,-144.26094 z m 136.12141,126.59404 5.85146,23.63088 -23.48085,-6.52662 c -1.50038,-0.45011 -2.36309,-1.988 -1.95049,-3.48837 0.41261,-1.50038 1.95049,-2.36309 3.45086,-1.95049 l 18.82969,5.25131 -3.48837,3.37584 -4.68866,-18.94222 c -0.3751,-1.53788 0.56264,-3.03825 2.06301,-3.41335 1.50037,-0.37509 3.03826,0.52513 3.41335,2.06302 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3055"
-         d="m 320.29229,409.69582 134.95862,-137.19043 -4.0135,-3.93848 -134.93986,137.19042 z m 130.85135,-119.52353 6.0015,-23.61213 -23.49961,6.39534 c -1.50037,0.39385 -2.38184,1.95049 -1.96924,3.45086 0.39385,1.50037 1.95049,2.38184 3.45086,1.96924 l 18.84845,-5.12003 -3.46962,-3.41335 -4.80119,18.94222 c -0.39385,1.50038 0.52513,3.03826 2.0255,3.41335 1.50037,0.3751 3.03826,-0.52513 3.41335,-2.0255 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3057"
-         d="m 713.84034,414.29071 -141.48525,-148.76206 4.08852,-3.90097 141.48524,148.79957 z m -137.69681,-131.05765 -5.58889,-23.70591 23.40583,6.7892 c 1.46286,0.45011 2.32558,1.98799 1.91298,3.48837 -0.45012,1.50037 -1.988,2.36308 -3.48837,1.91297 l -18.79218,-5.43885 3.52587,-3.33833 4.50113,19.01723 c 0.37509,1.50038 -0.56264,3.00075 -2.10053,3.37584 -1.50037,0.33759 -3.00074,-0.60015 -3.37584,-2.10052 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3059"
-         d="m 294.48586,342.57284 c 0.95649,1.01276 1.61291,2.21305 1.95049,3.6009 0.35634,1.38785 0.31883,2.75694 -0.11253,4.08852 -0.26256,0.8252 -0.63766,1.53788 -1.10652,2.1943 -0.48763,0.63765 -1.08777,1.29407 -1.80045,1.98799 l -2.49437,2.38184 -6.67667,-11.27155 2.15679,-2.04426 c 0.67517,-0.63766 1.33158,-1.18155 1.96924,-1.6129 0.63766,-0.43136 1.33158,-0.71268 2.08177,-0.84396 0.73143,-0.13129 1.42535,-0.0563 2.10052,0.18754 0.69393,0.26257 1.33158,0.69392 1.93173,1.33158 z m -1.2003,1.33159 c -0.45011,-0.46887 -0.91897,-0.7877 -1.4066,-0.97525 -0.50637,-0.18754 -1.01275,-0.22505 -1.57539,-0.13128 -0.54388,0.0938 -1.05026,0.28132 -1.50037,0.58139 -0.46887,0.28132 -0.97524,0.69393 -1.55664,1.25657 l -1.03151,0.97524 5.19505,8.8147 1.29407,-1.21906 c 0.58139,-0.56264 1.06902,-1.12528 1.44411,-1.66916 0.37509,-0.52513 0.65641,-1.12528 0.84396,-1.74419 0.30007,-1.01275 0.28132,-2.04426 -0.0563,-3.09452 -0.33759,-1.05026 -0.88147,-1.98799 -1.65042,-2.79444 z m 8.90847,-5.87022 
 c -0.0938,-0.13128 -0.16879,-0.24381 -0.24381,-0.33758 -0.0563,-0.0938 -0.15003,-0.18755 -0.24381,-0.28132 -0.4126,-0.45011 -0.86271,-0.67517 -1.35033,-0.69392 -0.46887,-0.0188 -0.97525,0.22505 -1.51913,0.73143 -0.5814,0.56264 -0.93774,1.23781 -1.05026,2.04426 -0.0938,0.78769 0.0563,1.55664 0.45011,2.30682 z m 1.85672,6.60165 c -0.97525,0.91898 -1.93173,1.4066 -2.90698,1.48162 -0.97524,0.075 -1.87546,-0.33759 -2.70067,-1.2003 -1.21905,-1.27532 -1.85671,-2.73818 -1.91298,-4.42611 -0.0563,-1.66916 0.50638,-3.05701 1.68792,-4.18229 0.7877,-0.75018 1.5754,-1.12528 2.36309,-1.14403 0.7877,0 1.51913,0.35634 2.1943,1.06901 0.11253,0.11253 0.28132,0.33759 0.50638,0.63766 0.22505,0.30008 0.45011,0.65642 0.71267,1.08777 l -5.10127,4.87622 c 0.0938,0.13128 0.18755,0.26256 0.28132,0.39385 0.0938,0.13128 0.18755,0.24381 0.28132,0.33758 0.56264,0.5814 1.18155,0.88147 1.85671,0.86272 0.67517,0 1.33159,-0.31883 1.988,-0.93774 0.45011,-0.43136 0.84396,-0.95649 1.14403,-1.59414 0.31883,-0.63766 0.525
 14,-1.23781 0.63766,-1.76294 l 0.075,-0.075 0.95649,1.51913 c -0.15004,0.26256 -0.26256,0.50637 -0.37509,0.73143 -0.11253,0.22505 -0.26257,0.48762 -0.45011,0.78769 -0.20631,0.30008 -0.3751,0.56264 -0.54389,0.7877 -0.16879,0.22506 -0.4126,0.46887 -0.69392,0.75019 z m 6.69541,-15.71642 c 0.65642,0.67517 1.16279,1.42536 1.51913,2.23181 0.3751,0.80645 0.5814,1.59415 0.61891,2.34433 0.0563,0.7877 -0.0188,1.51913 -0.26257,2.21305 -0.22505,0.71268 -0.6189,1.31283 -1.14403,1.81921 -0.3751,0.35634 -0.75019,0.63766 -1.14404,0.84396 -0.39385,0.2063 -0.80645,0.35634 -1.21905,0.45011 l 2.11928,3.56339 -1.18155,1.10652 -6.8267,-11.59039 1.16279,-1.10652 0.52513,0.88147 c 0.13128,-0.63766 0.30008,-1.21905 0.50638,-1.74419 0.2063,-0.52513 0.54388,-0.99399 0.994,-1.42535 0.67516,-0.63766 1.38784,-0.91898 2.13803,-0.84396 0.75018,0.075 1.48162,0.50638 2.19429,1.25656 z m -1.01275,1.38785 c -0.46886,-0.48762 -0.93773,-0.76894 -1.4066,-0.84396 -0.46886,-0.0563 -0.93773,0.13128 -1.4066,0.58139 -0.33758,
 0.33759 -0.6189,0.75019 -0.8252,1.27532 -0.20631,0.52513 -0.35634,1.03151 -0.48763,1.55664 l 2.83196,4.80119 c 0.4126,-0.11252 0.76894,-0.24381 1.08777,-0.4126 0.30008,-0.16879 0.63766,-0.4126 0.994,-0.73143 0.4126,-0.4126 0.71268,-0.88147 0.84396,-1.4066 0.15004,-0.54389 0.16879,-1.06902 0.075,-1.6129 -0.0938,-0.5814 -0.28132,-1.14404 -0.56264,-1.66917 -0.30008,-0.54388 -0.67517,-1.05026 -1.14404,-1.53788 z m 0.63766,-10.39009 6.95798,11.77793 -1.16279,1.10653 -6.95798,-11.77793 z m 11.81544,-1.38785 c 0.5814,0.63766 1.05027,1.31283 1.40661,2.06302 0.35633,0.75018 0.56264,1.51913 0.6189,2.26931 0.0563,0.76894 -0.0375,1.51913 -0.28132,2.21305 -0.22506,0.69393 -0.65641,1.33159 -1.29407,1.93174 -0.82521,0.78769 -1.68792,1.16279 -2.58815,1.14403 -0.91898,-0.0375 -1.76294,-0.46887 -2.55063,-1.29407 -0.60015,-0.61891 -1.06902,-1.31283 -1.4066,-2.04426 -0.35634,-0.75019 -0.56264,-1.50037 -0.61891,-2.28807 -0.0563,-0.75019 0.0375,-1.48162 0.30008,-2.21305 0.26256,-0.73143 0.69392,-1.36909 
 1.27531,-1.93173 0.80646,-0.76895 1.65042,-1.14404 2.56939,-1.12528 0.90023,0 1.76294,0.43135 2.56939,1.27531 z m 0.5814,4.44486 c -0.075,-0.54388 -0.28132,-1.10652 -0.5814,-1.65041 -0.28132,-0.54389 -0.65641,-1.05026 -1.12528,-1.53788 -0.54388,-0.5814 -1.10652,-0.88147 -1.66916,-0.91898 -0.56264,-0.0375 -1.08777,0.18754 -1.59415,0.65641 -0.4126,0.39385 -0.67517,0.82521 -0.80645,1.33158 -0.13128,0.48762 -0.16879,1.01276 -0.075,1.5754 0.0938,0.54388 0.28132,1.08777 0.5814,1.63165 0.30007,0.56264 0.65641,1.06902 1.10652,1.53789 0.54389,0.58139 1.10653,0.88146 1.66917,0.91897 0.58139,0.0563 1.10652,-0.16879 1.63165,-0.65641 0.39385,-0.37509 0.65642,-0.82521 0.80646,-1.31283 0.13128,-0.50637 0.15003,-1.0315 0.0563,-1.57539 z m 8.27081,0.56264 -1.29407,1.21905 -0.80645,-4.89496 -7.46436,-5.32633 1.2003,-1.14404 5.90772,4.23856 -1.59415,-8.32708 1.25656,-1.21905 z m 8.92722,-29.01348 -3.28206,3.13203 5.90772,10.015 -1.23781,1.18154 -5.92648,-10.01499 -3.28206,3.15078 -0.76895,-1.27531 7.8
 3946,-7.46436 z m 8.66466,0.43136 c -0.6189,0.63766 -1.14403,1.21905 -1.57539,1.76294 -0.4126,0.54389 -0.73143,1.03151 -0.91898,1.48162 -0.2063,0.45011 -0.28132,0.88147 -0.24381,1.27532 0.0563,0.4126 0.24381,0.78769 0.5814,1.12528 0.28132,0.30007 0.60014,0.43135 0.95648,0.39385 0.33759,-0.0375 0.73144,-0.26257 1.16279,-0.65642 0.3751,-0.35634 0.67517,-0.80645 0.91898,-1.35033 0.22506,-0.54389 0.39385,-1.08778 0.50638,-1.65042 z m 2.10053,3.56339 c -0.0563,0.16879 -0.11253,0.4126 -0.18755,0.71268 -0.075,0.31883 -0.18755,0.60015 -0.30008,0.88147 -0.11252,0.30007 -0.28132,0.60015 -0.46886,0.90022 -0.2063,0.31883 -0.46887,0.63766 -0.82521,0.95649 -0.54388,0.52513 -1.14403,0.78769 -1.78169,0.80645 -0.65642,0 -1.23781,-0.26257 -1.72543,-0.76894 -0.52513,-0.56264 -0.84396,-1.14404 -0.95649,-1.74419 -0.11253,-0.60015 -0.0563,-1.25656 0.18755,-1.95048 0.24381,-0.67517 0.65641,-1.38785 1.2003,-2.11928 0.56264,-0.73143 1.25656,-1.51913 2.08176,-2.34434 -0.0938,-0.15003 -0.16879,-0.26256 -0.225
 05,-0.37509 -0.0563,-0.0938 -0.13128,-0.18755 -0.22506,-0.28132 -0.18754,-0.2063 -0.37509,-0.31883 -0.58139,-0.37509 -0.18755,-0.0375 -0.39385,-0.0375 -0.61891,0.0187 -0.2063,0.075 -0.43135,0.18755 -0.65641,0.33759 -0.2063,0.15003 -0.43136,0.33758 -0.67517,0.56264 -0.33758,0.33758 -0.69392,0.76894 -1.03151,1.31282 -0.33758,0.54389 -0.60014,1.01276 -0.78769,1.38785 l -0.0563,0.0563 -0.88147,-1.38784 c 0.1688,-0.28132 0.45012,-0.67517 0.84396,-1.18155 0.3751,-0.52513 0.76895,-0.97524 1.2003,-1.36909 0.84396,-0.8252 1.63166,-1.29407 2.30683,-1.44411 0.69392,-0.13128 1.31283,0.075 1.87547,0.65642 0.0938,0.11252 0.2063,0.24381 0.30007,0.39384 0.11253,0.15004 0.2063,0.28132 0.28132,0.41261 l 3.3946,5.73893 -1.16279,1.10652 z m 6.22655,-4.20105 c -0.50638,0.48762 -1.03151,0.86272 -1.5754,1.12528 -0.52513,0.26257 -0.99399,0.45011 -1.4066,0.56264 l -0.93773,-1.50037 0.075,-0.0563 c 0.15004,-0.0188 0.35634,-0.0375 0.58139,-0.0563 0.24381,-0.0375 0.50638,-0.11253 0.82521,-0.2063 0.28132,-0.093
 8 0.58139,-0.22506 0.90022,-0.39385 0.31883,-0.16879 0.61891,-0.39385 0.90023,-0.65641 0.58139,-0.56264 0.93773,-1.10653 1.06901,-1.63166 0.11253,-0.52513 -0.0188,-1.01275 -0.4126,-1.42535 -0.2063,-0.22506 -0.45011,-0.30008 -0.73143,-0.26257 -0.28132,0.0375 -0.6189,0.16879 -1.01275,0.4126 -0.2063,0.11253 -0.43136,0.24381 -0.69393,0.41261 -0.28132,0.16879 -0.56264,0.33758 -0.84396,0.50637 -0.6189,0.31883 -1.16279,0.46887 -1.63165,0.43136 -0.48762,-0.0563 -0.90023,-0.24381 -1.25657,-0.6189 -0.30007,-0.33759 -0.52513,-0.69393 -0.65641,-1.10653 -0.13128,-0.43136 -0.16879,-0.88147 -0.11253,-1.38785 0.0563,-0.46886 0.22506,-0.97524 0.50638,-1.50037 0.26256,-0.52513 0.65641,-1.03151 1.16279,-1.50037 0.4126,-0.39385 0.88147,-0.73144 1.38784,-1.03151 0.50638,-0.28132 0.97525,-0.46887 1.3691,-0.5814 l 0.88147,1.44411 -0.0563,0.0563 c -0.11253,0 -0.28132,0.0375 -0.50637,0.0563 -0.22506,0.0375 -0.48763,0.11253 -0.76895,0.22506 -0.26256,0.075 -0.52513,0.2063 -0.8252,0.37509 -0.30008,0.16879 -0.5
 6264,0.3751 -0.82521,0.61891 -0.52513,0.50637 -0.84396,1.01275 -0.95649,1.53788 -0.11252,0.52513 0.0188,0.97524 0.3751,1.35034 0.18754,0.2063 0.43136,0.30007 0.73143,0.28132 0.28132,0 0.6189,-0.13129 1.01275,-0.35634 0.26257,-0.13129 0.50638,-0.30008 0.76894,-0.46887 0.28132,-0.15004 0.52513,-0.31883 0.7877,-0.46887 0.60015,-0.33758 1.12528,-0.48762 1.6129,-0.46886 0.48762,0.0187 0.90023,0.22505 1.27532,0.60015 0.30007,0.31883 0.50638,0.71267 0.65641,1.16279 0.13129,0.45011 0.16879,0.91897 0.0938,1.4066 -0.075,0.52513 -0.24381,1.0315 -0.54389,1.57539 -0.28132,0.52513 -0.69392,1.03151 -1.21905,1.53788 z m 10.67141,-10.48386 -1.4066,1.35034 -5.12003,-0.93774 -0.22506,1.76294 1.61291,2.71943 -1.18155,1.12528 -6.95798,-11.77793 1.18154,-1.12528 4.46361,7.55813 0.75019,-7.33308 1.53788,-1.46286 -0.84396,7.05175 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3061"
-         d="m 383.62682,392.9854 c -0.58139,0.60015 -1.2003,1.08777 -1.83796,1.50038 -0.65641,0.4126 -1.35033,0.75018 -2.11927,1.01275 l -1.10653,-1.65041 0.0938,-0.0938 c 0.75019,-0.0188 1.50038,-0.22505 2.26932,-0.60015 0.75019,-0.37509 1.38784,-0.8252 1.91297,-1.35033 0.84397,-0.88147 1.33159,-1.70668 1.44411,-2.51313 0.0938,-0.80645 -0.11252,-1.46286 -0.63765,-1.98799 -0.28132,-0.28132 -0.60015,-0.41261 -0.95649,-0.43136 -0.35634,-0.0188 -0.73143,0.075 -1.12528,0.30007 -0.33759,0.20631 -0.71268,0.45012 -1.14404,0.75019 -0.4126,0.30008 -0.8252,0.5814 -1.23781,0.82521 -0.76894,0.50637 -1.50037,0.75018 -2.19429,0.76894 -0.69393,0.0188 -1.29408,-0.22506 -1.80045,-0.73143 -0.86272,-0.86272 -1.23781,-1.93174 -1.08777,-3.24456 0.15003,-1.29407 0.78769,-2.53188 1.93173,-3.69467 0.6189,-0.63766 1.25656,-1.16279 1.89422,-1.53789 0.65641,-0.39384 1.23781,-0.69392 1.80045,-0.90022 l 1.03151,1.55664 -0.0938,0.0938 c -0.54388,0.0188 -1.18154,0.22506 -1.89422,0.56264 -0.71268,0.35634 -1.36909,
 0.82521 -1.95048,1.4066 -0.73144,0.75019 -1.14404,1.50038 -1.25657,2.26932 -0.11253,0.75018 0.0938,1.38784 0.60015,1.87546 0.26257,0.26257 0.5814,0.41261 0.93774,0.46887 0.35633,0.0375 0.78769,-0.0938 1.29407,-0.4126 0.31883,-0.2063 0.73143,-0.46887 1.23781,-0.82521 0.52513,-0.33758 0.95648,-0.6189 1.31282,-0.84396 0.73144,-0.4126 1.4066,-0.6189 2.00675,-0.6189 0.61891,0 1.16279,0.24381 1.63166,0.71268 0.39385,0.39384 0.71268,0.88147 0.90022,1.46286 0.20631,0.58139 0.28132,1.2003 0.22506,1.8192 -0.075,0.67517 -0.26257,1.35034 -0.5814,2.00675 -0.33758,0.67517 -0.8252,1.35034 -1.50037,2.04426 z m 6.32033,-15.11626 c -0.0938,-0.13129 -0.1688,-0.24381 -0.24382,-0.33759 -0.075,-0.075 -0.16879,-0.16879 -0.26256,-0.26256 -0.43136,-0.43136 -0.90022,-0.65642 -1.36909,-0.65642 -0.48762,0 -0.97524,0.26257 -1.50038,0.7877 -0.56264,0.58139 -0.90022,1.27532 -0.97524,2.08177 -0.075,0.78769 0.0938,1.55664 0.52513,2.30682 z m 2.08176,6.54538 c -0.93773,0.93773 -1.87546,1.46286 -2.85071,1.57539 -0.97
 524,0.0938 -1.89422,-0.28132 -2.75693,-1.10653 -1.23781,-1.2378 -1.93173,-2.68191 -2.04426,-4.35108 -0.13128,-1.66917 0.37509,-3.09452 1.51913,-4.25731 0.76894,-0.76894 1.53788,-1.18154 2.32558,-1.21905 0.78769,-0.0188 1.53788,0.30007 2.2318,0.97524 0.13128,0.13128 0.30008,0.33758 0.52513,0.63766 0.24381,0.28132 0.48762,0.63766 0.76894,1.06901 l -4.93247,5.04501 c 0.0938,0.13128 0.18754,0.26257 0.28132,0.39385 0.11252,0.11253 0.2063,0.22505 0.31882,0.31883 0.56265,0.56264 1.2003,0.8252 1.85672,0.80645 0.67517,-0.0375 1.33158,-0.37509 1.96924,-1.01275 0.43136,-0.45012 0.80645,-0.994 1.08777,-1.65041 0.30007,-0.63766 0.48762,-1.23781 0.58139,-1.7817 l 0.075,-0.0563 0.994,1.46286 c -0.13128,0.28132 -0.24381,0.52513 -0.33758,0.75019 -0.0938,0.22506 -0.24381,0.48762 -0.43136,0.80645 -0.18755,0.31883 -0.35634,0.58139 -0.52513,0.80645 -0.15004,0.22506 -0.3751,0.48762 -0.65642,0.7877 z m 5.45761,-16.44785 c 0.0938,0.0938 0.22506,0.24381 0.3751,0.4126 0.13128,0.18755 0.26256,0.35634 0.35634,
 0.50638 l 3.4321,5.38259 -1.12528,1.14403 -3.0195,-4.70742 c -0.16879,-0.26256 -0.31883,-0.48762 -0.45011,-0.67517 -0.13129,-0.16879 -0.28132,-0.33758 -0.45012,-0.50637 -0.33758,-0.33759 -0.67516,-0.50638 -1.01275,-0.50638 -0.33758,0 -0.73143,0.22506 -1.16279,0.67517 -0.30007,0.30007 -0.54388,0.73143 -0.75018,1.27532 -0.18755,0.54388 -0.33759,1.10652 -0.45012,1.68792 l 3.93848,6.18904 -1.12528,1.14403 -5.28881,-8.28956 1.12528,-1.14404 0.58139,0.91898 c 0.13128,-0.73143 0.30008,-1.36909 0.50638,-1.91297 0.2063,-0.54389 0.50637,-1.01276 0.91898,-1.42536 0.58139,-0.58139 1.18154,-0.90022 1.80045,-0.93773 0.63765,-0.0375 1.2378,0.2063 1.80044,0.76894 z m 4.40735,-12.99699 7.35183,11.55288 -1.12528,1.14403 -0.54388,-0.86271 c -0.15004,0.86271 -0.33759,1.51913 -0.50638,1.95049 -0.18755,0.43135 -0.46887,0.84396 -0.8252,1.21905 -0.63766,0.63766 -1.35034,0.95649 -2.11928,0.93773 -0.7877,-0.0375 -1.55664,-0.43135 -2.34434,-1.18154 -0.65641,-0.65641 -1.18154,-1.36909 -1.55663,-2.13803 -0.3938
 5,-0.7877 -0.63766,-1.55664 -0.73144,-2.34434 -0.0938,-0.76894 -0.0375,-1.51913 0.1688,-2.25056 0.2063,-0.71268 0.58139,-1.35033 1.10652,-1.87547 0.35634,-0.35633 0.71268,-0.65641 1.08777,-0.88147 0.3751,-0.24381 0.76894,-0.4126 1.2003,-0.52513 l -2.30682,-3.58214 z m 1.89422,5.90772 c -0.4126,0.13129 -0.78769,0.30008 -1.10652,0.48763 -0.31883,0.2063 -0.63766,0.45011 -0.91898,0.75018 -0.4126,0.4126 -0.69392,0.90023 -0.80645,1.42536 -0.13128,0.54388 -0.13128,1.10652 0,1.68792 0.11253,0.52513 0.33758,1.06901 0.67517,1.63165 0.33758,0.56264 0.71267,1.05027 1.14403,1.46287 0.48762,0.48762 0.97524,0.75019 1.46287,0.80645 0.46886,0.0375 0.93773,-0.18755 1.4066,-0.65641 0.33758,-0.35634 0.60015,-0.7877 0.76894,-1.31283 0.18754,-0.52513 0.31883,-1.03151 0.4126,-1.53788 z m 15.2288,-3.99474 c -0.5814,0.58139 -1.18155,1.08777 -1.83796,1.50037 -0.63766,0.4126 -1.35034,0.75019 -2.11928,1.01275 l -1.08777,-1.65041 0.075,-0.0938 c 0.75019,-0.0187 1.51913,-0.22506 2.26931,-0.60015 0.75019,-0.37509
  1.38785,-0.82521 1.91298,-1.35034 0.86272,-0.88147 1.33158,-1.70667 1.44411,-2.51312 0.11253,-0.80645 -0.11253,-1.46287 -0.63766,-1.988 -0.28132,-0.28132 -0.60015,-0.43135 -0.95649,-0.45011 -0.33758,-0.0188 -0.71267,0.0938 -1.12528,0.31883 -0.31883,0.2063 -0.71267,0.45011 -1.12528,0.75019 -0.43135,0.30007 -0.84396,0.56264 -1.23781,0.8252 -0.78769,0.50638 -1.51912,0.75019 -2.19429,0.76894 -0.69392,0 -1.29407,-0.24381 -1.8192,-0.75018 -0.86272,-0.84396 -1.21906,-1.91298 -1.08778,-3.22581 0.15004,-1.29407 0.7877,-2.53188 1.93174,-3.69467 0.63765,-0.63766 1.25656,-1.16279 1.91297,-1.55663 0.63766,-0.3751 1.23781,-0.67517 1.7817,-0.88147 l 1.0315,1.55663 -0.075,0.0938 c -0.56264,0.0187 -1.20029,0.2063 -1.91297,0.56264 -0.71268,0.35634 -1.36909,0.8252 -1.95049,1.4066 -0.71268,0.75018 -1.14403,1.50037 -1.23781,2.26931 -0.11252,0.75019 0.075,1.38785 0.5814,1.87547 0.26256,0.26257 0.58139,0.4126 0.93773,0.45011 0.3751,0.0375 0.80645,-0.0938 1.29407,-0.39385 0.31883,-0.2063 0.73144,-0.46886 
 1.25657,-0.8252 0.50637,-0.33759 0.93773,-0.61891 1.31282,-0.84396 0.73144,-0.43136 1.38785,-0.63766 2.00675,-0.61891 0.60015,0 1.14404,0.24381 1.61291,0.71268 0.4126,0.39385 0.71267,0.88147 0.91897,1.46287 0.20631,0.58139 0.26257,1.18154 0.20631,1.8192 -0.0563,0.67517 -0.26257,1.33158 -0.5814,2.00675 -0.31883,0.67517 -0.8252,1.35034 -1.50037,2.04426 z m 3.26331,-17.32932 0.73143,1.12528 -2.34433,2.36309 2.43811,3.82595 c 0.13128,0.2063 0.28132,0.41261 0.45011,0.65642 0.16879,0.22505 0.31883,0.4126 0.45011,0.52513 0.30008,0.30007 0.5814,0.43136 0.88147,0.43136 0.30007,-0.0188 0.63766,-0.22506 1.03151,-0.61891 0.16879,-0.16879 0.33758,-0.39385 0.50637,-0.69392 0.1688,-0.28132 0.28132,-0.48762 0.31883,-0.60015 l 0.0563,-0.0563 0.78769,1.18155 c -0.16879,0.28132 -0.35634,0.58139 -0.58139,0.86271 -0.2063,0.30008 -0.43136,0.54389 -0.61891,0.75019 -0.54388,0.56264 -1.10652,0.88147 -1.65041,0.93773 -0.54388,0.075 -1.08777,-0.15003 -1.63165,-0.67516 -0.13129,-0.13129 -0.24381,-0.26257 -0.35
 634,-0.41261 -0.11253,-0.15003 -0.22506,-0.31883 -0.35634,-0.50637 l -2.85071,-4.44486 -0.75019,0.76894 -0.73143,-1.12528 0.76894,-0.76894 -1.51913,-2.38184 1.12528,-1.16279 1.51913,2.38184 z m 7.95198,-1.63166 c -0.60015,0.63766 -1.10652,1.25657 -1.50037,1.80045 -0.4126,0.56264 -0.71268,1.06902 -0.88147,1.51913 -0.18755,0.46887 -0.26257,0.90023 -0.18755,1.29407 0.0563,0.39385 0.26257,0.75019 0.60015,1.08778 0.30008,0.30007 0.61891,0.4126 0.97524,0.37509 0.33759,-0.0563 0.73144,-0.28132 1.14404,-0.71268 0.35634,-0.37509 0.65641,-0.8252 0.86271,-1.36909 0.20631,-0.54389 0.35634,-1.10653 0.45012,-1.66917 z m 2.21305,3.48837 c -0.0375,0.1688 -0.0938,0.41261 -0.16879,0.71268 -0.0563,0.30008 -0.15004,0.60015 -0.24381,0.88147 -0.11253,0.30008 -0.26257,0.61891 -0.45011,0.93773 -0.18755,0.31883 -0.45011,0.63766 -0.7877,0.97525 -0.52513,0.54388 -1.12528,0.8252 -1.76294,0.86271 -0.65641,0.0188 -1.23781,-0.2063 -1.74418,-0.71268 -0.54389,-0.54388 -0.88147,-1.10652 -1.01275,-1.70667 -0.15004,-0
 .60015 -0.0938,-1.25656 0.11252,-1.96924 0.22506,-0.67517 0.60015,-1.4066 1.14404,-2.15679 0.52513,-0.75019 1.18154,-1.55664 1.98799,-2.41935 -0.0938,-0.13128 -0.16879,-0.24381 -0.24381,-0.33758 -0.0563,-0.11253 -0.13128,-0.20631 -0.22505,-0.28133 -0.2063,-0.2063 -0.39385,-0.31882 -0.60015,-0.35633 -0.18755,-0.0375 -0.39385,-0.0375 -0.61891,0.0375 -0.2063,0.075 -0.43135,0.18754 -0.63766,0.35633 -0.2063,0.1688 -0.43135,0.35634 -0.65641,0.5814 -0.33758,0.35634 -0.67517,0.80645 -0.994,1.35034 -0.31883,0.56264 -0.56264,1.0315 -0.73143,1.42535 l -0.0563,0.0563 -0.93774,-1.35033 c 0.1688,-0.30008 0.43136,-0.71268 0.80645,-1.23781 0.35634,-0.52513 0.73144,-0.994 1.14404,-1.4066 0.82521,-0.84396 1.59415,-1.35034 2.26931,-1.51913 0.67517,-0.15004 1.31283,0.0375 1.89423,0.60015 0.0938,0.11253 0.2063,0.24381 0.31883,0.37509 0.11252,0.15004 0.2063,0.28132 0.28132,0.41261 l 3.60089,5.6264 -1.12528,1.12528 z m 2.02551,-14.29106 0.71268,1.12528 -2.32558,2.38185 2.4381,3.82595 c 0.13129,0.18755 0.2
 6257,0.4126 0.45012,0.63766 0.16879,0.24381 0.31882,0.4126 0.43135,0.54388 0.30008,0.28132 0.60015,0.43136 0.90023,0.41261 0.28132,0 0.63766,-0.2063 1.0315,-0.61891 0.1688,-0.16879 0.33759,-0.39384 0.50638,-0.67516 0.16879,-0.30008 0.26257,-0.48763 0.31883,-0.60015 l 0.0563,-0.075 0.7877,1.18154 c -0.16879,0.30008 -0.37509,0.5814 -0.5814,0.88147 -0.22505,0.28132 -0.43135,0.54389 -0.6189,0.73143 -0.56264,0.56264 -1.10652,0.88147 -1.65041,0.95649 -0.56264,0.0563 -1.10653,-0.16879 -1.63166,-0.69392 -0.13128,-0.13128 -0.24381,-0.26257 -0.35634,-0.4126 -0.11252,-0.13129 -0.24381,-0.30008 -0.37509,-0.50638 l -2.83195,-4.44486 -0.76895,0.76894 -0.71267,-1.10652 0.76894,-0.7877 -1.51913,-2.38184 1.12528,-1.16279 1.51913,2.38184 z m 6.88296,-7.033 5.30757,8.27081 -1.12528,1.14404 -0.60015,-0.90023 c -0.13128,0.71268 -0.28132,1.35034 -0.48762,1.89422 -0.2063,0.54389 -0.50637,1.03151 -0.91898,1.44411 -0.58139,0.5814 -1.18154,0.90023 -1.80044,0.93774 -0.61891,0.0375 -1.21906,-0.22506 -1.7817,-0
 .76894 -0.13128,-0.13129 -0.26256,-0.28132 -0.37509,-0.43136 -0.11253,-0.15004 -0.24381,-0.31883 -0.3751,-0.50638 l -3.4321,-5.38259 1.12528,-1.14403 3.0195,4.70742 c 0.11253,0.2063 0.26257,0.4126 0.43136,0.63766 0.18755,0.24381 0.31883,0.4126 0.45011,0.52513 0.33759,0.35634 0.69392,0.52513 1.05026,0.50638 0.33759,0 0.73144,-0.20631 1.14404,-0.63766 0.30007,-0.30008 0.54388,-0.73144 0.75019,-1.29408 0.2063,-0.56264 0.35633,-1.12528 0.45011,-1.66916 l -3.95724,-6.18904 z m 9.78994,4.03226 c -0.50637,0.50637 -1.01275,0.90022 -1.53788,1.18154 -0.52513,0.28132 -0.994,0.48762 -1.4066,0.6189 l -0.97525,-1.46286 0.0563,-0.075 c 0.16879,0 0.35634,-0.0375 0.60015,-0.075 0.22505,-0.0375 0.50637,-0.11253 0.80645,-0.22505 0.28132,-0.11253 0.58139,-0.24381 0.88147,-0.43136 0.31883,-0.16879 0.60015,-0.4126 0.88147,-0.69392 0.56264,-0.56264 0.90022,-1.12528 1.01275,-1.65041 0.11253,-0.54389 -0.0563,-1.01276 -0.46887,-1.42536 -0.2063,-0.2063 -0.45011,-0.28132 -0.73143,-0.22506 -0.28132,0.0563 -0.61
 89,0.18755 -0.994,0.43136 -0.18754,0.13128 -0.43135,0.28132 -0.69392,0.46887 -0.26256,0.16879 -0.52513,0.33758 -0.80645,0.50637 -0.6189,0.35634 -1.14403,0.50638 -1.63166,0.48763 -0.48762,-0.0188 -0.90022,-0.20631 -1.27531,-0.56264 -0.31883,-0.31883 -0.54389,-0.67517 -0.67517,-1.08778 -0.15004,-0.4126 -0.2063,-0.86271 -0.16879,-1.36909 0.0375,-0.48762 0.18754,-0.99399 0.45011,-1.51912 0.24381,-0.54389 0.6189,-1.06902 1.10652,-1.55664 0.39385,-0.41261 0.84396,-0.76894 1.35034,-1.06902 0.50638,-0.30007 0.95649,-0.50638 1.35034,-0.6189 l 0.93773,1.38784 -0.0563,0.075 c -0.11253,0 -0.28132,0.0375 -0.50638,0.075 -0.22506,0.0563 -0.46887,0.13128 -0.76894,0.24381 -0.24381,0.0938 -0.52513,0.22506 -0.80645,0.4126 -0.28132,0.18755 -0.56264,0.39385 -0.80645,0.65642 -0.48763,0.50637 -0.7877,1.01275 -0.90023,1.55663 -0.0938,0.52514 0.0375,0.97525 0.4126,1.33159 0.20631,0.2063 0.45012,0.28132 0.75019,0.26256 0.28132,-0.0188 0.61891,-0.15004 1.01275,-0.39385 0.24381,-0.15003 0.48763,-0.31883 0.7501
 9,-0.48762 0.26257,-0.16879 0.50638,-0.33758 0.76894,-0.50637 0.5814,-0.35634 1.10653,-0.52513 1.59415,-0.52513 0.48762,0 0.90022,0.18754 1.27532,0.56264 0.31883,0.30007 0.56264,0.69392 0.71267,1.12528 0.15004,0.45011 0.20631,0.91897 0.15004,1.4066 -0.0563,0.52513 -0.22505,1.05026 -0.48762,1.59414 -0.28132,0.54389 -0.67517,1.06902 -1.16279,1.5754 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3063"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="507.19437"
-         x="233.59662"
-         xml:space="preserve">Task Execution,</text>
-      <text
-         id="text3065"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="528.19958"
-         x="236.89745"
-         xml:space="preserve">Data Exchange</text>
-      <text
-         id="text3067"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="507.19437"
-         x="646.51672"
-         xml:space="preserve">Task Execution,</text>
-      <text
-         id="text3069"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="528.19958"
-         x="649.8175"
-         xml:space="preserve">Data Exchange</text>
-      <path
-         id="path3071"
-         d="m 564.90948,478.2629 -122.78684,1.87546 0.0938,5.62641 122.76808,-1.87547 z m -15.24755,15.32256 20.8552,-12.60314 -21.23029,-11.94672 c -1.35034,-0.76894 -3.05701,-0.28132 -3.82595,1.06901 -0.75019,1.35034 -0.28132,3.07577 1.06901,3.84471 l 17.02925,9.58364 -0.075,-4.85746 -16.72917,10.09001 c -1.33158,0.80645 -1.74418,2.53188 -0.93773,3.86347 0.78769,1.33158 2.53188,1.76294 3.8447,0.95648 z m -92.21672,-23.14326 -20.85519,12.60314 21.23028,11.94672 c 1.35034,0.76895 3.07577,0.28133 3.82596,-1.06901 0.76894,-1.35034 0.28132,-3.07577 -1.06902,-3.82595 l 0,0 -17.02924,-9.6024 0.075,4.87622 16.72917,-10.10877 c 1.33158,-0.80645 1.76293,-2.53188 0.95648,-3.86346 -0.80645,-1.33158 -2.53188,-1.76294 -3.86346,-0.95649 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3073"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="516.58087"
-         x="466.24557"
-         xml:space="preserve">Exchange </text>
-      <text
-         id="text3075"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="537.58606"
-         x="451.39188"
-         xml:space="preserve">Intermediate</text>
-      <text
-         id="text3077"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="558.59131"
-         x="476.7482"
-         xml:space="preserve">Results</text>
-      <text
-         id="text3079"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="579.59656"
-         x="418.08359"
-         xml:space="preserve">(</text>
-      <text
-         id="text3081"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="579.59656"
-         x="426.03558"
-         xml:space="preserve">shuffle</text>
-      <text
-         id="text3083"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="579.59656"
-         x="490.85172"
-         xml:space="preserve">/ </text>
-      <text
-         id="text3085"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="579.59656"
-         x="504.95523"
-         xml:space="preserve">broadcast</text>
-      <text
-         id="text3087"
-         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="579.59656"
-         x="591.22675"
-         xml:space="preserve">) </text>
-    </g>
-  </g>
-</svg>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/FlinkOnYarn.svg
----------------------------------------------------------------------
diff --git a/docs/img/FlinkOnYarn.svg b/docs/img/FlinkOnYarn.svg
deleted file mode 100644
index 3eddf50..0000000
--- a/docs/img/FlinkOnYarn.svg
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill-opacity="1" color-rendering="auto" color-interpolation="auto" stroke="black" text-rendering="auto" stroke-linecap="square" width="877" stroke-miterlimit="10" stroke-opacity="1" shape-rendering="auto" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" height="397" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12" stroke-dashoffset="0" image-rendering="auto">
-  <!--Generated by ySVG 2.5-->
-  <defs id="genericDefs"/>
-  <g>
-    <defs id="defs1">
-      <linearGradient x1="336.5" gradientUnits="userSpaceOnUse" x2="506.5" y1="386.5" y2="426.5" id="linearGradient1" spreadMethod="reflect">
-        <stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
-        <stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
-      </linearGradient>
-      <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1">
-        <path d="M0 0 L877 0 L877 397 L0 397 L0 0 Z"/>
-      </clipPath>
-      <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2">
-        <path d="M77 45 L954 45 L954 442 L77 442 L77 45 Z"/>
-      </clipPath>
-    </defs>
-    <g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="translate(-77,-45)" stroke="white">
-      <rect x="77" width="877" height="397" y="45" clip-path="url(#clipPath2)" stroke="none"/>
-    </g>
-    <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)">
-      <rect x="92" y="209" clip-path="url(#clipPath2)" width="119" rx="4" ry="4" height="117" stroke="none"/>
-    </g>
-    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
-      <text x="107.9238" xml:space="preserve" y="226.1387" clip-path="url(#clipPath2)" stroke="none">"Master" Node</text>
-      <rect x="92" y="209" clip-path="url(#clipPath2)" fill="none" width="119" rx="4" ry="4" height="117"/>
-    </g>
-    <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)">
-      <rect x="369" y="60" clip-path="url(#clipPath2)" width="105" rx="4" ry="4" height="117" stroke="none"/>
-    </g>
-    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
-      <text x="375.498" xml:space="preserve" y="115.6699" clip-path="url(#clipPath2)" stroke="none">YARN Resource</text>
-      <text x="395.4492" xml:space="preserve" y="129.6387" clip-path="url(#clipPath2)" stroke="none">Manager</text>
-      <rect x="369" y="60" clip-path="url(#clipPath2)" fill="none" width="105" rx="4" ry="4" height="117"/>
-    </g>
-    <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)">
-      <rect x="369" y="212" clip-path="url(#clipPath2)" width="105" rx="4" ry="4" height="117" stroke="none"/>
-    </g>
-    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
-      <text x="373.8457" xml:space="preserve" y="229.1387" clip-path="url(#clipPath2)" stroke="none">YARN Container</text>
-      <rect x="369" y="212" clip-path="url(#clipPath2)" fill="none" width="105" rx="4" ry="4" height="117"/>
-    </g>
-    <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)">
-      <rect x="614" y="212" clip-path="url(#clipPath2)" width="105" rx="4" ry="4" height="117" stroke="none"/>
-    </g>
-    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
-      <text x="618.8457" xml:space="preserve" y="229.1387" clip-path="url(#clipPath2)" stroke="none">YARN Container</text>
-      <rect x="614" y="212" clip-path="url(#clipPath2)" fill="none" width="105" rx="4" ry="4" height="117"/>
-    </g>
-    <g fill="url(#linearGradient1)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="url(#linearGradient1)">
-      <path d="M336.5 394.5 C341.6 386.5 501.4 386.5 506.5 394.5 L506.5 418.5 C501.4 426.5 341.6 426.5 336.5 418.5 Z" clip-path="url(#clipPath2)" stroke="none"/>
-    </g>
-    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
-      <path fill="none" d="M336.5 394.5 C341.6 386.5 501.4 386.5 506.5 394.5 L506.5 418.5 C501.4 426.5 341.6 426.5 336.5 418.5 Z" clip-path="url(#clipPath2)"/>
-      <path fill="none" d="M506.5 394.5 C501.4 402.5 341.6 402.5 336.5 394.5" clip-path="url(#clipPath2)"/>
-      <text x="405.1084" xml:space="preserve" y="410.6543" font-family="sans-serif" clip-path="url(#clipPath2)" stroke="none">HDFS</text>
-    </g>
-    <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)">
-      <rect x="791" y="212" clip-path="url(#clipPath2)" width="105" rx="4" ry="4" height="117" stroke="none"/>
-    </g>
-    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
-      <text x="795.8457" xml:space="preserve" y="229.1387" clip-path="url(#clipPath2)" stroke="none">YARN Container</text>
-      <rect x="791" y="212" clip-path="url(#clipPath2)" fill="none" width="105" rx="4" ry="4" height="117"/>
-    </g>
-    <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)">
-      <rect x="99" width="105" height="30" y="242.5" clip-path="url(#clipPath2)" stroke="none"/>
-    </g>
-    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
-      <text x="137.4375" xml:space="preserve" y="254.6699" clip-path="url(#clipPath2)" stroke="none">Flink</text>
-      <text x="115.7959" xml:space="preserve" y="268.6387" clip-path="url(#clipPath2)" stroke="none">YARN Client</text>
-      <rect fill="none" x="99" width="105" height="30" y="242.5" clip-path="url(#clipPath2)"/>
-    </g>
-    <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)">
-      <rect x="375" width="93" height="30" y="252.5" clip-path="url(#clipPath2)" stroke="none"/>
-    </g>
-    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
-      <text x="407.4375" xml:space="preserve" y="264.6699" clip-path="url(#clipPath2)" stroke="none">Flink</text>
-      <text x="385.9512" xml:space="preserve" y="278.6387" clip-path="url(#clipPath2)" stroke="none">JobManager</text>
-      <rect fill="none" x="375" width="93" height="30" y="252.5" clip-path="url(#clipPath2)"/>
-    </g>
-    <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)">
-      <rect x="375" width="93" height="30" y="282.5" clip-path="url(#clipPath2)" stroke="none"/>
-    </g>
-    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
-      <text x="389.5371" xml:space="preserve" y="294.6699" clip-path="url(#clipPath2)" stroke="none">YARN App.</text>
-      <text x="401.0098" xml:space="preserve" y="308.6387" clip-path="url(#clipPath2)" stroke="none">Master</text>
-      <rect fill="none" x="375" width="93" height="30" y="282.5" clip-path="url(#clipPath2)"/>
-    </g>
-    <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)">
-      <rect x="620" width="93" height="30" y="255.5" clip-path="url(#clipPath2)" stroke="none"/>
-    </g>
-    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
-      <text x="652.4375" xml:space="preserve" y="267.6699" clip-path="url(#clipPath2)" stroke="none">Flink</text>
-      <text x="626.2578" xml:space="preserve" y="281.6387" clip-path="url(#clipPath2)" stroke="none">TaskManager</text>
-      <rect fill="none" x="620" width="93" height="30" y="255.5" clip-path="url(#clipPath2)"/>
-    </g>
-    <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)">
-      <rect x="797" width="93" height="30" y="255.5" clip-path="url(#clipPath2)" stroke="none"/>
-    </g>
-    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
-      <text x="829.4375" xml:space="preserve" y="267.6699" clip-path="url(#clipPath2)" stroke="none">Flink</text>
-      <text x="803.2578" xml:space="preserve" y="281.6387" clip-path="url(#clipPath2)" stroke="none">TaskManager</text>
-      <rect fill="none" x="797" width="93" height="30" y="255.5" clip-path="url(#clipPath2)"/>
-      <text x="917.1621" xml:space="preserve" y="274.6543" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">...</text>
-      <path fill="none" d="M210.991 234.6698 L361.997 151.3369" clip-path="url(#clipPath2)"/>
-      <path d="M369.0012 147.4715 L356.079 148.8919 L361.1215 151.82 L360.9107 157.6472 Z" clip-path="url(#clipPath2)" stroke="none"/>
-      <text x="157.7557" xml:space="preserve" y="141.7122" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">2. Register resources </text>
-      <text x="150.4286" xml:space="preserve" y="155.681" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">and request AppMaster </text>
-      <text x="199.911" xml:space="preserve" y="169.6497" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">container</text>
-      <path fill="none" d="M421.5 177.0215 L421.5 204.0303" clip-path="url(#clipPath2)"/>
-      <path d="M421.5 212.0303 L426.5 200.0303 L421.5 203.0303 L416.5 200.0303 Z" clip-path="url(#clipPath2)" stroke="none"/>
-      <text x="452.5664" xml:space="preserve" y="198.6543" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">3. Allocate AppMaster Container</text>
-      <path fill="none" d="M473.9872 270.5 L606.0008 270.5" clip-path="url(#clipPath2)"/>
-      <path d="M614.0008 270.5 L602.0008 265.5 L605.0008 270.5 L602.0008 275.5 Z" clip-path="url(#clipPath2)" stroke="none"/>
-      <text x="481.2285" xml:space="preserve" y="304.6543" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">4. Allocate Worker</text>
-      <path fill="none" d="M210.991 298.1268 L380.3388 385.3096" clip-path="url(#clipPath2)"/>
-      <path d="M387.4516 388.9714 L379.071 379.0333 L379.4497 384.8519 L374.4938 387.9242 Z" clip-path="url(#clipPath2)" stroke="none"/>
-      <text x="207.4763" xml:space="preserve" y="355.1486" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">1. Store Uberjar</text>
-      <text x="201.4939" xml:space="preserve" y="369.1174" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">and configuration</text>
-      <path fill="none" d="M421.5 388.4707 L421.5 336.9957" clip-path="url(#clipPath2)" stroke="gray"/>
-      <path fill="gray" d="M421.5 328.9957 L416.5 340.9957 L421.5 337.9957 L426.5 340.9957 Z" clip-path="url(#clipPath2)" stroke="none"/>
-      <path fill="none" d="M453.1718 388.9189 L606.9806 303.5393" clip-path="url(#clipPath2)" stroke="gray"/>
-      <path fill="gray" d="M613.9752 299.6566 L601.0566 301.109 L606.1063 304.0247 L605.91 309.8523 Z" clip-path="url(#clipPath2)" stroke="none"/>
-      <path fill="none" d="M719.0037 270.5 L783.0085 270.5" clip-path="url(#clipPath2)"/>
-      <path d="M791.0085 270.5 L779.0085 265.5 L782.0085 270.5 L779.0085 275.5 Z" clip-path="url(#clipPath2)" stroke="none"/>
-      <path fill="none" d="M473.6061 389.7075 L783.3726 289.8775" clip-path="url(#clipPath2)" stroke="gray"/>
-      <path fill="gray" d="M790.987 287.4236 L778.0318 286.3455 L782.4208 290.1843 L781.0992 295.8634 Z" clip-path="url(#clipPath2)" stroke="none"/>
-      <text x="542.0724" xml:space="preserve" y="392.1359" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">Always Bootstrap containers with</text>
-      <text x="593.1105" xml:space="preserve" y="406.1046" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">Uberjar and config</text>
-    </g>
-  </g>
-</svg>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/JobManagerComponents.svg
----------------------------------------------------------------------
diff --git a/docs/img/JobManagerComponents.svg b/docs/img/JobManagerComponents.svg
deleted file mode 100644
index d0707a8..0000000
--- a/docs/img/JobManagerComponents.svg
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.0"
-   width="347.85999mm"
-   height="218.48mm"
-   id="svg2985"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="JobManagerComponents.emf">
-  <metadata
-     id="metadata3049">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="640"
-     inkscape:window-height="480"
-     id="namedview3047"
-     showgrid="false"
-     inkscape:zoom="0.2799019"
-     inkscape:cx="616.28735"
-     inkscape:cy="387.07086"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="svg2985" />
-  <defs
-     id="defs2987" />
-  <g
-     id="g2989">
-    <path
-       style="fill:none;stroke:#85888d;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 171.86782 222.43041   C 171.86782 204.61347 186.34642 190.17238 204.16336 190.17238   L 1058.4387 190.17238   C 1076.2556 190.17238 1090.7342 204.61347 1090.7342 222.43041   L 1090.7342 417.36648   C 1090.7342 435.18342 1076.2556 449.62451 1058.4387 449.62451   L 204.16336 449.62451   C 186.34642 449.62451 171.86782 435.18342 171.86782 417.36648   z"
-       id="path2991" />
-    <text
-       xml:space="preserve"
-       x="541.19354"
-       y="229.53858"
-       style="font-size:30.007475px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text2993">JobManager</text>
-    <path
-       style="fill:none;stroke:#85888d;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 451.19991 302.98173   C 451.19991 292.57289 459.63951 284.13328 470.04835 284.13328   L 580.92597 284.13328   C 591.33482 284.13328 599.77442 292.57289 599.77442 302.98173   L 599.77442 390.9599   C 599.77442 401.36874 591.33482 409.80834 580.92597 409.80834   L 470.04835 409.80834   C 459.63951 409.80834 451.19991 401.36874 451.19991 390.9599   z"
-       id="path2995" />
-    <text
-       xml:space="preserve"
-       x="463.50568"
-       y="341.79134"
-       style="font-size:25.056242px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text2997">InputSplit</text>
-    <text
-       xml:space="preserve"
-       x="471.45766"
-       y="371.79881"
-       style="font-size:25.056242px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text2999">Manager</text>
-    <path
-       style="fill:none;stroke:#85888d;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 261.85273 303.20679   C 261.85273 292.85421 270.25483 284.45211 280.60741 284.45211   L 406.90137 284.45211   C 417.25395 284.45211 425.65604 292.85421 425.65604 303.20679   L 425.65604 390.73484   C 425.65604 401.08742 417.25395 409.48951 406.90137 409.48951   L 280.60741 409.48951   C 270.25483 409.48951 261.85273 401.08742 261.85273 390.73484   z"
-       id="path3001" />
-    <text
-       xml:space="preserve"
-       x="281.46181"
-       y="356.79504"
-       style="font-size:25.056242px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3003">Scheduler</text>
-    <path
-       style="fill:none;stroke:#85888d;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 799.47417 302.88796   C 799.47417 292.53538 807.87626 284.13328 818.22884 284.13328   L 981.99464 284.13328   C 992.34722 284.13328 1000.7493 292.53538 1000.7493 302.88796   L 1000.7493 391.07243   C 1000.7493 401.42501 992.34722 409.8271 981.99464 409.8271   L 818.22884 409.8271   C 807.87626 409.8271 799.47417 401.42501 799.47417 391.07243   z"
-       id="path3005" />
-    <text
-       xml:space="preserve"
-       x="821.75091"
-       y="341.79134"
-       style="font-size:25.056242px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3007">Accumulator</text>
-    <text
-       xml:space="preserve"
-       x="846.05697"
-       y="371.79881"
-       style="font-size:25.056242px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3009">Manager</text>
-    <path
-       style="fill:none;stroke:#85888d;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 625.35579 303.22554   C 625.35579 292.87296 633.72038 284.47087 644.11046 284.47087   L 755.17563 284.47087   C 765.52821 284.47087 773.93031 292.87296 773.93031 303.22554   L 773.93031 390.73484   C 773.93031 401.08742 765.52821 409.48951 755.17563 409.48951   L 644.11046 409.48951   C 633.72038 409.48951 625.35579 401.08742 625.35579 390.73484   z"
-       id="path3011" />
-    <text
-       xml:space="preserve"
-       x="645.526"
-       y="341.7913"
-       style="font-size:25.056242px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3013">Instance</text>
-    <text
-       xml:space="preserve"
-       x="645.526"
-       y="371.79878"
-       style="font-size:25.056242px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3015">Manager</text>
-    <path
-       style="fill:none;stroke:#85888d;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 50.525087 641.14723   C 50.525087 620.92969 66.916671 604.53811 87.134207 604.53811   L 264.25333 604.53811   C 284.47087 604.53811 300.86245 620.92969 300.86245 641.14723   L 300.86245 733.34519   C 300.86245 753.56273 284.47087 769.95431 264.25333 769.95431   L 87.134207 769.95431   C 66.916671 769.95431 50.525087 753.56273 50.525087 733.34519   z"
-       id="path3017" />
-    <text
-       xml:space="preserve"
-       x="75.950859"
-       y="699.16363"
-       style="font-size:30.007475px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3019">TaskManager</text>
-    <path
-       style="fill:none;stroke:#85888d;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 360.31476 641.14723   C 360.31476 620.92969 376.70635 604.53811 396.92388 604.53811   L 573.78044 604.53811   C 593.99798 604.53811 610.38956 620.92969 610.38956 641.14723   L 610.38956 733.34519   C 610.38956 753.56273 593.99798 769.95431 573.78044 769.95431   L 396.92388 769.95431   C 376.70635 769.95431 360.31476 753.56273 360.31476 733.34519   z"
-       id="path3021" />
-    <text
-       xml:space="preserve"
-       x="385.60929"
-       y="699.16363"
-       style="font-size:30.007475px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3023">TaskManager</text>
-    <path
-       style="fill:none;stroke:#85888d;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 669.9544 641.14723   C 669.9544 620.92969 686.34599 604.53811 706.56352 604.53811   L 883.42008 604.53811   C 903.63762 604.53811 920.0292 620.92969 920.0292 641.14723   L 920.0292 733.34519   C 920.0292 753.56273 903.63762 769.95431 883.42008 769.95431   L 706.56352 769.95431   C 686.34599 769.95431 669.9544 753.56273 669.9544 733.34519   z"
-       id="path3025" />
-    <text
-       xml:space="preserve"
-       x="695.26142"
-       y="699.16363"
-       style="font-size:30.007475px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3027">TaskManager</text>
-    <path
-       style="fill:none;stroke:#85888d;stroke-width:2.4756167px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 979.66906 641.18474   C 979.66906 620.92969 996.02313 604.57561 1016.2032 604.57561   L 1193.0972 604.57561   C 1213.2773 604.57561 1229.7064 620.92969 1229.7064 641.18474   L 1229.7064 733.3827   C 1229.7064 753.56273 1213.2773 769.99182 1193.0972 769.99182   L 1016.2032 769.99182   C 996.02313 769.99182 979.66906 753.56273 979.66906 733.3827   z"
-       id="path3029" />
-    <text
-       xml:space="preserve"
-       x="1004.9137"
-       y="699.16363"
-       style="font-size:30.007475px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3031">TaskManager</text>
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.037509345px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 234.28337 596.51111   L 238.93452 590.54712   L 247.56167 579.85696   L 256.33886 569.35434   L 265.19107 559.00176   L 274.23082 548.83673   L 283.42061 538.85924   L 292.72292 529.0318   L 302.17528 519.35438   L 311.77767 509.90203   L 321.49259 500.59971   L 331.35755 491.44743   L 341.37254 482.4827   L 351.50007 473.70551   L 361.81514 465.11587   L 372.24273 456.67627   L 377.90665 452.21266   L 381.77011 457.16389   L 376.1062 461.55248   L 376.14371 461.51497   L 365.75362 469.95458   L 365.79113 469.91707   L 355.55108 478.50671   L 355.58859 478.4692   L 345.49857 487.20888   L 345.53608 487.17137   L 335.5586 496.09859   L 335.59611 496.06108   L 325.76866 505.17585   L 325.80617 505.13834   L 316.09125 514.40315   L 316.12876 514.36564   L 306.60138 523.818   L 306.63889 523.74298   L 297.22405 533.38288   L 297.22405 533.34537   L 287.95924 543.13531   L 287.99675 543.0978   L 278.88198 553.03778   L 278.91949 553.00027   L 269.91724 563.12779   L 269.917
 24 563.09028   L 261.06504 573.40535   L 261.10255 573.36784   L 252.40038 583.83295   L 252.43789 583.79544   L 243.84825 594.44809   L 243.84825 594.41058   L 239.2346 600.33706   z  M 258.1018 593.2853   L 232.93303 603.33781   L 236.57144 576.48112   C 236.79649 574.7932 238.37188 573.5929 240.09731 573.81795   C 241.78523 574.04301 242.98553 575.6184 242.76048 577.34383   L 239.87226 598.83669   L 235.59619 595.53586   L 255.77622 587.47135   C 257.35161 586.83369 259.18957 587.62139 259.82723 589.19678   C 260.46489 590.80969 259.67719 592.61013 258.1018 593.2853   z  M 357.87666 454.53824   L 384.73335 450.86232   L 374.71835 476.03109   C 374.08069 477.60648 372.24273 478.39418 370.62983 477.75652   C 369.05444 477.11886 368.26674 475.31841 368.9044 473.70551   L 376.9314 453.52548   L 380.26973 457.76404   L 358.73937 460.72728   L 358.73937 460.72728   C 357.01394 460.95233 355.43855 459.75204 355.21349 458.06412   C 354.98844 456.33869 356.18874 454.76329 357.87666 454.53
 824   z"
-       id="path3033" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.037509345px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 480.15712 596.8862   L 480.4947 592.79768   L 480.98232 587.6589   L 481.50746 582.55763   L 482.10761 577.49387   L 482.74526 572.43011   L 483.49545 567.40385   L 484.24564 562.3776   L 485.10835 557.38886   L 486.00858 552.43763   L 486.98382 547.5239   L 487.99657 542.57267   L 489.08434 537.69645   L 490.20962 532.85775   L 491.40992 528.01904   L 492.72275 523.18034   L 494.03558 518.37914   L 495.42342 513.61545   L 496.88629 508.88928   L 498.38666 504.1631   L 499.96205 499.47443   L 501.61246 494.78576   L 503.30038 490.17211   L 505.06332 485.52096   L 506.90128 480.94482   L 508.77675 476.36868   L 510.72723 471.79254   L 512.71523 467.29141   L 514.77824 462.79029   L 516.91628 458.32668   L 518.52918 455.02586   L 524.15558 457.76404   L 522.54268 461.06486   L 522.54268 461.02735   L 520.44216 465.45346   L 520.44216 465.41595   L 518.41665 469.87956   L 518.41665 469.84205   L 516.42866 474.34317   L 516.46616 474.26815   L 514.51568 478.80678   L 514.5
 5319 478.76927   L 512.67772 483.3079   L 512.67772 483.27039   L 510.87727 487.80903   L 510.91478 487.77152   L 509.15184 492.34766   L 509.15184 492.31015   L 507.46392 496.9238   L 507.50143 496.88629   L 505.88853 501.53745   L 505.88853 501.46243   L 504.31314 506.11359   L 504.35065 506.11359   L 502.85027 510.76474   L 502.85027 510.72723   L 501.42492 515.45341   L 501.42492 515.4159   L 500.03707 520.14208   L 500.07458 520.10457   L 498.72424 524.83075   L 498.76175 524.79324   L 497.48644 529.59444   L 497.48644 529.51942   L 496.28614 534.32061   L 496.32365 534.2831   L 495.16086 539.12181   L 495.16086 539.0843   L 494.1106 543.923   L 494.1106 543.8855   L 493.09784 548.76171   L 493.09784 548.7242   L 492.16011 553.60042   L 492.16011 553.56291   L 491.25989 558.51414   L 491.25989 558.47663   L 490.43468 563.39035   L 490.43468 563.35285   L 489.64698 568.34159   L 489.64698 568.30408   L 488.93431 573.29282   L 488.97182 573.25531   L 488.29665 578.24406   L 488.2
 9665 578.20655   L 487.73401 583.27031   L 487.73401 583.2328   L 487.20888 588.29656   L 487.20888 588.25905   L 486.72125 593.36032   L 486.72125 593.32281   L 486.42118 597.37382   z  M 498.08659 580.94473   L 482.85779 603.33781   L 470.89231 579.03175   C 470.10461 577.49387 470.74227 575.6184 472.28016 574.86821   C 473.85555 574.08052 475.73102 574.71818 476.4812 576.29357   L 476.4812 576.29357   L 486.0836 595.76092   L 480.71976 595.38583   L 492.9103 577.41885   C 493.88554 575.99349 495.83603 575.6184 497.26138 576.59364   C 498.68674 577.56889 499.06183 579.51937 498.08659 580.94473   z  M 501.42492 465.56598   L 524.11807 450.86232   L 525.76848 477.86905   C 525.88101 479.59448 524.56818 481.09485 522.84275 481.16987   C 521.11732 481.2824 519.65446 479.96957 519.54193 478.24414   L 518.2291 456.60125   L 523.0303 459.00185   L 504.80076 470.81729   C 503.3754 471.75503 501.42492 471.34242 500.48718 469.91707   C 499.54945 468.4542 499.96205 466.54123 501.42492 465.56
 598   z"
-       id="path3035" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.037509345px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 780.19437 598.12401   L 779.40667 595.23579   L 779.40667 595.2733   L 778.16886 590.80969   L 778.20637 590.84719   L 776.89354 586.38358   L 776.89354 586.38358   L 775.54321 581.88246   L 775.58072 581.91997   L 774.15536 577.38134   L 774.15536 577.41885   L 772.6925 572.88022   L 772.6925 572.91773   L 771.15461 568.34159   L 771.19212 568.34159   L 769.57922 563.76545   L 769.61673 563.80296   L 767.96632 559.1518   L 767.96632 559.18931   L 766.2784 554.53815   L 766.2784 554.57566   L 764.51546 549.9245   L 764.51546 549.9245   L 762.71501 545.23583   L 762.71501 545.27334   L 760.83954 540.58467   L 760.83954 540.58467   L 758.92657 535.8585   L 758.92657 535.89601   L 756.93857 531.13232   L 756.93857 531.16983   L 754.91307 526.40614   L 754.91307 526.40614   L 752.81254 521.60494   L 752.81254 521.64245   L 750.637 516.84126   L 750.637 516.84126   L 748.42395 512.00255   L 748.42395 512.04006   L 746.17339 507.16385   L 746.17339 507.20136   L 743.84781 50
 2.32514   L 743.84781 502.32514   L 741.44721 497.41142   L 741.44721 497.44893   L 739.00911 492.49769   L 739.00911 492.5352   L 736.49598 487.58397   L 736.49598 487.62148   L 733.94534 482.63274   L 733.94534 482.63274   L 731.31969 477.64399   L 731.31969 477.6815   L 728.65653 472.65525   L 728.65653 472.65525   L 725.91834 467.629   L 725.91834 467.629   L 723.10514 462.56524   L 723.14265 462.60275   L 720.40447 457.80155   L 725.84333 454.72578   L 728.58151 459.52698   L 731.39471 464.62825   L 734.13289 469.69201   L 736.83356 474.71826   L 739.49673 479.74452   L 742.08487 484.73326   L 744.598 489.722   L 747.07361 494.67324   L 749.47421 499.58696   L 751.8373 504.50068   L 754.12537 509.3769   L 756.33842 514.25311   L 758.51396 519.09182   L 760.652 523.93052   L 762.71501 528.73172   L 764.70301 533.49541   L 766.65349 538.25909   L 768.52896 542.98527   L 770.36692 547.71145   L 772.12986 552.40012   L 773.85529 557.05128   L 775.5057 561.70243   L 777.08109 566.31
 608   L 778.61897 570.92973   L 780.11935 575.50587   L 781.5447 580.08201   L 782.89504 584.62064   L 784.20787 589.12177   L 785.44567 593.62289   L 786.23337 596.51111   z  M 792.12234 577.26881   L 784.733 603.33781   L 765.71576 584.09551   C 764.47795 582.8577 764.51546 580.86971 765.71576 579.66941   C 766.95357 578.4316 768.94156 578.46911 770.14186 579.66941   L 785.40816 595.12326   L 780.19437 596.4736   L 786.12084 575.58089   C 786.57095 573.89297 788.29638 572.95524 789.9468 573.40535   C 791.63472 573.89297 792.57245 575.6184 792.12234 577.26881   z  M 719.80432 477.94407   L 720.06689 450.86232   L 743.51023 464.40319   L 743.51023 464.40319   C 744.97309 465.26591 745.49822 467.17889 744.63551 468.67926   C 743.77279 470.17963 741.85982 470.70476 740.35944 469.84205   L 721.56726 458.96434   L 726.25593 456.26367   L 726.03087 477.98158   C 726.03087 479.70701 724.60552 481.09485 722.88009 481.09485   C 721.15466 481.05734 719.76681 479.6695 719.80432 477.94407   z"
-       id="path3037" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.037509345px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 1027.4185 601.16226   L 1022.4672 596.21103   L 1022.5047 596.24854   L 1012.8648 586.8712   L 1012.9023 586.90871   L 1002.9249 577.53138   L 1002.9624 577.56889   L 992.64729 568.15404   L 992.6848 568.19155   L 982.10717 558.7392   L 982.14468 558.77671   L 971.22946 549.32435   L 971.22946 549.36186   L 960.01416 539.872   L 960.05167 539.9095   L 948.49879 530.38213   L 948.5363 530.38213   L 936.64584 520.85476   L 936.68335 520.89227   L 924.49281 511.32738   L 924.53032 511.32738   L 912.03971 501.72499   L 912.07722 501.7625   L 899.24903 492.1226   L 899.28653 492.16011   L 886.15826 482.52021   L 886.15826 482.52021   L 872.72992 472.8428   L 872.72992 472.88031   L 858.96399 463.16539   L 859.0015 463.16539   L 849.99926 456.97634   L 853.56264 451.80005   L 862.56489 458.02661   L 876.36833 467.77904   L 889.83418 477.45645   L 902.99996 487.13386   L 915.82816 496.77376   L 928.35628 506.37615   L 940.58432 515.97854   L 952.47479 525.54343   L 964.02766 
 535.0708   L 975.28047 544.59817   L 986.2332 554.08804   L 996.88585 563.54039   L 1007.2009 572.95524   L 1017.1784 582.37008   L 1026.8558 591.74742   L 1031.8446 596.73616   z  M 1027.1184 577.15628   L 1034.0201 603.3003   L 1007.8386 596.43609   C 1006.1507 595.98598 1005.1754 594.29805 1005.6255 592.61013   C 1006.0381 590.95972 1007.7636 589.94697 1009.414 590.39708   L 1030.4192 595.91096   L 1026.5933 599.73691   L 1021.0794 578.73168   C 1020.6293 577.08127 1021.642 575.35584 1023.2924 574.90572   C 1024.9803 574.49312 1026.6683 575.46836 1027.1184 577.15628   z  M 858.17629 475.39343   L 846.69843 450.86232   L 873.66765 452.92534   L 873.66765 452.92534   C 875.39308 453.07537 876.6684 454.57575 876.55587 456.30118   C 876.40583 458.02661 874.90546 459.30192 873.18003 459.15189   L 851.53714 457.50148   L 854.61291 453.07537   L 863.8402 472.73027   C 864.55288 474.30566 863.87771 476.14362 862.33983 476.89381   C 860.76444 477.60648 858.88897 476.93132 858.17629 475.39
 343   z"
-       id="path3039" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.037509345px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 308.55187 688.59655   L 357.46405 688.59655   L 357.46405 693.58529   L 308.55187 693.58529   z  M 322.28029 702.02489   L 303.60063 691.10967   L 322.28029 680.19445   C 323.48059 679.48178 325.01847 679.89438 325.69364 681.09468   C 326.40632 682.29498 325.99371 683.79535 324.79341 684.50803   L 309.78968 693.24771   L 309.78968 688.93413   L 324.79341 697.67381   C 325.99371 698.38649 326.40632 699.92437 325.69364 701.12467   C 325.01847 702.28746 323.48059 702.70006 322.28029 702.02489   z  M 343.73563 680.19445   L 362.4528 691.10967   L 343.73563 702.02489   C 342.53533 702.70006 340.99745 702.28746 340.32228 701.12467   C 339.60961 699.92437 340.02221 698.38649 341.22251 697.67381   L 356.22624 688.93413   L 356.22624 693.24771   L 341.22251 684.50803   C 340.02221 683.79535 339.60961 682.29498 340.32228 681.09468   C 340.99745 679.89438 342.53533 679.48178 343.73563 680.19445   z"
-       id="path3041" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.037509345px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 617.40381 688.59655   L 666.316 688.59655   L 666.316 693.58529   L 617.40381 693.58529   z  M 631.13223 702.02489   L 612.45258 691.10967   L 631.13223 680.19445   C 632.33253 679.48178 633.87041 679.89438 634.54558 681.09468   C 635.25826 682.29498 634.84566 683.79535 633.64536 684.50803   L 618.64162 693.24771   L 618.64162 688.93413   L 633.64536 697.67381   C 634.84566 698.38649 635.25826 699.92437 634.54558 701.12467   C 633.87041 702.28746 632.33253 702.70006 631.13223 702.02489   z  M 652.58758 680.19445   L 671.26723 691.10967   L 652.58758 702.02489   C 651.38728 702.70006 649.84939 702.28746 649.17423 701.12467   C 648.46155 699.92437 648.87415 698.38649 650.07445 697.67381   L 665.07819 688.93413   L 665.07819 693.24771   L 650.07445 684.50803   C 648.87415 683.79535 648.46155 682.29498 649.17423 681.09468   C 649.84939 679.89438 651.38728 679.48178 652.58758 680.19445   z"
-       id="path3043" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.037509345px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 926.25575 688.59655   L 975.16794 688.59655   L 975.16794 693.58529   L 926.25575 693.58529   z  M 939.98417 702.02489   L 921.26701 691.10967   L 939.98417 680.19445   C 941.18447 679.48178 942.72236 679.89438 943.39752 681.09468   C 944.1102 682.29498 943.6976 683.79535 942.4973 684.50803   L 927.49356 693.24771   L 927.49356 688.93413   L 942.4973 697.67381   C 943.6976 698.38649 944.1102 699.92437 943.39752 701.12467   C 942.72236 702.28746 941.18447 702.70006 939.98417 702.02489   z  M 961.43952 680.19445   L 980.11917 691.10967   L 961.43952 702.02489   C 960.23922 702.70006 958.70134 702.28746 957.98866 701.12467   C 957.31349 699.92437 957.72609 698.38649 958.88888 697.67381   L 973.89262 688.93413   L 973.89262 693.24771   L 958.88888 684.50803   C 957.72609 683.79535 957.31349 682.29498 957.98866 681.09468   C 958.70134 679.89438 960.23922 679.48178 961.43952 680.19445   z"
-       id="path3045" />
-  </g>
-</svg>


[20/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/examples.md
----------------------------------------------------------------------
diff --git a/docs/examples.md b/docs/examples.md
deleted file mode 100644
index c19a2fa..0000000
--- a/docs/examples.md
+++ /dev/null
@@ -1,490 +0,0 @@
----
-title:  "Bundled Examples"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-The following example programs showcase different applications of Flink 
-from simple word counting to graph algorithms. The code samples illustrate the 
-use of [Flink's API](programming_guide.html). 
-
-The full source code of the following and more examples can be found in the __flink-java-examples__
-or __flink-scala-examples__ module.
-
-## Word Count
-WordCount is the "Hello World" of Big Data processing systems. It computes the frequency of words in a text collection. The algorithm works in two steps: First, the texts are splits the text to individual words. Second, the words are grouped and counted.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-DataSet<String> text = env.readTextFile("/path/to/file"); 
-
-DataSet<Tuple2<String, Integer>> counts = 
-        // split up the lines in pairs (2-tuples) containing: (word,1)
-        text.flatMap(new Tokenizer())
-        // group by the tuple field "0" and sum up tuple field "1"
-        .groupBy(0)
-        .sum(1);
-
-counts.writeAsCsv(outputPath, "\n", " ");
-
-// User-defined functions
-public static class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
-
-    @Override
-    public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
-        // normalize and split the line
-        String[] tokens = value.toLowerCase().split("\\W+");
-        
-        // emit the pairs
-        for (String token : tokens) {
-            if (token.length() > 0) {
-                out.collect(new Tuple2<String, Integer>(token, 1));
-            }   
-        }
-    }
-}
-~~~
-
-The {% gh_link /flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/wordcount/WordCount.java  "WordCount example" %} implements the above described algorithm with input parameters: `<text input path>, <output path>`. As test data, any text file will do.
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val env = ExecutionEnvironment.getExecutionEnvironment
-
-// get input data
-val text = env.readTextFile("/path/to/file")
-
-val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
-  .map { (_, 1) }
-  .groupBy(0)
-  .sum(1)
-
-counts.writeAsCsv(outputPath, "\n", " ")
-~~~
-
-The {% gh_link /flink-examples/flink-scala-examples/src/main/scala/org/apache/flink/examples/scala/wordcount/WordCount.scala  "WordCount example" %} implements the above described algorithm with input parameters: `<text input path>, <output path>`. As test data, any text file will do.
-
-
-</div>
-</div>
-
-## Page Rank
-
-The PageRank algorithm computes the "importance" of pages in a graph defined by links, which point from one pages to another page. It is an iterative graph algorithm, which means that it repeatedly applies the same computation. In each iteration, each page distributes its current rank over all its neighbors, and compute its new rank as a taxed sum of the ranks it received from its neighbors. The PageRank algorithm was popularized by the Google search engine which uses the importance of webpages to rank the results of search queries.
-
-In this simple example, PageRank is implemented with a [bulk iteration](iterations.html) and a fixed number of iterations.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-// read the pages and initial ranks by parsing a CSV file
-DataSet<Tuple2<Long, Double>> pagesWithRanks = env.readCsvFile(pagesInputPath)
-						   .types(Long.class, Double.class)
-
-// the links are encoded as an adjacency list: (page-id, Array(neighbor-ids))
-DataSet<Tuple2<Long, Long[]>> pageLinkLists = getLinksDataSet(env);
-
-// set iterative data set
-IterativeDataSet<Tuple2<Long, Double>> iteration = pagesWithRanks.iterate(maxIterations);
-
-DataSet<Tuple2<Long, Double>> newRanks = iteration
-        // join pages with outgoing edges and distribute rank
-        .join(pageLinkLists).where(0).equalTo(0).flatMap(new JoinVertexWithEdgesMatch())
-        // collect and sum ranks
-        .groupBy(0).sum(1)
-        // apply dampening factor
-        .map(new Dampener(DAMPENING_FACTOR, numPages));
-
-DataSet<Tuple2<Long, Double>> finalPageRanks = iteration.closeWith(
-        newRanks, 
-        newRanks.join(iteration).where(0).equalTo(0)
-        // termination condition
-        .filter(new EpsilonFilter()));
-
-finalPageRanks.writeAsCsv(outputPath, "\n", " ");
-
-// User-defined functions
-
-public static final class JoinVertexWithEdgesMatch 
-                    implements FlatJoinFunction<Tuple2<Long, Double>, Tuple2<Long, Long[]>, 
-                                            Tuple2<Long, Double>> {
-
-    @Override
-    public void join(<Tuple2<Long, Double> page, Tuple2<Long, Long[]> adj, 
-                        Collector<Tuple2<Long, Double>> out) {
-        Long[] neigbors = adj.f1;
-        double rank = page.f1;
-        double rankToDistribute = rank / ((double) neigbors.length);
-            
-        for (int i = 0; i < neigbors.length; i++) {
-            out.collect(new Tuple2<Long, Double>(neigbors[i], rankToDistribute));
-        }
-    }
-}
-
-public static final class Dampener implements MapFunction<Tuple2<Long,Double>, Tuple2<Long,Double>> {
-    private final double dampening, randomJump;
-
-    public Dampener(double dampening, double numVertices) {
-        this.dampening = dampening;
-        this.randomJump = (1 - dampening) / numVertices;
-    }
-
-    @Override
-    public Tuple2<Long, Double> map(Tuple2<Long, Double> value) {
-        value.f1 = (value.f1 * dampening) + randomJump;
-        return value;
-    }
-}
-
-public static final class EpsilonFilter 
-                implements FilterFunction<Tuple2<Tuple2<Long, Double>, Tuple2<Long, Double>>> {
-
-    @Override
-    public boolean filter(Tuple2<Tuple2<Long, Double>, Tuple2<Long, Double>> value) {
-        return Math.abs(value.f0.f1 - value.f1.f1) > EPSILON;
-    }
-}
-~~~
-
-The {% gh_link /flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/graph/PageRankBasic.java "PageRank program" %} implements the above example.
-It requires the following parameters to run: `<pages input path>, <links input path>, <output path>, <num pages>, <num iterations>`.
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-// User-defined types
-case class Link(sourceId: Long, targetId: Long)
-case class Page(pageId: Long, rank: Double)
-case class AdjacencyList(sourceId: Long, targetIds: Array[Long])
-
-// set up execution environment
-val env = ExecutionEnvironment.getExecutionEnvironment
-
-// read the pages and initial ranks by parsing a CSV file
-val pages = env.readCsvFile[Page](pagesInputPath)
-
-// the links are encoded as an adjacency list: (page-id, Array(neighbor-ids))
-val links = env.readCsvFile[Link](linksInputPath)
-
-// assign initial ranks to pages
-val pagesWithRanks = pages.map(p => Page(p, 1.0 / numPages))
-
-// build adjacency list from link input
-val adjacencyLists = links
-  // initialize lists
-  .map(e => AdjacencyList(e.sourceId, Array(e.targetId)))
-  // concatenate lists
-  .groupBy("sourceId").reduce {
-  (l1, l2) => AdjacencyList(l1.sourceId, l1.targetIds ++ l2.targetIds)
-  }
-
-// start iteration
-val finalRanks = pagesWithRanks.iterateWithTermination(maxIterations) {
-  currentRanks =>
-    val newRanks = currentRanks
-      // distribute ranks to target pages
-      .join(adjacencyLists).where("pageId").equalTo("sourceId") {
-        (page, adjacent, out: Collector[Page]) =>
-        for (targetId <- adjacent.targetIds) {
-          out.collect(Page(targetId, page.rank / adjacent.targetIds.length))
-        }
-      }
-      // collect ranks and sum them up
-      .groupBy("pageId").aggregate(SUM, "rank")
-      // apply dampening factor
-      .map { p =>
-        Page(p.pageId, (p.rank * DAMPENING_FACTOR) + ((1 - DAMPENING_FACTOR) / numPages))
-      }
-
-    // terminate if no rank update was significant
-    val termination = currentRanks.join(newRanks).where("pageId").equalTo("pageId") {
-      (current, next, out: Collector[Int]) =>
-        // check for significant update
-        if (math.abs(current.rank - next.rank) > EPSILON) out.collect(1)
-    }
-
-    (newRanks, termination)
-}
-
-val result = finalRanks
-
-// emit result
-result.writeAsCsv(outputPath, "\n", " ")
-~~~
-
-he {% gh_link /flink-examples/flink-scala-examples/src/main/scala/org/apache/flink/examples/scala/graph/PageRankBasic.scala "PageRank program" %} implements the above example.
-It requires the following parameters to run: `<pages input path>, <links input path>, <output path>, <num pages>, <num iterations>`.
-</div>
-</div>
-
-Input files are plain text files and must be formatted as follows:
-- Pages represented as an (long) ID separated by new-line characters.
-    * For example `"1\n2\n12\n42\n63\n"` gives five pages with IDs 1, 2, 12, 42, and 63.
-- Links are represented as pairs of page IDs which are separated by space characters. Links are separated by new-line characters:
-    * For example `"1 2\n2 12\n1 12\n42 63\n"` gives four (directed) links (1)->(2), (2)->(12), (1)->(12), and (42)->(63).
-
-For this simple implementation it is required that each page has at least one incoming and one outgoing link (a page can point to itself).
-
-## Connected Components
-
-The Connected Components algorithm identifies parts of a larger graph which are connected by assigning all vertices in the same connected part the same component ID. Similar to PageRank, Connected Components is an iterative algorithm. In each step, each vertex propagates its current component ID to all its neighbors. A vertex accepts the component ID from a neighbor, if it is smaller than its own component ID.
-
-This implementation uses a [delta iteration](iterations.html): Vertices that have not changed their component ID do not participate in the next step. This yields much better performance, because the later iterations typically deal only with a few outlier vertices.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-// read vertex and edge data
-DataSet<Long> vertices = getVertexDataSet(env);
-DataSet<Tuple2<Long, Long>> edges = getEdgeDataSet(env).flatMap(new UndirectEdge());
-
-// assign the initial component IDs (equal to the vertex ID)
-DataSet<Tuple2<Long, Long>> verticesWithInitialId = vertices.map(new DuplicateValue<Long>());
-        
-// open a delta iteration
-DeltaIteration<Tuple2<Long, Long>, Tuple2<Long, Long>> iteration =
-        verticesWithInitialId.iterateDelta(verticesWithInitialId, maxIterations, 0);
-
-// apply the step logic: 
-DataSet<Tuple2<Long, Long>> changes = iteration.getWorkset()
-        // join with the edges
-        .join(edges).where(0).equalTo(0).with(new NeighborWithComponentIDJoin())
-        // select the minimum neighbor component ID
-        .groupBy(0).aggregate(Aggregations.MIN, 1)
-        // update if the component ID of the candidate is smaller
-        .join(iteration.getSolutionSet()).where(0).equalTo(0)
-        .flatMap(new ComponentIdFilter());
-
-// close the delta iteration (delta and new workset are identical)
-DataSet<Tuple2<Long, Long>> result = iteration.closeWith(changes, changes);
-
-// emit result
-result.writeAsCsv(outputPath, "\n", " ");
-
-// User-defined functions
-
-public static final class DuplicateValue<T> implements MapFunction<T, Tuple2<T, T>> {
-    
-    @Override
-    public Tuple2<T, T> map(T vertex) {
-        return new Tuple2<T, T>(vertex, vertex);
-    }
-}
-
-public static final class UndirectEdge 
-                    implements FlatMapFunction<Tuple2<Long, Long>, Tuple2<Long, Long>> {
-    Tuple2<Long, Long> invertedEdge = new Tuple2<Long, Long>();
-    
-    @Override
-    public void flatMap(Tuple2<Long, Long> edge, Collector<Tuple2<Long, Long>> out) {
-        invertedEdge.f0 = edge.f1;
-        invertedEdge.f1 = edge.f0;
-        out.collect(edge);
-        out.collect(invertedEdge);
-    }
-}
-
-public static final class NeighborWithComponentIDJoin 
-                implements JoinFunction<Tuple2<Long, Long>, Tuple2<Long, Long>, Tuple2<Long, Long>> {
-
-    @Override
-    public Tuple2<Long, Long> join(Tuple2<Long, Long> vertexWithComponent, Tuple2<Long, Long> edge) {
-        return new Tuple2<Long, Long>(edge.f1, vertexWithComponent.f1);
-    }
-}
-
-public static final class ComponentIdFilter 
-                    implements FlatMapFunction<Tuple2<Tuple2<Long, Long>, Tuple2<Long, Long>>, 
-                                            Tuple2<Long, Long>> {
-
-    @Override
-    public void flatMap(Tuple2<Tuple2<Long, Long>, Tuple2<Long, Long>> value, 
-                        Collector<Tuple2<Long, Long>> out) {
-        if (value.f0.f1 < value.f1.f1) {
-            out.collect(value.f0);
-        }
-    }
-}
-~~~
-
-The {% gh_link /flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/graph/ConnectedComponents.java "ConnectedComponents program" %} implements the above example. It requires the following parameters to run: `<vertex input path>, <edge input path>, <output path> <max num iterations>`.
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-// set up execution environment
-val env = ExecutionEnvironment.getExecutionEnvironment
-
-// read vertex and edge data
-// assign the initial components (equal to the vertex id)
-val vertices = getVerticesDataSet(env).map { id => (id, id) }
-
-// undirected edges by emitting for each input edge the input edges itself and an inverted
-// version
-val edges = getEdgesDataSet(env).flatMap { edge => Seq(edge, (edge._2, edge._1)) }
-
-// open a delta iteration
-val verticesWithComponents = vertices.iterateDelta(vertices, maxIterations, Array(0)) {
-  (s, ws) =>
-
-    // apply the step logic: join with the edges
-    val allNeighbors = ws.join(edges).where(0).equalTo(0) { (vertex, edge) =>
-      (edge._2, vertex._2)
-    }
-
-    // select the minimum neighbor
-    val minNeighbors = allNeighbors.groupBy(0).min(1)
-
-    // update if the component of the candidate is smaller
-    val updatedComponents = minNeighbors.join(s).where(0).equalTo(0) {
-      (newVertex, oldVertex, out: Collector[(Long, Long)]) =>
-        if (newVertex._2 < oldVertex._2) out.collect(newVertex)
-    }
-
-    // delta and new workset are identical
-    (updatedComponents, updatedComponents)
-}
-
-verticesWithComponents.writeAsCsv(outputPath, "\n", " ")
-    
-~~~
-
-The {% gh_link /flink-examples/flink-scala-examples/src/main/scala/org/apache/flink/examples/scala/graph/ConnectedComponents.scala "ConnectedComponents program" %} implements the above example. It requires the following parameters to run: `<vertex input path>, <edge input path>, <output path> <max num iterations>`.
-</div>
-</div>
-
-Input files are plain text files and must be formatted as follows:
-- Vertices represented as IDs and separated by new-line characters.
-    * For example `"1\n2\n12\n42\n63\n"` gives five vertices with (1), (2), (12), (42), and (63).
-- Edges are represented as pairs for vertex IDs which are separated by space characters. Edges are separated by new-line characters:
-    * For example `"1 2\n2 12\n1 12\n42 63\n"` gives four (undirected) links (1)-(2), (2)-(12), (1)-(12), and (42)-(63).
-
-## Relational Query
-
-The Relational Query example assumes two tables, one with `orders` and the other with `lineitems` as specified by the [TPC-H decision support benchmark](http://www.tpc.org/tpch/). TPC-H is a standard benchmark in the database industry. See below for instructions how to generate the input data.
-
-The example implements the following SQL query.
-
-~~~sql
-SELECT l_orderkey, o_shippriority, sum(l_extendedprice) as revenue
-    FROM orders, lineitem
-WHERE l_orderkey = o_orderkey
-    AND o_orderstatus = "F" 
-    AND YEAR(o_orderdate) > 1993
-    AND o_orderpriority LIKE "5%"
-GROUP BY l_orderkey, o_shippriority;
-~~~
-
-The Flink program, which implements the above query looks as follows.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-// get orders data set: (orderkey, orderstatus, orderdate, orderpriority, shippriority)
-DataSet<Tuple5<Integer, String, String, String, Integer>> orders = getOrdersDataSet(env);
-// get lineitem data set: (orderkey, extendedprice)
-DataSet<Tuple2<Integer, Double>> lineitems = getLineitemDataSet(env);
-
-// orders filtered by year: (orderkey, custkey)
-DataSet<Tuple2<Integer, Integer>> ordersFilteredByYear =
-        // filter orders
-        orders.filter(
-            new FilterFunction<Tuple5<Integer, String, String, String, Integer>>() {
-                @Override
-                public boolean filter(Tuple5<Integer, String, String, String, Integer> t) {
-                    // status filter
-                    if(!t.f1.equals(STATUS_FILTER)) {
-                        return false;
-                    // year filter
-                    } else if(Integer.parseInt(t.f2.substring(0, 4)) <= YEAR_FILTER) {
-                        return false;
-                    // order priority filter
-                    } else if(!t.f3.startsWith(OPRIO_FILTER)) {
-                        return false;
-                    }
-                    return true;
-                }
-            })
-        // project fields out that are no longer required
-        .project(0,4).types(Integer.class, Integer.class);
-
-// join orders with lineitems: (orderkey, shippriority, extendedprice)
-DataSet<Tuple3<Integer, Integer, Double>> lineitemsOfOrders = 
-        ordersFilteredByYear.joinWithHuge(lineitems)
-                            .where(0).equalTo(0)
-                            .projectFirst(0,1).projectSecond(1)
-                            .types(Integer.class, Integer.class, Double.class);
-
-// extendedprice sums: (orderkey, shippriority, sum(extendedprice))
-DataSet<Tuple3<Integer, Integer, Double>> priceSums = 
-        // group by order and sum extendedprice
-        lineitemsOfOrders.groupBy(0,1).aggregate(Aggregations.SUM, 2);
-
-// emit result
-priceSums.writeAsCsv(outputPath);
-~~~
-
-The {% gh_link /flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/relational/RelationalQuery.java "Relational Query program" %} implements the above query. It requires the following parameters to run: `<orders input path>, <lineitem input path>, <output path>`.
-
-</div>
-<div data-lang="scala" markdown="1">
-Coming soon...
-
-The {% gh_link /flink-examples/flink-scala-examples/src/main/scala/org/apache/flink/examples/scala/relational/RelationalQuery.scala "Relational Query program" %} implements the above query. It requires the following parameters to run: `<orders input path>, <lineitem input path>, <output path>`.
-
-</div>
-</div>
-
-The orders and lineitem files can be generated using the [TPC-H benchmark](http://www.tpc.org/tpch/) suite's data generator tool (DBGEN). 
-Take the following steps to generate arbitrary large input files for the provided Flink programs:
-
-1.  Download and unpack DBGEN
-2.  Make a copy of *makefile.suite* called *Makefile* and perform the following changes:
-
-~~~bash
-DATABASE = DB2
-MACHINE  = LINUX
-WORKLOAD = TPCH
-CC       = gcc
-~~~
-
-1.  Build DBGEN using *make*
-2.  Generate lineitem and orders relations using dbgen. A scale factor
-    (-s) of 1 results in a generated data set with about 1 GB size.
-
-~~~bash
-./dbgen -T o -s 1
-~~~

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/favicon.ico
----------------------------------------------------------------------
diff --git a/docs/favicon.ico b/docs/favicon.ico
deleted file mode 100644
index 41f40ed..0000000
Binary files a/docs/favicon.ico and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/favicon.png
----------------------------------------------------------------------
diff --git a/docs/favicon.png b/docs/favicon.png
deleted file mode 100644
index 54bbfd5..0000000
Binary files a/docs/favicon.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/fig/LICENSE.txt
----------------------------------------------------------------------
diff --git a/docs/fig/LICENSE.txt b/docs/fig/LICENSE.txt
new file mode 100644
index 0000000..35b8673
--- /dev/null
+++ b/docs/fig/LICENSE.txt
@@ -0,0 +1,17 @@
+All image files in the folder and its subfolders are
+licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/fig/overview-stack-0.9.png
----------------------------------------------------------------------
diff --git a/docs/fig/overview-stack-0.9.png b/docs/fig/overview-stack-0.9.png
new file mode 100644
index 0000000..70b775a
Binary files /dev/null and b/docs/fig/overview-stack-0.9.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/flink_on_tez_guide.md
----------------------------------------------------------------------
diff --git a/docs/flink_on_tez_guide.md b/docs/flink_on_tez_guide.md
deleted file mode 100644
index 5cc1e31..0000000
--- a/docs/flink_on_tez_guide.md
+++ /dev/null
@@ -1,293 +0,0 @@
----
-title: "Running Flink on YARN leveraging Tez"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-
-<a href="#top"></a>
-
-## Introduction
-
-You can run Flink using Tez as an execution environment. Flink on Tez 
-is currently included in *flink-staging* in alpha. All classes are
-located in the *org.apache.flink.tez* package.
-
-## Why Flink on Tez
-
-[Apache Tez](tez.apache.org) is a scalable data processing
-platform. Tez provides an API for specifying a directed acyclic
-graph (DAG), and functionality for placing the DAG vertices in YARN
-containers, as well as data shuffling.  In Flink's architecture,
-Tez is at about the same level as Flink's network stack. While Flink's
-network stack focuses heavily on low latency in order to support 
-pipelining, data streaming, and iterative algorithms, Tez
-focuses on scalability and elastic resource usage.
-
-Thus, by replacing Flink's network stack with Tez, users can get scalability
-and elastic resource usage in shared clusters while retaining Flink's 
-APIs, optimizer, and runtime algorithms (local sorts, hash tables, etc).
-
-Flink programs can run almost unmodified using Tez as an execution
-environment. Tez supports local execution (e.g., for debugging), and 
-remote execution on YARN.
-
-
-## Local execution
-
-The `LocalTezEnvironment` can be used run programs using the local
-mode provided by Tez. This example shows how WordCount can be run using the Tez local mode.
-It is identical to a normal Flink WordCount, except that the `LocalTezEnvironment` is used.
-To run in local Tez mode, you can simply run a Flink on Tez program
-from your IDE (e.g., right click and run).
-  
-{% highlight java %}
-public class WordCountExample {
-    public static void main(String[] args) throws Exception {
-        final LocalTezEnvironment env = LocalTezEnvironment.create();
-
-        DataSet<String> text = env.fromElements(
-            "Who's there?",
-            "I think I hear them. Stand, ho! Who's there?");
-
-        DataSet<Tuple2<String, Integer>> wordCounts = text
-            .flatMap(new LineSplitter())
-            .groupBy(0)
-            .sum(1);
-
-        wordCounts.print();
-
-        env.execute("Word Count Example");
-    }
-
-    public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
-        @Override
-        public void flatMap(String line, Collector<Tuple2<String, Integer>> out) {
-            for (String word : line.split(" ")) {
-                out.collect(new Tuple2<String, Integer>(word, 1));
-            }
-        }
-    }
-}
-{% endhighlight %}
-
-## YARN execution
-
-### Setup
-
-- Install Tez on your Hadoop 2 cluster following the instructions from the
-  [Apache Tez website](http://tez.apache.org/install.html). If you are able to run 
-  the examples that ship with Tez, then Tez has been successfully installed.
-  
-- Currently, you need to build Flink yourself to obtain Flink on Tez
-  (the reason is a Hadoop version compatibility: Tez releases artifacts
-  on Maven central with a Hadoop 2.6.0 dependency). Build Flink
-  using `mvn -DskipTests clean package -Pinclude-tez -Dhadoop.version=X.X.X -Dtez.version=X.X.X`.
-  Make sure that the Hadoop version matches the version that Tez uses.
-  Obtain the jar file contained in the Flink distribution under
-  `flink-staging/flink-tez/target/flink-tez-x.y.z-flink-fat-jar.jar` 
-  and upload it to some directory in HDFS. E.g., to upload the file
-  to the directory `/apps`, execute
-  {% highlight bash %}
-  $ hadoop fs -put /path/to/flink-tez-x.y.z-flink-fat-jar.jar /apps
-  {% endhighlight %}  
- 
-- Edit the tez-site.xml configuration file, adding an entry that points to the
-  location of the file. E.g., assuming that the file is in the directory `/apps/`, 
-  add the following entry to tez-site.xml:
-    {% highlight xml %}
-<property>
-  <name>tez.aux.uris</name>
-  <value>${fs.default.name}/apps/flink-tez-x.y.z-flink-fat-jar.jar</value>
-</property>
-    {% endhighlight %}  
-    
-- At this point, you should be able to run the pre-packaged examples, e.g., run WordCount:
-  {% highlight bash %}
-  $ hadoop jar /path/to/flink-tez-x.y.z-flink-fat-jar.jar wc hdfs:/path/to/text hdfs:/path/to/output
-  {% endhighlight %}  
-
-
-### Packaging your program
-
-Application packaging is currently a bit different than in Flink standalone mode.
-  Flink programs that run on Tez need to be packaged in a "fat jar"
-  file that contain the Flink client. This jar can then be executed via the `hadoop jar` command.
-  An easy way to do that is to use the provided `flink-tez-quickstart` maven archetype.
-  Create a new project as
-  
-  {% highlight bash %}
-  $ mvn archetype:generate                             \
-    -DarchetypeGroupId=org.apache.flink              \
-    -DarchetypeArtifactId=flink-tez-quickstart           \
-    -DarchetypeVersion={{site.FLINK_VERSION_SHORT}}
-  {% endhighlight %}
-  
-  and specify the group id, artifact id, version, and package of your project. For example,
-  let us assume the following options: `org.myorganization`, `flink-on-tez`, `0.1`, and `org.myorganization`.
-  You should see the following output on your terminal:
-  
-  {% highlight bash %}
-  $ mvn archetype:generate -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-tez-quickstart
-  [INFO] Scanning for projects...
-  [INFO]
-  [INFO] ------------------------------------------------------------------------
-  [INFO] Building Maven Stub Project (No POM) 1
-  [INFO] ------------------------------------------------------------------------
-  [INFO]
-  [INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) > generate-sources @ standalone-pom >>>
-  [INFO]
-  [INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) < generate-sources @ standalone-pom <<<
-  [INFO]
-  [INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
-  [INFO] Generating project in Interactive mode
-  [INFO] Archetype [org.apache.flink:flink-tez-quickstart:0.9-SNAPSHOT] found in catalog local
-  Define value for property 'groupId': : org.myorganization
-  Define value for property 'artifactId': : flink-on-tez
-  Define value for property 'version':  1.0-SNAPSHOT: : 0.1
-  Define value for property 'package':  org.myorganization: :
-  Confirm properties configuration:
-  groupId: org.myorganization
-  artifactId: flink-on-tez
-  version: 0.1
-  package: org.myorganization
-   Y: : Y
-  [INFO] ----------------------------------------------------------------------------
-  [INFO] Using following parameters for creating project from Archetype: flink-tez-quickstart:0.9-SNAPSHOT
-  [INFO] ----------------------------------------------------------------------------
-  [INFO] Parameter: groupId, Value: org.myorganization
-  [INFO] Parameter: artifactId, Value: flink-on-tez
-  [INFO] Parameter: version, Value: 0.1
-  [INFO] Parameter: package, Value: org.myorganization
-  [INFO] Parameter: packageInPathFormat, Value: org/myorganization
-  [INFO] Parameter: package, Value: org.myorganization
-  [INFO] Parameter: version, Value: 0.1
-  [INFO] Parameter: groupId, Value: org.myorganization
-  [INFO] Parameter: artifactId, Value: flink-on-tez
-  [INFO] project created from Archetype in dir: /Users/kostas/Dropbox/flink-tez-quickstart-test/flink-on-tez
-  [INFO] ------------------------------------------------------------------------
-  [INFO] BUILD SUCCESS
-  [INFO] ------------------------------------------------------------------------
-  [INFO] Total time: 44.130 s
-  [INFO] Finished at: 2015-02-26T17:59:45+01:00
-  [INFO] Final Memory: 15M/309M
-  [INFO] ------------------------------------------------------------------------
-  {% endhighlight %}
-  
-  The project contains an example called `YarnJob.java` that provides the skeleton 
-  for a Flink-on-Tez job. Program execution is currently done using Hadoop's `ProgramDriver`, 
-  see the `Driver.java` class for an example. Create the fat jar using 
-  `mvn -DskipTests clean package`. The resulting jar will be located in the `target/` directory. 
-  You can now execute a job as follows:
-  
-  {% highlight bash %}
-$ mvn -DskipTests clean package
-$ hadoop jar flink-on-tez/target/flink-on-tez-0.1-flink-fat-jar.jar yarnjob [command-line parameters]
-  {% endhighlight %}
-  
-  Flink programs that run on YARN using Tez as an execution engine need to use the `RemoteTezEnvironment` and 
-  register the class that contains the `main` method with that environment:
-  {% highlight java %}
-  public class WordCountExample {
-      public static void main(String[] args) throws Exception {
-          final RemoteTezEnvironment env = RemoteTezEnvironment.create();
-  
-          DataSet<String> text = env.fromElements(
-              "Who's there?",
-              "I think I hear them. Stand, ho! Who's there?");
-  
-          DataSet<Tuple2<String, Integer>> wordCounts = text
-              .flatMap(new LineSplitter())
-              .groupBy(0)
-              .sum(1);
-  
-          wordCounts.print();
-      
-          env.registerMainClass(WordCountExample.class);
-          env.execute("Word Count Example");
-      }
-  
-      public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
-          @Override
-          public void flatMap(String line, Collector<Tuple2<String, Integer>> out) {
-              for (String word : line.split(" ")) {
-                  out.collect(new Tuple2<String, Integer>(word, 1));
-              }
-          }
-      }
-  }
-  {% endhighlight %}
-
-
-## How it works
-
-Flink on Tez reuses the Flink APIs, the Flink optimizer,
-and the Flink local runtime, including Flink's hash table and sort implementations. Tez
-replaces Flink's network stack and control plan, and is responsible for scheduling and
-network shuffles.
-
-The figure below shows how a Flink program passes through the Flink stack and generates
-a Tez DAG (instead of a JobGraph that would be created using normal Flink execution).
-
-<div style="text-align: center;">
-<img src="img/flink_on_tez_translation.png" alt="Translation of a Flink program to a Tez DAG." height="600px" vspace="20px" style="text-align: center;"/>
-</div>
-
-All local processing, including memory management, sorting, and hashing is performed by
-Flink as usual. Local processing is encapsulated in Tez vertices, as seen in the figure
-below. Tez vertices are connected by edges. Tez is currently based on a key-value data
-model. In the current implementation, the elements that are processed by Flink operators
-are wrapped inside Tez values, and the Tez key field is used to indicate the index of the target task
-that the elements are destined to.
-
-<div style="text-align: center;">
-<img src="img/flink_tez_vertex.png" alt="Encapsulation of Flink runtime inside Tez vertices." height="200px" vspace="20px" style="text-align: center;"/>
-</div>
-
-## Limitations
-
-Currently, Flink on Tez does not support all features of the Flink API. We are working
-to enable all of the missing features listed below. In the meantime, if your project depends on these features, we suggest
-to use [Flink on YARN]({{site.baseurl}}/yarn_setup.html) or [Flink standalone]({{site.baseurl}}/setup_quickstart.html).
-
-The following features are currently missing.
-
-- Dedicated client: jobs need to be submitted via Hadoop's command-line client
-
-- Self-joins: currently binary operators that receive the same input are not supported due to 
-  [TEZ-1190](https://issues.apache.org/jira/browse/TEZ-1190).
-
-- Iterative programs are currently not supported.
-
-- Broadcast variables are currently not supported.
-
-- Accummulators and counters are currently not supported.
-
-- Performance: The current implementation has not been heavily tested for performance, and misses several optimizations,
-  including task chaining.
-
-- Streaming API: Streaming programs will not currently compile to Tez DAGs.
-
-- Scala API: The current implementation has only been tested with the Java API.
-
-
-

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/gce_setup.md
----------------------------------------------------------------------
diff --git a/docs/gce_setup.md b/docs/gce_setup.md
deleted file mode 100644
index 9b8c441..0000000
--- a/docs/gce_setup.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title:  "Google Compute Engine Setup"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-
-This documentation provides instructions on how to setup Flink fully
-automatically with Hadoop 1 or Hadoop 2 on top of a
-[Google Compute Engine](https://cloud.google.com/compute/) cluster. This is made
-possible by Google's [bdutil](https://cloud.google.com/hadoop/bdutil) which
-starts a cluster and deploys Flink with Hadoop. To get started, just follow the
-steps below:
-
-# Prerequisites
-
-## Install Google Cloud SDK
-
-Please follow the instructions on how to setup the
-[Google Cloud SDK](https://cloud.google.com/sdk/).
-
-## Install bdutil
-
-At the moment, there is no bdutil release yet which includes the Flink
-extension. However, you can get the latest version of bdutil with Flink support
-from [GitHub](https://github.com/GoogleCloudPlatform/bdutil):
-
-    git clone https://github.com/GoogleCloudPlatform/bdutil.git
-
-After you have downloaded the source, change into the newly created `bdutil`
-directory and continue with the next steps.
-
-# Deploying Flink on Google Compute Engine
-
-## Set up a bucket
-
-If you have not done so, create a bucket for the bdutil config and
-staging files. A new bucket can be created with gsutil:
-
-    gsutil mb gs://<bucket_name>
-
-
-## Adapt the bdutil config
-
-To deploy Flink with bdutil, adapt at least the following variables in
-bdutil_env.sh.
-
-    CONFIGBUCKET="<bucket_name>"
-    PROJECT="<compute_engine_project_name>"
-    NUM_WORKERS=<number_of_workers>
-
-## Adapt the Flink config
-
-bdutil's Flink extension handles the configuration for you. You may additionally
-adjust configuration variables in `extensions/flink/flink_env.sh`. If you want
-to make further configuration, please take a look at
-[configuring Flink](config.md). You will have to restart Flink after changing
-its configuration using `bin/stop-cluster` and `bin/start-cluster`.
-
-## Bring up a cluster with Flink
-
-To bring up the Flink cluster on Google Compute Engine, execute:
-
-    ./bdutil -e extensions/flink/flink_env.sh deploy
-
-## Run a Flink example job:
-
-    ./bdutil shell
-    cd /home/hadoop/flink-install/bin
-    ./flink run ../examples/flink-java-examples-*-WordCount.jar gs://dataflow-samples/shakespeare/othello.txt gs://<bucket_name>/output

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/gelly_guide.md
----------------------------------------------------------------------
diff --git a/docs/gelly_guide.md b/docs/gelly_guide.md
deleted file mode 100644
index cc85296..0000000
--- a/docs/gelly_guide.md
+++ /dev/null
@@ -1,487 +0,0 @@
----
-title: "Gelly: Flink Graph API"
-is_beta: true
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-<a href="#top"></a>
-
-Introduction
-------------
-
-Gelly is a Java Graph API for Flink. It contains a set of methods and utilities which aim to simplify the development of graph analysis applications in Flink. In Gelly, graphs can be transformed and modified using high-level functions similar to the ones provided by the batch processing API. Gelly provides methods to create, transform and modify graphs, as well as a library of graph algorithms.
-
-Using Gelly
------------
-
-Gelly is currently part of the *staging* Maven project. All relevant classes are located in the *org.apache.flink.graph* package.
-
-Add the following dependency to your `pom.xml` to use Gelly.
-
-~~~xml
-<dependency>
-    <groupId>org.apache.flink</groupId>
-    <artifactId>flink-gelly</artifactId>
-    <version>{{site.FLINK_VERSION_SHORT}}</version>
-</dependency>
-~~~
-
-The remaining sections provide a description of available methods and present several examples of how to use Gelly and how to mix it with the Flink Java API. After reading this guide, you might also want to check the {% gh_link /flink-staging/flink-gelly/src/main/java/org/apache/flink/graph/example/ "Gelly examples" %}.
-
-Graph Representation
------------
-
-In Gelly, a `Graph` is represented by a `DataSet` of vertices and a `DataSet` of edges.
-
-The `Graph` nodes are represented by the `Vertex` type. A `Vertex` is defined by a unique ID and a value. `Vertex` IDs should implement the `Comparable` interface. Vertices without value can be represented by setting the value type to `NullValue`.
-
-{% highlight java %}
-// create a new vertex with a Long ID and a String value
-Vertex<Long, String> v = new Vertex<Long, String>(1L, "foo");
-
-// create a new vertex with a Long ID and no value
-Vertex<Long, NullValue> v = new Vertex<Long, NullValue>(1L, NullValue.getInstance());
-{% endhighlight %}
-
-The graph edges are represented by the `Edge` type. An `Edge` is defined by a source ID (the ID of the source `Vertex`), a target ID (the ID of the target `Vertex`) and an optional value. The source and target IDs should be of the same type as the `Vertex` IDs. Edges with no value have a `NullValue` value type.
-
-{% highlight java %}
-Edge<Long, Double> e = new Edge<Long, Double>(1L, 2L, 0.5);
-
-// reverse the source and target of this edge
-Edge<Long, Double> reversed = e.reverse();
-
-Double weight = e.getValue(); // weight = 0.5
-{% endhighlight %}
-
-[Back to top](#top)
-
-Graph Creation
------------
-
-You can create a `Graph` in the following ways:
-
-* from a `DataSet` of edges and an optional `DataSet` of vertices:
-
-{% highlight java %}
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-DataSet<Vertex<String, Long>> vertices = ...
-
-DataSet<Edge<String, Double>> edges = ...
-
-Graph<String, Long, Double> graph = Graph.fromDataSet(vertices, edges, env);
-{% endhighlight %}
-
-* from a `DataSet` of `Tuple3` and an optional `DataSet` of `Tuple2`. In this case, Gelly will convert each `Tuple3` to an `Edge`, where the first field will be the source ID, the second field will be the target ID and the third field will be the edge value. Equivalently, each `Tuple2` will be converted to a `Vertex`, where the first field will be the vertex ID and the second field will be the vertex value:
-
-{% highlight java %}
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-DataSet<Tuple2<String, Long>> vertexTuples = env.readCsvFile("path/to/vertex/input");
-
-DataSet<Tuple3<String, String, Double>> edgeTuples = env.readCsvFile("path/to/edge/input");
-
-Graph<String, Long, Double> graph = Graph.fromTupleDataSet(vertexTuples, edgeTuples, env);
-{% endhighlight %}
-
-* from a `Collection` of edges and an optional `Collection` of vertices:
-
-{% highlight java %}
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-List<Vertex<Long, Long>> vertexList = new ArrayList...
-
-List<Edge<Long, String>> edgeList = new ArrayList...
-
-Graph<Long, Long, String> graph = Graph.fromCollection(vertexList, edgeList, env);
-{% endhighlight %}
-
-If no vertex input is provided during Graph creation, Gelly will automatically produce the `Vertex` `DataSet` from the edge input. In this case, the created vertices will have no values. Alternatively, you can provide a `MapFunction` as an argument to the creation method, in order to initialize the `Vertex` values:
-
-{% highlight java %}
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-// initialize the vertex value to be equal to the vertex ID
-Graph<Long, Long, String> graph = Graph.fromCollection(edges, 
-				new MapFunction<Long, Long>() {
-					public Long map(Long value) { 
-						return value; 
-					} 
-				}, env);
-{% endhighlight %}
-
-[Back to top](#top)
-
-Graph Properties
-------------
-
-Gelly includes the following methods for retrieving various Graph properties and metrics:
-
-{% highlight java %}
-// get the Vertex DataSet
-DataSet<Vertex<K, VV>> getVertices()
-
-// get the Edge DataSet
-DataSet<Edge<K, EV>> getEdges()
-
-// get the IDs of the vertices as a DataSet
-DataSet<K> getVertexIds()
-
-// get the source-target pairs of the edge IDs as a DataSet
-DataSet<Tuple2<K, K>> getEdgeIds() 
-
-// get a DataSet of <vertex ID, in-degree> pairs for all vertices
-DataSet<Tuple2<K, Long>> inDegrees() 
-
-// get a DataSet of <vertex ID, out-degree> pairs for all vertices
-DataSet<Tuple2<K, Long>> outDegrees()
-
-// get a DataSet of <vertex ID, degree> pairs for all vertices, where degree is the sum of in- and out- degrees
-DataSet<Tuple2<K, Long>> getDegrees()
-
-// get the number of vertices
-long numberOfVertices()
-
-// get the number of edges
-long numberOfEdges()
-
-// get a DataSet of Triplets<srcVertex, trgVertex, edge>
-DataSet<Triplet<K, VV, EV>> getTriplets()
-
-{% endhighlight %}
-
-[Back to top](#top)
-
-Graph Transformations
------------------
-
-* <strong>Map</strong>: Gelly provides specialized methods for applying a map transformation on the vertex values or edge values. `mapVertices` and `mapEdges` return a new `Graph`, where the IDs of the vertices (or edges) remain unchanged, while the values are transformed according to the provided user-defined map function. The map functions also allow changing the type of the vertex or edge values.
-
-{% highlight java %}
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-Graph<Long, Long, Long> graph = Graph.fromDataSet(vertices, edges, env);
-
-// increment each vertex value by one
-Graph<Long, Long, Long> updatedGraph = graph.mapVertices(
-				new MapFunction<Vertex<Long, Long>, Long>() {
-					public Long map(Vertex<Long, Long> value) {
-						return value.getValue() + 1;
-					}
-				});
-{% endhighlight %}
-
-* <strong>Filter</strong>: A filter transformation applies a user-defined filter function on the vertices or edges of the `Graph`. `filterOnEdges` will create a sub-graph of the original graph, keeping only the edges that satisfy the provided predicate. Note that the vertex dataset will not be modified. Respectively, `filterOnVertices` applies a filter on the vertices of the graph. Edges whose source and/or target do not satisfy the vertex predicate are removed from the resulting edge dataset. The `subgraph` method can be used to apply a filter function to the vertices and the edges at the same time.
-
-{% highlight java %}
-Graph<Long, Long, Long> graph = ...
-
-graph.subgraph(
-		new FilterFunction<Vertex<Long, Long>>() {
-			   	public boolean filter(Vertex<Long, Long> vertex) {
-					// keep only vertices with positive values
-					return (vertex.getValue() > 0);
-			   }
-		   },
-		new FilterFunction<Edge<Long, Long>>() {
-				public boolean filter(Edge<Long, Long> edge) {
-					// keep only edges with negative values
-					return (edge.getValue() < 0);
-				}
-		})
-{% endhighlight %}
-
-<p class="text-center">
-    <img alt="Filter Transformations" width="80%" src="img/gelly-filter.png"/>
-</p>
-
-* <strong>Join</strong>: Gelly provides specialized methods for joining the vertex and edge datasets with other input datasets. `joinWithVertices` joins the vertices with a `Tuple2` input data set. The join is performed using the vertex ID and the first field of the `Tuple2` input as the join keys. The method returns a new `Graph` where the vertex values have been updated according to a provided user-defined map function.
-Similarly, an input dataset can be joined with the edges, using one of three methods. `joinWithEdges` expects an input `DataSet` of `Tuple3` and joins on the composite key of both source and target vertex IDs. `joinWithEdgesOnSource` expects a `DataSet` of `Tuple2` and joins on the source key of the edges and the first attribute of the input dataset and `joinWithEdgesOnTarget` expects a `DataSet` of `Tuple2` and joins on the target key of the edges and the first attribute of the input dataset. All three methods apply a map function on the edge and the input data set values.
-Note that if the input dataset contains a key multiple times, all Gelly join methods will only consider the first value encountered.
-
-{% highlight java %}
-Graph<Long, Double, Double> network = ...
-
-DataSet<Tuple2<Long, Long>> vertexOutDegrees = network.outDegrees();
-
-// assign the transition probabilities as the edge weights
-Graph<Long, Double, Double> networkWithWeights = network.joinWithEdgesOnSource(vertexOutDegrees,
-				new MapFunction<Tuple2<Double, Long>, Double>() {
-					public Double map(Tuple2<Double, Long> value) {
-						return value.f0 / value.f1;
-					}
-				});
-{% endhighlight %}
-
-* <strong>Reverse</strong>: the `reverse()` method returns a new `Graph` where the direction of all edges has been reversed.
-
-* <strong>Undirected</strong>: In Gelly, a `Graph` is always directed. Undirected graphs can be represented by adding all opposite-direction edges to a graph. For this purpose, Gelly provides the `getUndirected()` method.
-
-* <strong>Union</strong>: Gelly's `union()` method performs a union on the vertex and edges sets of the input graphs. Duplicate vertices are removed from the resulting `Graph`, while if duplicate edges exists, these will be maintained.
-
-<p class="text-center">
-    <img alt="Union Transformation" width="50%" src="img/gelly-union.png"/>
-</p>
-
-[Back to top](#top)
-
-Graph Mutations
------------
-
-Gelly includes the following methods for adding and removing vertices and edges from an input `Graph`:
-
-{% highlight java %}
-// adds a Vertex and the given edges to the Graph. If the Vertex already exists, it will not be added again, but the given edges will.
-Graph<K, VV, EV> addVertex(final Vertex<K, VV> vertex, List<Edge<K, EV>> edges)
-
-// adds an Edge to the Graph. If the source and target vertices do not exist in the graph, they will also be added.
-Graph<K, VV, EV> addEdge(Vertex<K, VV> source, Vertex<K, VV> target, EV edgeValue)
-
-// removes the given Vertex and its edges from the Graph.
-Graph<K, VV, EV> removeVertex(Vertex<K, VV> vertex)
-
-// removes *all* edges that match the given Edge from the Graph.
-Graph<K, VV, EV> removeEdge(Edge<K, EV> edge)
-{% endhighlight %}
-
-Neighborhood Methods
------------
-
-Neighborhood methods allow vertices to perform an aggregation on their first-hop neighborhood.
-
-`reduceOnEdges()` can be used to compute an aggregation on the neighboring edges of a vertex, while `reduceOnNeighbors()` has access on both the neighboring edges and vertices. The neighborhood scope is defined by the `EdgeDirection` parameter, which takes the values `IN`, `OUT` or `ALL`. `IN` will gather all in-coming edges (neighbors) of a vertex, `OUT` will gather all out-going edges (neighbors), while `ALL` will gather all edges (neighbors).
-
-For example, assume that you want to select the minimum weight of all out-edges for each vertex in the following graph:
-
-<p class="text-center">
-    <img alt="reduceOnEdges Example" width="50%" src="img/gelly-example-graph.png"/>
-</p>
-
-The following code will collect the out-edges for each vertex and apply the `SelectMinWeight()` user-defined function on each of the resulting neighborhoods:
-
-{% highlight java %}
-Graph<Long, Long, Double> graph = ...
-
-DataSet<Tuple2<Long, Double>> minWeights = graph.reduceOnEdges(
-				new SelectMinWeight(), EdgeDirection.OUT);
-
-// user-defined function to select the minimum weight
-static final class SelectMinWeight implements EdgesFunction<Long, Double, Tuple2<Long, Double>> {
-
-    public Tuple2<Long, Double> iterateEdges(Iterable<Tuple2<Long, Edge<Long, Double>>> edges) {
-
-        long minWeight = Double.MAX_VALUE;
-        long vertexId = -1;
-
-        for (Tuple2<Long, Edge<Long, Double>> edge: edges) {
-            if (edge.f1.getValue() < weight) {
-            weight = edge.f1.getValue();
-            vertexId = edge.f0;
-        }
-        return new Tuple2<Long, Double>(vertexId, minWeight);
-    }
-}
-{% endhighlight %}
-
-<p class="text-center">
-    <img alt="reduceOnEdges Example" width="50%" src="img/gelly-reduceOnEdges.png"/>
-</p>
-
-Similarly, assume that you would like to compute the sum of the values of all in-coming neighbors, for every vertex. The following code will collect the in-coming neighbors for each vertex and apply the `SumValues()` user-defined function on each neighborhood:
-
-{% highlight java %}
-Graph<Long, Long, Double> graph = ...
-
-DataSet<Tuple2<Long, Long>> verticesWithSum = graph.reduceOnNeighbors(
-				new SumValues(), EdgeDirection.IN);
-
-// user-defined function to sum the neighbor values
-static final class SumValues implements NeighborsFunction<Long, Long, Double, Tuple2<Long, Long>> {
-		
-	public Tuple2<Long, Long> iterateNeighbors(Iterable<Tuple3<Long, Edge<Long, Double>, 
-		Vertex<Long, Long>>> neighbors) {
-		
-		long sum = 0;
-		long vertexId = -1;
-
-		for (Tuple3<Long, Edge<Long, Double>, Vertex<Long, Long>> neighbor : neighbors) {
-			vertexId = neighbor.f0;
-			sum += neighbor.f2.getValue();
-		}
-		return new Tuple2<Long, Long>(vertexId, sum);
-	}
-}
-{% endhighlight %}
-
-<p class="text-center">
-    <img alt="reduseOnNeighbors Example" width="70%" src="img/gelly-reduceOnNeighbors.png"/>
-</p>
-
-When the aggregation computation does not require access to the vertex value (for which the aggregation is performed), it is advised to use the more efficient `EdgesFunction` and `NeighborsFunction` for the user-defined functions. When access to the vertex value is required, one should use `EdgesFunctionWithVertexValue` and `NeighborsFunctionWithVertexValue` instead. 
-
-[Back to top](#top)
-
-Vertex-centric Iterations
------------
-
-Gelly wraps Flink's [Spargel API](spargel_guide.html) to provide methods for vertex-centric iterations.
-Like in Spargel, the user only needs to implement two functions: a `VertexUpdateFunction`, which defines how a vertex will update its value
-based on the received messages and a `MessagingFunction`, which allows a vertex to send out messages for the next superstep.
-These functions and the maximum number of iterations to run are given as parameters to Gelly's `runVertexCentricIteration`.
-This method will execute the vertex-centric iteration on the input Graph and return a new Graph, with updated vertex values:
-
-{% highlight java %}
-Graph<Long, Double, Double> graph = ...
-
-// run Single-Source-Shortest-Paths vertex-centric iteration
-Graph<Long, Double, Double> result = 
-			graph.runVertexCentricIteration(
-			new VertexDistanceUpdater(), new MinDistanceMessenger(), maxIterations);
-
-// user-defined functions
-public static final class VertexDistanceUpdater {...}
-public static final class MinDistanceMessenger {...}
-
-{% endhighlight %}
-
-### Configuring a Vertex-Centric Iteration
-A vertex-centric iteration can be configured using an `IterationConfiguration` object.
-Currently, the following parameters can be specified:
-
-* <strong>Name</strong>: The name for the vertex-centric iteration. The name is displayed in logs and messages 
-and can be specified using the `setName()` method.
-
-* <strong>Parallelism</strong>: The parallelism for the iteration. It can be set using the `setParallelism()` method.	
-
-* <strong>Solution set in unmanaged memory</strong>: Defines whether the solution set is kept in managed memory (Flink's internal way of keeping objects in serialized form) or as a simple object map. By default, the solution set runs in managed memory. This property can be set using the `setSolutionSetUnmanagedMemory()` method.
-
-* <strong>Aggregators</strong>: Iteration aggregators can be registered using the `registerAggregator()` method. An iteration aggregator combines
-all aggregates globally once per superstep and makes them available in the next superstep. Registered aggregators can be accessed inside the user-defined `VertexUpdateFunction` and `MessagingFunction`.
-
-* <strong>Broadcast Variables</strong>: DataSets can be added as [Broadcast Variables](programming_guide.html#broadcast-variables) to the `VertexUpdateFunction` and `MessagingFunction`, using the `addBroadcastSetForUpdateFunction()` and `addBroadcastSetForMessagingFunction()` methods, respectively.
-
-{% highlight java %}
-
-Graph<Long, Double, Double> graph = ...
-
-// configure the iteration
-IterationConfiguration parameters = new IterationConfiguration();
-
-// set the iteration name
-parameters.setName("Gelly Iteration");
-
-// set the parallelism
-parameters.setParallelism(16);
-
-// register an aggregator
-parameters.registerAggregator("sumAggregator", new LongSumAggregator());
-
-// run the vertex-centric iteration, also passing the configuration parameters
-Graph<Long, Double, Double> result = 
-			graph.runVertexCentricIteration(
-			new VertexUpdater(), new Messenger(), maxIterations, parameters);
-
-// user-defined functions
-public static final class VertexUpdater extends VertexUpdateFunction {
-
-	LongSumAggregator aggregator = new LongSumAggregator();
-
-	public void preSuperstep() {
-	
-		// retrieve the Aggregator
-		aggregator = getIterationAggregator("sumAggregator");
-	}
-
-
-	public void updateVertex(Long vertexKey, Long vertexValue, MessageIterator inMessages) {
-		
-		//do some computation
-		Long partialValue = ...
-
-		// aggregate the partial value
-		aggregator.aggregate(partialValue);
-
-		// update the vertex value
-		setNewVertexValue(...);
-	}
-}
-
-public static final class Messenger extends MessagingFunction {...}
-
-{% endhighlight %}
-
-[Back to top](#top)
-
-Graph Validation
------------
-
-Gelly provides a simple utility for performing validation checks on input graphs. Depending on the application context, a graph may or may not be valid according to certain criteria. For example, a user might need to validate whether their graph contains duplicate edges or whether its structure is bipartite. In order to validate a graph, one can define a custom `GraphValidator` and implement its `validate()` method. `InvalidVertexIdsValidator` is Gelly's pre-defined validator. It checks that the edge set contains valid vertex IDs, i.e. that all edge IDs
-also exist in the vertex IDs set.
-
-{% highlight java %}
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-// create a list of vertices with IDs = {1, 2, 3, 4, 5}
-List<Vertex<Long, Long>> vertices = ...
-
-// create a list of edges with IDs = {(1, 2) (1, 3), (2, 4), (5, 6)}
-List<Edge<Long, Long>> edges = ...
-
-Graph<Long, Long, Long> graph = Graph.fromCollection(vertices, edges, env);
-
-// will return false: 6 is an invalid ID
-graph.validate(new InvalidVertexIdsValidator<Long, Long, Long>()); 
-
-{% endhighlight %}
-
-[Back to top](#top)
-
-Library Methods
------------
-Gelly has a growing collection of graph algorithms for easily analyzing large-scale Graphs. So far, the following library methods are implemented:
-
-* PageRank
-* Single-Source Shortest Paths
-* Label Propagation
-* Simple Community Detection
-
-Gelly's library methods can be used by simply calling the `run()` method on the input graph:
-
-{% highlight java %}
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-Graph<Long, Long, NullValue> graph = ...
-
-// run Label Propagation for 30 iterations to detect communities on the input graph
-DataSet<Vertex<Long, Long>> verticesWithCommunity = graph.run(
-				new LabelPropagation<Long>(30)).getVertices();
-
-// print the result
-verticesWithCommunity.print();
-
-env.execute();
-{% endhighlight %}
-
-[Back to top](#top)
-
-

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/hadoop_compatibility.md
----------------------------------------------------------------------
diff --git a/docs/hadoop_compatibility.md b/docs/hadoop_compatibility.md
deleted file mode 100644
index 92981b7..0000000
--- a/docs/hadoop_compatibility.md
+++ /dev/null
@@ -1,247 +0,0 @@
----
-title: "Hadoop Compatibility"
-is_beta: true
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-
-* This will be replaced by the TOC
-{:toc}
-
-Flink is compatible with Apache Hadoop MapReduce interfaces and therefore allows
-reusing code that was implemented for Hadoop MapReduce.
-
-You can:
-
-- use Hadoop's `Writable` [data types](programming_guide.html#data-types) in Flink programs.
-- use any Hadoop `InputFormat` as a [DataSource](programming_guide.html#data-sources).
-- use any Hadoop `OutputFormat` as a [DataSink](programming_guide.html#data-sinks).
-- use a Hadoop `Mapper` as [FlatMapFunction](dataset_transformations.html#flatmap).
-- use a Hadoop `Reducer` as [GroupReduceFunction](dataset_transformations.html#groupreduce-on-grouped-dataset).
-
-This document shows how to use existing Hadoop MapReduce code with Flink. Please refer to the
-[Connecting to other systems](example_connectors.html) guide for reading from Hadoop supported file systems.
-
-### Project Configuration
-
-Support for Haddop input/output formats is part of the `flink-java` and
-`flink-scala` Maven modules that are always required when writing Flink jobs.
-The code is located in `org.apache.flink.api.java.hadoop` and
-`org.apache.flink.api.scala.hadoop` in an additional sub-package for the
-`mapred` and `mapreduce` API.
-
-Support for Hadoop Mappers and Reducers is contained in the `flink-staging`
-Maven module.
-This code resides in the `org.apache.flink.hadoopcompatibility`
-package.
-
-Add the following dependency to your `pom.xml` if you want to reuse Mappers
-and Reducers.
-
-~~~xml
-<dependency>
-	<groupId>org.apache.flink</groupId>
-	<artifactId>flink-hadoop-compatibility</artifactId>
-	<version>{{site.FLINK_VERSION_SHORT}}</version>
-</dependency>
-~~~
-
-### Using Hadoop Data Types
-
-Flink supports all Hadoop `Writable` and `WritableComparable` data types
-out-of-the-box. You do not need to include the Hadoop Compatibility dependency,
-if you only want to use your Hadoop data types. See the
-[Programming Guide](programming_guide.html#data-types) for more details.
-
-### Using Hadoop InputFormats
-
-Hadoop input formats can be used to create a data source by using
-one of the methods `readHadoopFile` or `createHadoopInput` of the
-`ExecutionEnvironment`. The former is used for input formats derived
-from `FileInputFormat` while the latter has to be used for general purpose
-input formats.
-
-The resulting `DataSet` contains 2-tuples where the first field
-is the key and the second field is the value retrieved from the Hadoop
-InputFormat.
-
-The following example shows how to use Hadoop's `TextInputFormat`.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-DataSet<Tuple2<LongWritable, Text>> input =
-    env.readHadoopFile(new TextInputFormat(), LongWritable.class, Text.class, textPath);
-
-// Do something with the data.
-[...]
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val env = ExecutionEnvironment.getExecutionEnvironment
-		
-val input: DataSet[(LongWritable, Text)] =
-  env.readHadoopFile(new TextInputFormat, classOf[LongWritable], classOf[Text], textPath)
-
-// Do something with the data.
-[...]
-~~~
-
-</div>
-
-</div>
-
-### Using Hadoop OutputFormats
-
-Flink provides a compatibility wrapper for Hadoop `OutputFormats`. Any class
-that implements `org.apache.hadoop.mapred.OutputFormat` or extends
-`org.apache.hadoop.mapreduce.OutputFormat` is supported.
-The OutputFormat wrapper expects its input data to be a DataSet containing
-2-tuples of key and value. These are to be processed by the Hadoop OutputFormat.
-
-The following example shows how to use Hadoop's `TextOutputFormat`.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-// Obtain the result we want to emit
-DataSet<Tuple2<Text, IntWritable>> hadoopResult = [...]
-		
-// Set up the Hadoop TextOutputFormat.
-HadoopOutputFormat<Text, IntWritable> hadoopOF = 
-  // create the Flink wrapper.
-  new HadoopOutputFormat<Text, IntWritable>(
-    // set the Hadoop OutputFormat and specify the job.
-    new TextOutputFormat<Text, IntWritable>(), job
-  );
-hadoopOF.getConfiguration().set("mapreduce.output.textoutputformat.separator", " ");
-TextOutputFormat.setOutputPath(job, new Path(outputPath));
-		
-// Emit data using the Hadoop TextOutputFormat.
-hadoopResult.output(hadoopOF);
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-// Obtain your result to emit.
-val hadoopResult: DataSet[(Text, IntWritable)] = [...]
-
-val hadoopOF = new HadoopOutputFormat[Text,IntWritable](
-  new TextOutputFormat[Text, IntWritable],
-  new JobConf)
-
-hadoopOF.getJobConf.set("mapred.textoutputformat.separator", " ")
-FileOutputFormat.setOutputPath(hadoopOF.getJobConf, new Path(resultPath))
-
-hadoopResult.output(hadoopOF)
-
-		
-~~~
-
-</div>
-
-</div>
-
-### Using Hadoop Mappers and Reducers
-
-Hadoop Mappers are semantically equivalent to Flink's [FlatMapFunctions](dataset_transformations.html#flatmap) and Hadoop Reducers are equivalent to Flink's [GroupReduceFunctions](dataset_transformations.html#groupreduce-on-grouped-dataset). Flink provides wrappers for implementations of Hadoop MapReduce's `Mapper` and `Reducer` interfaces, i.e., you can reuse your Hadoop Mappers and Reducers in regular Flink programs. At the moment, only the Mapper and Reduce interfaces of Hadoop's mapred API (`org.apache.hadoop.mapred`) are supported.
-
-The wrappers take a `DataSet<Tuple2<KEYIN,VALUEIN>>` as input and produce a `DataSet<Tuple2<KEYOUT,VALUEOUT>>` as output where `KEYIN` and `KEYOUT` are the keys and `VALUEIN` and `VALUEOUT` are the values of the Hadoop key-value pairs that are processed by the Hadoop functions. For Reducers, Flink offers a wrapper for a GroupReduceFunction with (`HadoopReduceCombineFunction`) and without a Combiner (`HadoopReduceFunction`). The wrappers accept an optional `JobConf` object to configure the Hadoop Mapper or Reducer.
-
-Flink's function wrappers are 
-
-- `org.apache.flink.hadoopcompatibility.mapred.HadoopMapFunction`,
-- `org.apache.flink.hadoopcompatibility.mapred.HadoopReduceFunction`, and
-- `org.apache.flink.hadoopcompatibility.mapred.HadoopReduceCombineFunction`.
-
-and can be used as regular Flink [FlatMapFunctions](dataset_transformations.html#flatmap) or [GroupReduceFunctions](dataset_transformations.html#groupreduce-on-grouped-dataset).
-
-The following example shows how to use Hadoop `Mapper` and `Reducer` functions.
-
-~~~java
-// Obtain data to process somehow.
-DataSet<Tuple2<Text, LongWritable>> text = [...]
-
-DataSet<Tuple2<Text, LongWritable>> result = text
-  // use Hadoop Mapper (Tokenizer) as MapFunction
-  .flatMap(new HadoopMapFunction<LongWritable, Text, Text, LongWritable>(
-    new Tokenizer()
-  ))
-  .groupBy(0)
-  // use Hadoop Reducer (Counter) as Reduce- and CombineFunction
-  .reduceGroup(new HadoopReduceCombineFunction<Text, LongWritable, Text, LongWritable>(
-    new Counter(), new Counter()
-  ));
-~~~
-
-**Please note:** The Reducer wrapper works on groups as defined by Flink's [groupBy()](dataset_transformations.html#transformations-on-grouped-dataset) operation. It does not consider any custom partitioners, sort or grouping comparators you might have set in the `JobConf`. 
-
-### Complete Hadoop WordCount Example
-
-The following example shows a complete WordCount implementation using Hadoop data types, Input- and OutputFormats, and Mapper and Reducer implementations.
-
-~~~java
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-		
-// Set up the Hadoop TextInputFormat.
-Job job = Job.getInstance();
-HadoopInputFormat<LongWritable, Text> hadoopIF = 
-  new HadoopInputFormat<LongWritable, Text>(
-    new TextInputFormat(), LongWritable.class, Text.class, job
-  );
-TextInputFormat.addInputPath(job, new Path(inputPath));
-		
-// Read data using the Hadoop TextInputFormat.
-DataSet<Tuple2<LongWritable, Text>> text = env.createInput(hadoopIF);
-
-DataSet<Tuple2<Text, LongWritable>> result = text
-  // use Hadoop Mapper (Tokenizer) as MapFunction
-  .flatMap(new HadoopMapFunction<LongWritable, Text, Text, LongWritable>(
-    new Tokenizer()
-  ))
-  .groupBy(0)
-  // use Hadoop Reducer (Counter) as Reduce- and CombineFunction
-  .reduceGroup(new HadoopReduceCombineFunction<Text, LongWritable, Text, LongWritable>(
-    new Counter(), new Counter()
-  ));
-
-// Set up the Hadoop TextOutputFormat.
-HadoopOutputFormat<Text, IntWritable> hadoopOF = 
-  new HadoopOutputFormat<Text, IntWritable>(
-    new TextOutputFormat<Text, IntWritable>(), job
-  );
-hadoopOF.getConfiguration().set("mapreduce.output.textoutputformat.separator", " ");
-TextOutputFormat.setOutputPath(job, new Path(outputPath));
-		
-// Emit data using the Hadoop TextOutputFormat.
-result.output(hadoopOF);
-
-// Execute Program
-env.execute("Hadoop WordCount");
-~~~

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/how_to_contribute.md
----------------------------------------------------------------------
diff --git a/docs/how_to_contribute.md b/docs/how_to_contribute.md
deleted file mode 100644
index 86ef780..0000000
--- a/docs/how_to_contribute.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title:  "How to contribute"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-The "How to contribute"-guide is now located [on the project website](http://flink.apache.org/how-to-contribute.html).


[30/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
[docs] Change doc layout

- Changed layout (simple as possible)
- Fix broken version references in docs
- Update README
- Removed dead resources
- Reorganized content

[docs] Address PR comments

[docs] Address @ktzoumas comments

[docs] Fix download link

[docs] Fix front page stack link to Tez

This closes #606.


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/f1ee90cc
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/f1ee90cc
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/f1ee90cc

Branch: refs/heads/master
Commit: f1ee90ccb3fa446e3be402a707b6b2d6ed4169b3
Parents: 6df1dd2
Author: Ufuk Celebi <uc...@apache.org>
Authored: Wed Apr 15 15:51:45 2015 +0200
Committer: Ufuk Celebi <uc...@apache.org>
Committed: Wed Apr 22 16:16:28 2015 +0200

----------------------------------------------------------------------
 docs/README.md                                  |   54 +-
 docs/_config.yml                                |   43 +-
 docs/_includes/footer.md                        |   21 -
 docs/_includes/navbar.html                      |  146 +-
 docs/_includes/sidenav.html                     |   77 -
 docs/_layouts/base.html                         |   90 +
 docs/_layouts/default.html                      |  103 -
 docs/_layouts/plain.html                        |   33 +
 docs/_plugins/build_apidoc.rb                   |   74 -
 docs/_plugins/gh_link.rb                        |    2 +-
 docs/_plugins/organizeLicenseHeaders.rb         |   77 -
 docs/_plugins/removeDuplicateLicenseHeaders.rb  |   77 +
 docs/apis/cli.md                                |  189 +
 docs/apis/cluster_execution.md                  |  146 +
 docs/apis/dataset_transformations.md            | 1689 +++++
 docs/apis/example_connectors.md                 |  205 +
 docs/apis/examples.md                           |  490 ++
 docs/apis/fig/LICENSE.txt                       |   17 +
 .../fig/iterations_delta_iterate_operator.png   |  Bin 0 -> 113607 bytes
 ...terations_delta_iterate_operator_example.png |  Bin 0 -> 335057 bytes
 docs/apis/fig/iterations_iterate_operator.png   |  Bin 0 -> 63465 bytes
 .../fig/iterations_iterate_operator_example.png |  Bin 0 -> 102925 bytes
 docs/apis/fig/iterations_supersteps.png         |  Bin 0 -> 54098 bytes
 docs/apis/fig/plan_visualizer.png               |  Bin 0 -> 145778 bytes
 docs/apis/hadoop_compatibility.md               |  246 +
 docs/apis/index.md                              |   21 +
 docs/apis/iterations.md                         |  209 +
 docs/apis/java8.md                              |  190 +
 docs/apis/local_execution.md                    |  123 +
 docs/apis/programming_guide.md                  | 2937 +++++++++
 docs/apis/python.md                             |  606 ++
 docs/apis/streaming_guide.md                    | 1707 +++++
 docs/apis/web_client.md                         |   74 +
 docs/building.md                                |  107 -
 docs/cli.md                                     |  190 -
 docs/cluster_execution.md                       |  146 -
 docs/cluster_setup.md                           |  346 -
 docs/coding_guidelines.md                       |   23 -
 docs/config.md                                  |  385 --
 docs/css/bootstrap-lumen-custom.css             | 6191 ------------------
 docs/css/bootstrap.css                          | 5785 ----------------
 docs/css/codetabs.css                           |   62 -
 docs/css/custom.css                             |  195 -
 docs/css/main/main.css                          |  411 --
 docs/css/syntax.css                             |   79 -
 docs/dataset_transformations.md                 | 1690 -----
 docs/example_connectors.md                      |  205 -
 docs/examples.md                                |  490 --
 docs/favicon.ico                                |  Bin 1150 -> 0 bytes
 docs/favicon.png                                |  Bin 1288 -> 0 bytes
 docs/fig/LICENSE.txt                            |   17 +
 docs/fig/overview-stack-0.9.png                 |  Bin 0 -> 260807 bytes
 docs/flink_on_tez_guide.md                      |  293 -
 docs/gce_setup.md                               |   89 -
 docs/gelly_guide.md                             |  487 --
 docs/hadoop_compatibility.md                    |  247 -
 docs/how_to_contribute.md                       |   23 -
 docs/img/ClientJmTm.svg                         |  348 -
 docs/img/FlinkOnYarn.svg                        |  151 -
 docs/img/JobManagerComponents.svg               |  208 -
 docs/img/dataflow.svg                           |  998 ---
 docs/img/flink_on_tez_translation.png           |  Bin 350867 -> 0 bytes
 docs/img/flink_tez_vertex.png                   |  Bin 105544 -> 0 bytes
 docs/img/gelly-example-graph.png                |  Bin 18813 -> 0 bytes
 docs/img/gelly-filter.png                       |  Bin 57192 -> 0 bytes
 docs/img/gelly-reduceOnEdges.png                |  Bin 23843 -> 0 bytes
 docs/img/gelly-reduceOnNeighbors.png            |  Bin 34903 -> 0 bytes
 docs/img/gelly-union.png                        |  Bin 50498 -> 0 bytes
 docs/img/iterations_delta_iterate_operator.png  |  Bin 113607 -> 0 bytes
 ...terations_delta_iterate_operator_example.png |  Bin 335057 -> 0 bytes
 docs/img/iterations_iterate_operator.png        |  Bin 63465 -> 0 bytes
 .../img/iterations_iterate_operator_example.png |  Bin 102925 -> 0 bytes
 docs/img/iterations_supersteps.png              |  Bin 54098 -> 0 bytes
 docs/img/japi_example_overview.png              |  Bin 45406 -> 0 bytes
 docs/img/job_and_execution_graph.svg            |  851 ---
 docs/img/license.txt                            |   17 -
 docs/img/logo.png                               |  Bin 2457 -> 0 bytes
 docs/img/overview-stack-0.9.png                 |  Bin 260807 -> 0 bytes
 docs/img/plan_visualizer.png                    |  Bin 145778 -> 0 bytes
 docs/img/projects_dependencies.svg              |  586 --
 .../compiler-webclient-new.png                  |  Bin 134963 -> 0 bytes
 .../jobmanager-running-new.png                  |  Bin 132859 -> 0 bytes
 docs/img/quickstart-example/kmeans003.png       |  Bin 27962 -> 0 bytes
 docs/img/quickstart-example/kmeans008.png       |  Bin 39305 -> 0 bytes
 docs/img/quickstart-example/kmeans015.png       |  Bin 41958 -> 0 bytes
 docs/img/quickstart-example/result003.png       |  Bin 60228 -> 0 bytes
 docs/img/quickstart-example/result008.png       |  Bin 92732 -> 0 bytes
 docs/img/quickstart-example/result015.png       |  Bin 89724 -> 0 bytes
 docs/img/quickstart-example/run-webclient.png   |  Bin 89469 -> 0 bytes
 docs/img/quickstart_cluster.png                 |  Bin 83790 -> 0 bytes
 docs/img/slots.svg                              |  505 --
 docs/img/spargel_example.png                    |  Bin 199032 -> 0 bytes
 docs/img/spargel_example_input.png              |  Bin 113478 -> 0 bytes
 docs/img/stack.svg                              |  606 --
 docs/img/state_machine.svg                      |  318 -
 docs/index.md                                   |   36 +-
 docs/internal_add_operator.md                   |  251 -
 docs/internal_distributed_akka.md               |   47 -
 docs/internal_distributed_runtime.md            |   23 -
 docs/internal_general_arch.md                   |   89 -
 docs/internal_howto.md                          |   43 -
 docs/internal_job_scheduling.md                 |   82 -
 docs/internal_logging.md                        |   96 -
 docs/internal_operators_and_memory.md           |   21 -
 docs/internal_optimizer.md                      |   21 -
 docs/internal_program_life_cycle.md             |   23 -
 docs/internal_setup_eclipse.md                  |   98 -
 docs/internal_setup_intellij.md                 |   56 -
 docs/internal_types_serialization.md            |  228 -
 docs/internals/_draft_distributed_akka.md       |   47 +
 docs/internals/add_operator.md                  |  250 +
 docs/internals/coding_guidelines.md             |   23 +
 docs/internals/fig/ClientJmTm.svg               |  348 +
 docs/internals/fig/LICENSE.txt                  |   17 +
 docs/internals/fig/job_and_execution_graph.svg  |  851 +++
 docs/internals/fig/projects_dependencies.svg    |  586 ++
 docs/internals/fig/slots.svg                    |  505 ++
 docs/internals/fig/stack.svg                    |  606 ++
 docs/internals/fig/state_machine.svg            |  318 +
 docs/internals/general_arch.md                  |   89 +
 docs/internals/how_to_contribute.md             |   23 +
 docs/internals/ide_setup.md                     |  122 +
 docs/internals/index.md                         |   21 +
 docs/internals/job_scheduling.md                |   82 +
 docs/internals/logging.md                       |   96 +
 docs/internals/types_serialization.md           |  228 +
 docs/iterations.md                              |  208 -
 docs/java8_programming_guide.md                 |  191 -
 docs/java_api_quickstart.md                     |  151 -
 docs/js/bootstrap.min.js                        |    6 -
 docs/js/codetabs.js                             |  121 -
 docs/libs/fig/LICENSE.txt                       |   17 +
 docs/libs/fig/gelly-example-graph.png           |  Bin 0 -> 18813 bytes
 docs/libs/fig/gelly-filter.png                  |  Bin 0 -> 57192 bytes
 docs/libs/fig/gelly-reduceOnEdges.png           |  Bin 0 -> 23843 bytes
 docs/libs/fig/gelly-reduceOnNeighbors.png       |  Bin 0 -> 34903 bytes
 docs/libs/fig/gelly-union.png                   |  Bin 0 -> 50498 bytes
 docs/libs/fig/spargel_example.png               |  Bin 0 -> 199032 bytes
 docs/libs/fig/spargel_example_input.png         |  Bin 0 -> 113478 bytes
 docs/libs/gelly_guide.md                        |  484 ++
 docs/libs/index.md                              |   21 +
 docs/libs/ml/als.md                             |  157 +
 docs/libs/ml/cocoa.md                           |  164 +
 docs/libs/ml/index.md                           |   39 +
 docs/libs/ml/multiple_linear_regression.md      |  124 +
 docs/libs/ml/polynomial_base_feature_mapper.md  |   91 +
 docs/libs/ml/standard_scaler.md                 |   90 +
 docs/libs/spargel_guide.md                      |  131 +
 docs/libs/table.md                              |  127 +
 docs/local_execution.md                         |  123 -
 docs/local_setup.md                             |  137 -
 docs/ml/alternating_least_squares.md            |  157 -
 docs/ml/cocoa.md                                |  164 -
 docs/ml/multiple_linear_regression.md           |  124 -
 docs/ml/polynomial_base_feature_mapper.md       |   91 -
 docs/ml/standard_scaler.md                      |   90 -
 docs/page/css/codetabs.css                      |   62 +
 docs/page/css/flink.css                         |  122 +
 docs/page/css/syntax.css                        |   79 +
 docs/page/favicon.ico                           |  Bin 0 -> 1150 bytes
 docs/page/img/LICENSE.txt                       |   17 +
 docs/page/img/navbar-brand-logo.jpg             |  Bin 0 -> 18470 bytes
 .../compiler-webclient-new.png                  |  Bin 0 -> 134963 bytes
 .../jobmanager-running-new.png                  |  Bin 0 -> 132859 bytes
 docs/page/img/quickstart-example/kmeans003.png  |  Bin 0 -> 27962 bytes
 docs/page/img/quickstart-example/kmeans008.png  |  Bin 0 -> 39305 bytes
 docs/page/img/quickstart-example/kmeans015.png  |  Bin 0 -> 41958 bytes
 docs/page/img/quickstart-example/result003.png  |  Bin 0 -> 60228 bytes
 docs/page/img/quickstart-example/result008.png  |  Bin 0 -> 92732 bytes
 docs/page/img/quickstart-example/result015.png  |  Bin 0 -> 89724 bytes
 .../img/quickstart-example/run-webclient.png    |  Bin 0 -> 89469 bytes
 docs/page/img/quickstart_cluster.png            |  Bin 0 -> 83790 bytes
 docs/page/js/codetabs.js                        |  121 +
 docs/programming_guide.md                       | 2942 ---------
 docs/python_programming_guide.md                |  610 --
 docs/quickstart/java_api_quickstart.md          |  151 +
 docs/quickstart/run_example_quickstart.md       |  155 +
 docs/quickstart/scala_api_quickstart.md         |  136 +
 docs/quickstart/setup_quickstart.md             |  155 +
 docs/run_example_quickstart.md                  |  155 -
 docs/scala_api_quickstart.md                    |  136 -
 docs/search-results.md                          |   35 +
 docs/search.md                                  |   36 -
 docs/setup/building.md                          |  107 +
 docs/setup/cluster_setup.md                     |  346 +
 docs/setup/config.md                            |  385 ++
 docs/setup/fig/FlinkOnYarn.svg                  |  151 +
 docs/setup/fig/LICENSE.txt                      |   17 +
 docs/setup/fig/flink_on_tez_translation.png     |  Bin 0 -> 350867 bytes
 docs/setup/fig/flink_tez_vertex.png             |  Bin 0 -> 105544 bytes
 docs/setup/flink_on_tez.md                      |  290 +
 docs/setup/gce_setup.md                         |   89 +
 docs/setup/index.md                             |   21 +
 docs/setup/local_setup.md                       |  138 +
 docs/setup/yarn_setup.md                        |  264 +
 docs/setup_quickstart.md                        |  155 -
 docs/spargel_guide.md                           |  131 -
 docs/streaming_guide.md                         | 1711 -----
 docs/table.md                                   |  130 -
 docs/web_client.md                              |   74 -
 docs/yarn_setup.md                              |  264 -
 201 files changed, 17734 insertions(+), 31480 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/README.md
----------------------------------------------------------------------
diff --git a/docs/README.md b/docs/README.md
index 5ab0f2f..c7e880b 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,42 +1,37 @@
-This README gives an overview of how to build and contribute to the
-documentation of Apache Flink.
+This README gives an overview of how to build and contribute to the documentation of Apache Flink.
 
-The documentation is included with the source of Apache Flink in order to ensure
-that you always have docs corresponding to your checked out version. The online
-documentation at http://flink.apache.org/ is also generated from the
-files found here.
+The documentation is included with the source of Apache Flink in order to ensure that you always
+have docs corresponding to your checked out version. The online documentation at
+http://flink.apache.org/ is also generated from the files found here.
 
 # Requirements
 
-We use Markdown to write and Jekyll to translate the documentation to static
-HTML. You can install all needed software via:
+We use Markdown to write and Jekyll to translate the documentation to static HTML. You can install
+all needed software via:
 
     gem install jekyll
-    gem install redcarpet
+    gem install kramdown
     sudo easy_install Pygments
 
-Redcarpet is needed for Markdown processing and the Python based Pygments is
-used for syntax highlighting.
+Kramdown is needed for Markdown processing and the Python based Pygments is used for syntax
+highlighting.
 
 # Build
 
-The `docs/build_docs.sh` script calls Jekyll and generates the documentation to
-`docs/target`. You can then point your browser to `docs/target/index.html` and
-start reading.
+The `docs/_build_docs.sh` script calls Jekyll and generates the documentation in `docs/target`. You
+can then point your browser to `docs/target/index.html` and start reading.
 
-If you call the script with the preview flag `build_docs.sh -p`, Jekyll will
-start a web server at `localhost:4000` and continiously generate the docs.
-This is useful to preview changes locally.
+If you call the script with the preview flag `_build_docs.sh -p`, Jekyll will start a web server at
+`localhost:4000` and watch the docs directory for updates. Use this mode to preview changes locally.
 
 # Contribute
 
 The documentation pages are written in
-[Markdown](http://daringfireball.net/projects/markdown/syntax). It is possible
-to use the [GitHub flavored syntax](http://github.github.com/github-flavored-markdown)
-and intermix plain html.
+[Markdown](http://daringfireball.net/projects/markdown/syntax). It is possible to use the
+[GitHub flavored syntax](http://github.github.com/github-flavored-markdown) and intermix plain html.
 
-In addition to Markdown, every page contains a front matter, which specifies the
-title of the page. This title is used as the top-level heading for the page.
+In addition to Markdown, every page contains a Jekyll front matter, which specifies the title of the
+page and the layout to use. The title is used as the top-level heading for the page.
 
     ---
     title: "Title of the Page"
@@ -44,17 +39,22 @@ title of the page. This title is used as the top-level heading for the page.
 
 Furthermore, you can access variables found in `docs/_config.yml` as follows:
 
-    {{ site.FLINK_VERSION_SHORT }}
+    {{ site.NAME }}
 
-This will be replaced with the value of the variable when generating the docs.
+This will be replaced with the value of the variable called `NAME` when generating
+the docs.
 
-All documents are structed with headings. From these heading, an page outline is
+All documents are structed with headings. From these heading, a page outline is
 automatically generated for each page.
 
 ```
-# Level-1 Heading
-## Level-2 Heading
+# Level-1 Heading  <- Used for the title of the page
+## Level-2 Heading <- Start with this one
 ### Level-3 heading
 #### Level-4 heading
 ##### Level-5 heading
 ```
+
+Please stick to the "logical order" when using the headlines, e.g. start with level-2 headings and
+use level-3 headings for subsections, etc. Don't use a different ordering, because you don't like
+how a headline looks.

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/_config.yml
----------------------------------------------------------------------
diff --git a/docs/_config.yml b/docs/_config.yml
index fe0b62d..7d24d53 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -22,28 +22,33 @@
 #     {{ site.CONFIG_KEY }}
 #------------------------------------------------------------------------------
 
-FLINK_VERSION_THIS_HADOOP1: "0.9-hadoop1-SNAPSHOT"
-FLINK_VERSION_THIS_HADOOP2: "0.9-SNAPSHOT"
-FLINK_VERSION_THIS_SHORT: "0.9"
-FLINK_WGET_URL_YARN_THIS: http://stratosphere-bin.s3-website-us-east-1.amazonaws.com/flink-0.9-SNAPSHOT-bin-hadoop2.tgz
 
+# This are the version referenced in the docs. Please only use these variables
+# to reference a specific Flink version, because this is the only place where
+# we change the version for the complete docs when forking of a release branch
+# etc.
+version: "0.9-SNAPSHOT"
+version_hadoop1: "0.9-hadoop1-SNAPSHOT"
+version_short: "0.9" # Used for the top navbar w/o snapshot suffix
 
+# This is the Scala version we use in this version
+scala_version: "2.10"
 
-FLINK_VERSION_HADOOP1_STABLE: "0.8.1-hadoop1" # this variable can point to a SNAPSHOT version in the git source.
-FLINK_VERSION_SHORT: "0.8.1"
-FLINK_VERSION_HADOOP2_STABLE: "0.8.1"
-FLINK_SCALA_VERSION: "2.10.4"
-FLINK_SCALA_VERSION_SHORT: "2.10"
-FLINK_ISSUES_URL: https://issues.apache.org/jira/browse/FLINK
-FLINK_GITHUB_URL:  https://github.com/apache/flink
+# Download urls
+download_url: "http://flink.apache.org/downloads.html"
+download_url_hadoop1: "http://stratosphere-bin.s3-website-us-east-1.amazonaws.com/flink-0.9-SNAPSHOT-bin-hadoop1.tgz" 
+download_url_hadoop2: "http://stratosphere-bin.s3-website-us-east-1.amazonaws.com/flink-0.9-SNAPSHOT-bin-hadoop2.tgz" 
 
-FLINK_WEBSITE_URL: http://flink.apache.org
-FLINK_DOWNLOAD_URL: http://flink.apache.org/downloads.html
+# Some commonly linked pages (this was more important to have as a variable
+# during incubator; by now it should also be fine to hardcode these.)
+website_url: "http://flink.apache.org"
+jira_url: "https://issues.apache.org/jira/browse/FLINK"
+github_url: "https://github.com/apache/flink"
 
-FLINK_DOWNLOAD_URL_HADOOP1_STABLE: http://www.apache.org/dyn/closer.cgi/flink/flink-0.8.1/flink-0.8.1-bin-hadoop1.tgz
-FLINK_DOWNLOAD_URL_HADOOP2_STABLE: http://www.apache.org/dyn/closer.cgi/flink/flink-0.8.1/flink-0.8.1-bin-hadoop2.tgz
-FLINK_DOWNLOAD_URL_YARN_STABLE: http://www.apache.org/dyn/closer.cgi/flink/flink-0.8.1/flink-0.8.1-bin-hadoop2-yarn.tgz
-FLINK_WGET_URL_YARN_STABLE: http://artfiles.org/apache.org/flink/flink-0.8.1/flink-0.8.1-bin-hadoop2-yarn.tgz
+# Setup quickstart uses this => to be changed
+FLINK_DOWNLOAD_URL_HADOOP1_STABLE: "http://www.apache.org/dyn/closer.cgi/flink/flink-0.8.1/flink-0.8.1-bin-hadoop1.tgz"
+FLINK_DOWNLOAD_URL_HADOOP2_STABLE: "http://www.apache.org/dyn/closer.cgi/flink/flink-0.8.1/flink-0.8.1-bin-hadoop2.tgz"
+FLINK_DOWNLOAD_URL_YARN_STABLE: "http://www.apache.org/dyn/closer.cgi/flink/flink-0.8.1/flink-0.8.1-bin-hadoop2-yarn.tgz"
 
 #------------------------------------------------------------------------------
 # BUILD CONFIG
@@ -57,7 +62,7 @@ defaults:
     scope:
       path: ""
     values:
-      layout: default
+      layout: plain
 
 markdown: KramdownPygments
 highlighter: pygments
@@ -67,4 +72,4 @@ kramdown:
 
 host: localhost
 
-baseurl: http://ci.apache.org/projects/flink/flink-docs-master
+baseurl: http://ci.apache.org/projects/flink/flink-docs-master
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/_includes/footer.md
----------------------------------------------------------------------
diff --git a/docs/_includes/footer.md b/docs/_includes/footer.md
deleted file mode 100644
index 2e6b13a..0000000
--- a/docs/_includes/footer.md
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<hr class="divider">
-
-<p class="text-center"><a href="privacy-policy.html">Privacy Policy<a></p>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/_includes/navbar.html
----------------------------------------------------------------------
diff --git a/docs/_includes/navbar.html b/docs/_includes/navbar.html
index 8600541..e9a1b4c 100644
--- a/docs/_includes/navbar.html
+++ b/docs/_includes/navbar.html
@@ -16,52 +16,106 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<nav class="navbar navbar-default navbar-static-top" role="navigation">
-  <div class="container">
-    <div class="row">
-      <div class="col-md-1 af-mobile-nav-bar">
-        {% comment %}
-        We might be on an externally hosted documentation site.
-        Please keep the site.FLINK_WEBSITE_URL below to ensure a link back to the Flink website.
-        {% endcomment %}
-	<a href="{{ site.FLINK_WEBSITE_URL }}/index.html" title="Home">
-	  <img class="hidden-xs hidden-sm img-responsive"
-	       src="{{ site.baseurl }}/img/logo.png" alt="Apache Flink Logo">
-	</a>	
-	<div class="row visible-xs">
-	  <div class="col-xs-3">
-	    <a href="{{ site.baseurl }}/index.html" title="Home">
-	      <img class="hidden-x hidden-sm img-responsive"
-		   src="{{ site.baseurl }}/img/logo.png" alt="Apache Flink Logo">
-	    </a>	
-	  </div>
-	  <div class="col-xs-5"></div>
-	  <div class="col-xs-4">
-	    <div class="af-mobile-btn">
-	      <span class="glyphicon glyphicon-plus"></span>
-	    </div>
-	  </div>
-	</div>
-    </div>
-      <!-- Navigation -->
-      <div class="col-md-11">
-	<div class="collapse navbar-collapse" id="navbar-collapse-1">
-	  <ul class="nav navbar-nav">
+{% capture setup %}{{site.baseurl}}/setup{% endcapture %}
+{% capture apis %}{{site.baseurl}}/apis{% endcapture %}
+{% capture libs %}{{site.baseurl}}/libs{% endcapture %}
+{% capture internals %}{{site.baseurl}}/internals{% endcapture %}
+    <!-- Top navbar. -->
+    <nav class="navbar navbar-default navbar-fixed-top">
+      <div class="container">
+        <!-- The logo. -->
+        <div class="navbar-header">
+          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <div class="navbar-logo">
+            <a href="{{ site.baseurl }}/"><img alt="Apache Flink" src="{{ site.baseurl }}/page/img/navbar-brand-logo.jpg"></a>
+          </div>
+        </div><!-- /.navbar-header -->
 
-	    <li>
-	      <a href="{{ site.baseurl }}/index.html" class="{% if page.url contains 'index.html' %}active{% endif %}">Documentation</a>
-	    </li>
+        <!-- The navigation links. -->
+        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+          <ul class="nav navbar-nav">
+            <li{% if page.url == '/index.html' %} class="active"{% endif %}><a href="{{ site.baseurl}}/index.html">Overview<span class="hidden-sm hidden-xs"> {{ site.version_short }}</span></a></li>
 
-	    <li>
-	      <a href="{{ site.baseurl }}/api/java/index.html">Javadoc</a>
-	    </li>
+            <!-- Setup -->
+            <li class="dropdown{% if page.url contains setup %} active{% endif %}">
+              <a href="{{ setup }}" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Setup <span class="caret"></span></a>
+              <ul class="dropdown-menu" role="menu">
+                <li><a href="{{ setup }}/building.html">Get Flink 0.9-SNAPSHOT</a></li>
 
-	    <li>
-	      <a href="{{ site.baseurl }}/api/scala/index.html#org.apache.flink.api.scala.package">Scaladoc</a>
-	    </li>
-	  </ul>
-	</div>
-      </div>
-    </div>
-  </div>
-</nav>
+                <li class="divider"></li>
+                <li role="presentation" class="dropdown-header"><strong>Deployment</strong></li>
+                <li><a href="{{ setup }}/local_setup.html" class="active">Local</a></li>
+                <li><a href="{{ setup }}/cluster_setup.html">Cluster (Standalone)</a></li>
+                <li><a href="{{ setup }}/yarn_setup.html">YARN</a></li>
+                <li><a href="{{ setup }}/gce_setup.html">GCloud</a></li>
+                <li><a href="{{ setup }}/flink_on_tez.html">Flink on Tez <span class="badge">Beta</span></a></li>
+
+                <li class="divider"></li>
+                <li><a href="{{ setup }}/config.html">Configuration</a></li>
+              </ul>
+            </li>
+
+            <!-- Programming Guides -->
+            <li class="dropdown{% if page.url contains apis %} active{% endif %}">
+              <a href="{{ apis }}" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Programming Guides <span class="caret"></span></a>
+              <ul class="dropdown-menu" role="menu">
+                <li><a href="{{ apis }}/programming_guide.html"><strong>Batch: DataSet API</strong></a></li>
+                <li><a href="{{ apis }}/streaming_guide.html"><strong>Streaming: DataStream API</strong> <span class="badge">Beta</span></a></li>
+                <li><a href="{{ apis }}/python.html">Python API <span class="badge">Beta</span></a></li>
+                
+                <li class="divider"></li>
+                <li><a href="{{ apis }}/dataset_transformations.html">Dataset Transformations</a></li>
+                <li><a href="{{ apis }}/example_connectors.html">Connectors</a></li>
+                <li><a href="{{ apis }}/examples.html">Examples</a></li>
+                <li><a href="{{ apis }}/local_execution.html">Local Execution</a></li>
+                <li><a href="{{ apis }}/cluster_execution.html">Cluster Execution</a></li>
+                <li><a href="{{ apis }}/cli.html">Command Line Interface</a></li>
+                <li><a href="{{ apis }}/web_client.html">Web Client</a></li>
+                <li><a href="{{ apis }}/iterations.html">Iterations</a></li>
+                <li><a href="{{ apis }}/java8.html">Java 8</a></li>
+                <li><a href="{{ apis }}/hadoop_compatibility.html">Hadoop Compatability <span class="badge">Beta</span></a></li>
+              </ul>
+            </li>
+
+            <!-- Libraries -->
+            <li class="dropdown{% if page.url contains libs %} active{% endif %}">
+              <a href="{{ libs }}" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Libraries <span class="caret"></span></a>
+                <ul class="dropdown-menu" role="menu">
+                  <li><a href="{{ libs }}/spargel_guide.html">Graphs: Spargel</a></li>
+                  <li><a href="{{ libs }}/gelly_guide.html">Graphs: Gelly <span class="badge">Beta</span></a></li>
+                  <li><a href="{{ libs }}/ml/">Machine Learning <span class="badge">Beta</span></a></li>
+                  <li><a href="{{ libs }}/table.html">Relational: Table <span class="badge">Beta</span></a></li>
+              </ul>
+            </li>
+
+            <!-- Internals -->
+            <li class="dropdown{% if page.url contains internals %} active{% endif %}">
+              <a href="{{ internals }}" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Internals <span class="caret"></span></a>
+              <ul class="dropdown-menu" role="menu">
+                <li role="presentation" class="dropdown-header"><strong>Contribute</strong></li>
+                <li><a href="{{ internals }}/how_to_contribute.html">How to Contribute</a></li>
+                <li><a href="{{ internals }}/coding_guidelines.html">Coding Guidelines</a></li>
+                <li><a href="{{ internals }}/ide_setup.html">IDE Setup</a></li>
+                <li><a href="{{ internals }}/logging.html">Logging</a></li>
+                <li class="divider"></li>
+                <li role="presentation" class="dropdown-header"><strong>Internals</strong></li>
+                <li><a href="{{ internals }}/general_arch.html">Architecture &amp; Process Model</a></li>
+                <li><a href="{{ internals }}/types_serialization.html">Type Extraction &amp; Serialization</a></li>
+                <li><a href="{{ internals }}/job_scheduling.html">Jobs &amp; Scheduling</a></li>
+                <li><a href="{{ internals }}/add_operator.html">How-To: Add an Operator</a></li>
+              </ul>
+            </li>
+          </ul>
+          <form class="navbar-form navbar-right hidden-sm hidden-md" role="search" action="search-results.html">
+            <div class="form-group">
+              <input type="text" class="form-control" name="q" placeholder="Search all pages">
+            </div>
+            <button type="submit" class="btn btn-default">Search</button>
+          </form>
+        </div><!-- /.navbar-collapse -->
+      </div><!-- /.container -->
+    </nav>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/_includes/sidenav.html
----------------------------------------------------------------------
diff --git a/docs/_includes/sidenav.html b/docs/_includes/sidenav.html
deleted file mode 100644
index f3c692d..0000000
--- a/docs/_includes/sidenav.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<ul id="flink-doc-sidenav">
-  <li><div class="sidenav-category"><a href="{{ site.baseurl }}/faq.html">FAQ</a></div></li>
-  <li><div class="sidenav-category">Quickstart</div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/setup_quickstart.html">Setup</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/run_example_quickstart.html">Run Example</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/java_api_quickstart.html">Java API</a></div></li>
-  <li><div class="sidenav-item-bottom"><a href="{{ site.baseurl }}/scala_api_quickstart.html">Scala API</a></div></li>
-
-  <li><div class="sidenav-category">Setup &amp; Configuration</div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/local_setup.html">Local Setup</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/building.html">Build Flink</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/cluster_setup.html">Cluster Setup</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/gce_setup.html">GCE Setup</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/yarn_setup.html">YARN Setup</a></div></li>
-  <li><div class="sidenav-item-bottom"><a href="{{ site.baseurl }}/config.html">Configuration</a></div></li>
-
-  <li><div class="sidenav-category">Programming Guides</div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/programming_guide.html">Programming Guide</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/dataset_transformations.html">DataSet Transformations</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/java8_programming_guide.html">Java 8 Programming Guide</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/streaming_guide.html">Streaming Guide</a> <small>Beta</small></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/iterations.html">Iterations</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/spargel_guide.html">Spargel Graph API</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/gelly_guide.html">Gelly Graph API</a> <small>Beta</small></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/table.html">Table API - Relational Queries</a> <small>Beta</small></div></li>
-  <li><div class="sidenav-item"><a href="python_programming_guide.html">Python API</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/hadoop_compatibility.html">Hadoop Compatibility</a> <small>Beta</small></div></li>
-    <li><div class="sidenav-item-bottom"><a href="{{ site.baseurl }}/flink_on_tez_guide.html">Running Flink on Tez</a> <small>Beta</small></div></li>
-
-  <li><div class="sidenav-category">Examples</div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/examples.html">Bundled Examples</a></div></li>
-  <li><div class="sidenav-item-bottom"><a href="{{ site.baseurl }}/example_connectors.html">Connecting to other systems</a></div></li>
-
-  <li><div class="sidenav-category">Execution</div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/local_execution.html">Local/Debugging</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/cluster_execution.html">Cluster</a></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/cli.html">Command-Line Interface</a></div></li>
-  <li><div class="sidenav-item-bottom"><a href="{{ site.baseurl }}/web_client.html">Web Interface</a></div></li>
-
-  <li><div class="sidenav-category">Machine Learning Library <small style="font-size:75%">Beta</small></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/ml/alternating_least_squares.html">Alternating Least Squares</a> <small>Beta</small></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/ml/multiple_linear_regression.html">Multiple linear regression</a> <small>Beta</small></div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/ml/polynomial_base_feature_mapper.html">Polynomial Base Feature Mapper</a> <small>Beta</small></div></li>
-  <li><div class="sidenav-item-bottom"><a href="{{ site.baseurl }}/ml/cocoa.html">CoCoA</a> <small>Beta</small></div></li>
-  <li><div class="sidenav-item-bottom"><a href="{{ site.baseurl }}/ml/standard_scaler.html">Standard Scaler</a> <small>Beta</small></div></li>
-
-  <li><div class="sidenav-category">Advanced</div></li>
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/internal_general_arch.html">Architecture and Process Model</a></div></li>
-  <!-- <li><a href="internal_program_life_cycle.html">From Program to Execution</a></li> -->
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/internal_types_serialization.html">Type extraction and Serialization</a></div></li>
-  <!-- <li><div class="sidenav-item"><a href="{{ site.baseurl }}/internal_distributed_akka.html">Distributed Communication via Akka</a></div></li> -->
-  <li><div class="sidenav-item"><a href="{{ site.baseurl }}/internal_job_scheduling.html">Jobs and Scheduling</a></div></li>
-  <!-- <li><a href="#">Distributed Runtime & Data Exchange</a></li> -->
-  <!-- <li><a href="#">Runtime Algorithms and Memory Management</a></li> -->
-  <!-- <li><a href=#">Program Optimizer</a></li> -->
-  <li><div class="sidenav-item-bottom"><a href="{{ site.baseurl }}/internal_howto.html">Developer How-To's</a></div></li>
-</ul>
-
-<small>Components marked with <strong>Beta</strong> have been added to Flink recently. They are under heavy development and might be incomplete or unstable.</small>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/_layouts/base.html
----------------------------------------------------------------------
diff --git a/docs/_layouts/base.html b/docs/_layouts/base.html
new file mode 100644
index 0000000..e283354
--- /dev/null
+++ b/docs/_layouts/base.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
+    <title>Apache Flink {{ site.version}} Documentation: {{ page.title }}</title>
+    <link rel="shortcut icon" href="{{ site.baseurl }}/page/favicon.ico" type="image/x-icon">
+    <link rel="icon" href="{{ site.baseurl }}/page/favicon.ico" type="image/x-icon">
+
+    <!-- Bootstrap -->
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
+    <link rel="stylesheet" href="{{ site.baseurl }}/page/css/flink.css">
+    <link rel="stylesheet" href="{{ site.baseurl }}/page/css/syntax.css">
+    <link rel="stylesheet" href="{{ site.baseurl }}/page/css/codetabs.css">
+    {% if page.mathjax %}
+    <script type="text/x-mathjax-config">
+        MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
+    </script>
+    <script type="text/javascript"
+            src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
+    </script>
+    {% endif %}
+    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
+    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+    <!--[if lt IE 9]>
+      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+    <![endif]-->
+  </head>
+  <body>  
+    {% comment %} Includes are found in the _includes directory. {% endcomment %}
+    {% include navbar.html %}
+
+    <!-- Main content. -->
+    <div class="container">
+      {% comment %}
+      This is the base for all content. The content from the layouts found in
+      the _layouts directory goes here.
+      {% endcomment %}
+      {{ content }}
+    </div><!-- /.container -->
+
+    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
+    <!-- Include all compiled plugins (below), or include individual files as needed -->
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
+    <script src="{{ site.baseurl }}/page/js/codetabs.js"></script>
+
+    <!-- Google Analytics -->
+    <script>
+      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+      ga('create', 'UA-52545728-1', 'auto');
+      ga('send', 'pageview');
+    </script>
+
+    <!-- Disqus -->
+    <script type="text/javascript">
+    var disqus_shortname = 'stratosphere-eu';
+    (function() {
+        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+        dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
+        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+    })();
+</script>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/_layouts/default.html
----------------------------------------------------------------------
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html
deleted file mode 100644
index 3151128..0000000
--- a/docs/_layouts/default.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE html>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>Apache Flink: {{ page.title }}</title>
-    <link rel="shortcut icon" href="{{ site.baseurl }}/favicon.ico" type="image/x-icon">
-    <link rel="icon" href="{{ site.baseurl }}/favicon.ico" type="image/x-icon">
-    <link rel="stylesheet" href="{{ site.baseurl }}/css/bootstrap.css">
-    <link rel="stylesheet" href="{{ site.baseurl }}/css/bootstrap-lumen-custom.css">
-    <link rel="stylesheet" href="{{ site.baseurl }}/css/syntax.css">
-    <link rel="stylesheet" href="{{ site.baseurl }}/css/custom.css">
-    <link href="{{ site.baseurl }}/css/main/main.css" rel="stylesheet">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
-    <script src="{{ site.baseurl }}/js/bootstrap.min.js"></script>
-    <script src="{{ site.baseurl }}/js/codetabs.js"></script>
-
-    {% if page.mathjax %}
-    <script type="text/x-mathjax-config">
-        MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
-    </script>
-    <script type="text/javascript"
-            src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
-    </script>
-    {% endif %}
-  </head>
-  <body>
-
-    {% include navbar.html %}
-
-    <div style="padding-top: 0px;" class="container">
-
-      <div class="row">
-        <div class="col-md-3">
-          {% include sidenav.html %}
-        </div>  
-        <div class="col-md-9">
-          <div class="row" style="padding-bottom:5px">
-            <form class="form-horizontal" action="search.html">
-              <div class="col-sm-10"><input name="q" type="text" class="form-control" placeholder="Search all pages"></div>
-              <div class="col-sm-2"><button type="submit" class="btn btn-default">Search</button></div>
-            </form>
-          </div>
-
-          <div class="row">
-            <h1>{{ page.title }}{% if page.is_beta == true %} <span class="badge">Beta</span>{% endif %}</h1>
-  	  
-            {{ content }}
-  	  
-            <!-- Disqus Area -->
-            <div style="padding-top:30px" id="disqus_thread"></div>
-        
-            <script type="text/javascript">
-                /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
-                var disqus_shortname = 'stratosphere-eu'; // required: replace example with your forum shortname
-
-                /* * * DON'T EDIT BELOW THIS LINE * * */
-                (function() {
-                    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
-                    dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
-                    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
-                })();
-            </script>
-            <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
-          </div>
-        </div>
-        <div class="footer">
-          {% capture footer %}{% include footer.md %}{% endcapture %}
-          {{ footer | markdownify }}
-        </div>
-      </div>
-    </div>
-
-    <script>
-      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
-      ga('create', 'UA-52545728-1', 'auto');
-      ga('send', 'pageview');
-    </script>
-  </body>
-</html>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/_layouts/plain.html
----------------------------------------------------------------------
diff --git a/docs/_layouts/plain.html b/docs/_layouts/plain.html
new file mode 100644
index 0000000..6dd9305
--- /dev/null
+++ b/docs/_layouts/plain.html
@@ -0,0 +1,33 @@
+---
+layout: base
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<div class="row">
+  <div class="col-sm-10 col-sm-offset-1">
+    <h1>{{ page.title }}{% if page.is_beta %} <span class="badge">Beta</span>{% endif %}</h1>
+
+{{ content }}
+  </div>
+
+  <div class="col-sm-10 col-sm-offset-1">
+    <!-- Disqus thread and some vertical offset -->
+    <div style="margin-top: 75px; margin-bottom: 50px" id="disqus_thread"></div>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/_plugins/build_apidoc.rb
----------------------------------------------------------------------
diff --git a/docs/_plugins/build_apidoc.rb b/docs/_plugins/build_apidoc.rb
deleted file mode 100644
index 2326148..0000000
--- a/docs/_plugins/build_apidoc.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# ---------------------------------------------------------
-# Triggers building the API docs (javadoc and scaladoc)
-#
-# Written by Aljoscha Krettek 
-# ---------------------------------------------------------
-
-require 'fileutils'
-require 'rubygems'
-include FileUtils
-
-if ENV['BUILD_API'] == '1' then
-  # Build Javadoc
-
-  cd("..")
-
-  java8_doc_fix = ""
-
-  java_ver = Gem::Version.new(`java -version 2>&1 | awk -F '"' '/version/ {print $2}'`.gsub('_', '.'))
-
-  if java_ver > Gem::Version.new("1.8") then
-    puts "Detected Java8, adding -Xdoclint:none"
-    java8_doc_fix = '-DadditionalJOption="-Xdoclint:none"'
-  end
-
-  puts "Running mvn clean install -DskipTests"
-  puts `mvn clean install -DskipTests`
-
-  puts "Generating Javadoc"
-  javadoc_command = %{mvn javadoc:aggregate -Pdocs-and-source #{java8_doc_fix} -Dmaven.javadoc.failOnError=false -Dquiet=true -Dheader="<a href=\"/docs/0.8/\" target=\"_top\"><h1>Back to Flink Documentation</h1></a>"}
-  puts "Running: #{javadoc_command}"
-  puts `#{javadoc_command}`
-
-  cd("docs")
-
-  mkdir_p "api"
-
-  source = "../target/site/apidocs"
-  dest = "api/java/"
-
-  puts "cp -r " + source + "/. " + dest
-  cp_r(source + "/.", dest)
-
-  # Build Scaladoc
-  cd("../flink-scala")
-
-  puts "Generating Scaladoc"
-  puts `mvn scala:doc`
-
-  cd("../docs")
-
-  source = "../flink-scala/target/site/scaladocs"
-  dest = "api/scala/"
-
-  puts "cp -r " + source + "/. " + dest
-  cp_r(source + "/.", dest)
-
-
-end

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/_plugins/gh_link.rb
----------------------------------------------------------------------
diff --git a/docs/_plugins/gh_link.rb b/docs/_plugins/gh_link.rb
index 6916fda..7f0b858 100644
--- a/docs/_plugins/gh_link.rb
+++ b/docs/_plugins/gh_link.rb
@@ -46,7 +46,7 @@ module Jekyll
       name = name.to_s == '' ? file : name
       #refname = input[2].nil? ? file : input[2]
 
-      "[#{name}](#{config["FLINK_GITHUB_URL"]}/blob/#{gh_tag}/#{path})"
+      "[#{name}](#{config["github_url"]}/blob/#{gh_tag}/#{path})"
     end
   end
 end

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/_plugins/organizeLicenseHeaders.rb
----------------------------------------------------------------------
diff --git a/docs/_plugins/organizeLicenseHeaders.rb b/docs/_plugins/organizeLicenseHeaders.rb
deleted file mode 100644
index 3c84d17..0000000
--- a/docs/_plugins/organizeLicenseHeaders.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# ---------------------------------------------------------
-# Ensures that teh documentation contains the Apache License
-# headers once, not repeatedly for each include.
-#
-# Written by Fabian Hueske
-# ---------------------------------------------------------
-
-module Jekyll
-
-  module LicenseRemover
- 
-    AL2 = "<!--\n"+
-          "Licensed to the Apache Software Foundation (ASF) under one\n"+
-          "or more contributor license agreements.  See the NOTICE file\n"+
-          "distributed with this work for additional information\n"+
-          "regarding copyright ownership.  The ASF licenses this file\n"+
-          "to you under the Apache License, Version 2.0 (the\n"+
-          "\"License\"); you may not use this file except in compliance\n"+
-          "with the License.  You may obtain a copy of the License at\n"+
-          "\n"+
-          "http://www.apache.org/licenses/LICENSE-2.0\n"+
-          "\n"+
-          "Unless required by applicable law or agreed to in writing,\n"+
-          "software distributed under the License is distributed on an\n"+
-          "\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n"+
-          "KIND, either express or implied.  See the License for the\n"+
-          "specific language governing permissions and limitations\n"+
-          "under the License.\n"+
-          "-->\n"
-
-    def writeFile(dest, content)
-      path = self.destination(dest)
-      FileUtils.mkdir_p(File.dirname(path))
-      File.open(path, 'w') do |f|
-        # remove all Apache Licenses
-        withoutLicense = content.gsub(/<!--[^>]*LICENSE-2.0[^>]*-->/,'')
-        # put single Apache License on top
-        singleLicense = AL2+withoutLicense
-        # write file out
-        f.write(singleLicense)
-      end
-    end
-
-  end
-
-  class Post
-    include LicenseRemover
-    def write(dest)
-      self.writeFile(dest, self.output)
-    end
-  end
-
-  class Page
-    include LicenseRemover
-    def write(dest)
-      self.writeFile(dest, self.output)
-    end
-  end
-
-end

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/_plugins/removeDuplicateLicenseHeaders.rb
----------------------------------------------------------------------
diff --git a/docs/_plugins/removeDuplicateLicenseHeaders.rb b/docs/_plugins/removeDuplicateLicenseHeaders.rb
new file mode 100644
index 0000000..c5300c8
--- /dev/null
+++ b/docs/_plugins/removeDuplicateLicenseHeaders.rb
@@ -0,0 +1,77 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# ---------------------------------------------------------
+# Ensures that the documentation contains the Apache License
+# headers once, not repeatedly for each include.
+#
+# Written by Fabian Hueske
+# ---------------------------------------------------------
+
+module Jekyll
+
+  module LicenseRemover
+ 
+    AL2 = "<!--\n"+
+          "Licensed to the Apache Software Foundation (ASF) under one\n"+
+          "or more contributor license agreements.  See the NOTICE file\n"+
+          "distributed with this work for additional information\n"+
+          "regarding copyright ownership.  The ASF licenses this file\n"+
+          "to you under the Apache License, Version 2.0 (the\n"+
+          "\"License\"); you may not use this file except in compliance\n"+
+          "with the License.  You may obtain a copy of the License at\n"+
+          "\n"+
+          "http://www.apache.org/licenses/LICENSE-2.0\n"+
+          "\n"+
+          "Unless required by applicable law or agreed to in writing,\n"+
+          "software distributed under the License is distributed on an\n"+
+          "\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n"+
+          "KIND, either express or implied.  See the License for the\n"+
+          "specific language governing permissions and limitations\n"+
+          "under the License.\n"+
+          "-->\n"
+
+    def writeFile(dest, content)
+      path = self.destination(dest)
+      FileUtils.mkdir_p(File.dirname(path))
+      File.open(path, 'w') do |f|
+        # remove all Apache Licenses
+        withoutLicense = content.gsub(/<!--[^>]*LICENSE-2.0[^>]*-->/,'')
+        # put single Apache License on top
+        singleLicense = AL2+withoutLicense
+        # write file out
+        f.write(singleLicense)
+      end
+    end
+
+  end
+
+  class Post
+    include LicenseRemover
+    def write(dest)
+      self.writeFile(dest, self.output)
+    end
+  end
+
+  class Page
+    include LicenseRemover
+    def write(dest)
+      self.writeFile(dest, self.output)
+    end
+  end
+
+end

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/cli.md
----------------------------------------------------------------------
diff --git a/docs/apis/cli.md b/docs/apis/cli.md
new file mode 100644
index 0000000..4bfd1ad
--- /dev/null
+++ b/docs/apis/cli.md
@@ -0,0 +1,189 @@
+---
+title:  "Command-Line Interface"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+Flink provides a command-line interface to run programs that are packaged
+as JAR files, and control their execution.  The command line interface is part
+of any Flink setup, available in local single node setups and in
+distributed setups. It is located under `<flink-home>/bin/flink`
+and connects by default to the running Flink master (JobManager) that was
+started from the same installation directory.
+
+A prerequisite to using the command line interface is that the Flink
+master (JobManager) has been started (via `<flink-home>/bin/start-
+local.sh` or `<flink-home>/bin/start-cluster.sh`) or that a YARN
+environment is available.
+
+The command line can be used to
+
+- submit jobs for execution,
+- cancel a running job,
+- provide information about a job, and
+- list running and waiting jobs.
+
+* This will be replaced by the TOC
+{:toc}
+
+## Examples
+
+-   Run example program with no arguments.
+
+        ./bin/flink run ./examples/flink-java-examples-{{ site.version }}-WordCount.jar
+
+-   Run example program with arguments for input and result files
+
+        ./bin/flink run ./examples/flink-java-examples-{{ site.version }}-WordCount.jar \
+                               file:///home/user/hamlet.txt file:///home/user/wordcount_out
+
+-   Run example program with parallelism 16 and arguments for input and result files
+
+        ./bin/flink run -p 16 ./examples/flink-java-examples-{{ site.version }}-WordCount.jar \
+                                file:///home/user/hamlet.txt file:///home/user/wordcount_out
+
+-   Run example program on a specific JobManager:
+
+        ./bin/flink run -m myJMHost:6123 \
+                               ./examples/flink-java-examples-{{ site.version }}-WordCount.jar \
+                               file:///home/user/hamlet.txt file:///home/user/wordcount_out
+
+-   Run example program with a specific class as an entry point:
+
+        ./bin/flink run -c org.apache.flink.examples.java.wordcount.WordCount \
+                               ./examples/flink-java-examples-{{ site.version }}-WordCount.jar \
+                               file:///home/user/hamlet.txt file:///home/user/wordcount_out
+
+-   Run example program using a [per-job YARN cluster](yarn_setup.html#run-a-single-flink-job-on-hadoop-yarn) with 2 TaskManagers:
+
+        ./bin/flink run -m yarn-cluster -yn 2 \
+                               ./examples/flink-java-examples-{{ site.version }}-WordCount.jar \
+                               hdfs:///user/hamlet.txt hdfs:///user/wordcount_out
+
+-   Display the optimized execution plan for the WordCount example program as JSON:
+
+        ./bin/flink info ./examples/flink-java-examples-{{ site.version }}-WordCount.jar \
+                                file:///home/user/hamlet.txt file:///home/user/wordcount_out
+
+-   List scheduled and running jobs (including their JobIDs):
+
+        ./bin/flink list
+
+-   List scheduled jobs (including their JobIDs):
+
+        ./bin/flink list -s
+
+-   List running jobs (including their JobIDs):
+
+        ./bin/flink list -r
+
+-   Cancel a job:
+
+        ./bin/flink cancel <jobID>
+
+## Usage
+
+The command line syntax is as follows:
+
+~~~
+./flink <ACTION> [OPTIONS] [ARGUMENTS]
+
+The following actions are available:
+
+Action "run" compiles and runs a program.
+
+  Syntax: run [OPTIONS] <jar-file> <arguments>
+  "run" action options:
+     -c,--class <classname>           Class with the program entry point ("main"
+                                      method or "getPlan()" method. Only needed
+                                      if the JAR file does not specify the class
+                                      in its manifest.
+     -m,--jobmanager <host:port>      Address of the JobManager (master) to
+                                      which to connect. Specify 'yarn-cluster'
+                                      as the JobManager to deploy a YARN cluster
+                                      for the job. Use this flag to connect to a
+                                      different JobManager than the one
+                                      specified in the configuration.
+     -p,--parallelism <parallelism>   The parallelism with which to run the
+                                      program. Optional flag to override the
+                                      default value specified in the
+                                      configuration.
+  Additional arguments if -m yarn-cluster is set:
+     -yD <arg>                            Dynamic properties
+     -yd,--yarndetached                   Start detached
+     -yj,--yarnjar <arg>                  Path to Flink jar file
+     -yjm,--yarnjobManagerMemory <arg>    Memory for JobManager Container [in
+                                          MB]
+     -yn,--yarncontainer <arg>            Number of YARN container to allocate
+                                          (=Number of Task Managers)
+     -yq,--yarnquery                      Display available YARN resources
+                                          (memory, cores)
+     -yqu,--yarnqueue <arg>               Specify YARN queue.
+     -ys,--yarnslots <arg>                Number of slots per TaskManager
+     -yt,--yarnship <arg>                 Ship files in the specified directory
+                                          (t for transfer)
+     -ytm,--yarntaskManagerMemory <arg>   Memory per TaskManager Container [in
+                                          MB]
+
+
+Action "info" shows the optimized execution plan of the program (JSON).
+
+  Syntax: info [OPTIONS] <jar-file> <arguments>
+  "info" action options:
+     -c,--class <classname>           Class with the program entry point ("main"
+                                      method or "getPlan()" method. Only needed
+                                      if the JAR file does not specify the class
+                                      in its manifest.
+     -m,--jobmanager <host:port>      Address of the JobManager (master) to
+                                      which to connect. Specify 'yarn-cluster'
+                                      as the JobManager to deploy a YARN cluster
+                                      for the job. Use this flag to connect to a
+                                      different JobManager than the one
+                                      specified in the configuration.
+     -p,--parallelism <parallelism>   The parallelism with which to run the
+                                      program. Optional flag to override the
+                                      default value specified in the
+                                      configuration.
+
+
+Action "list" lists running and scheduled programs.
+
+  Syntax: list [OPTIONS]
+  "list" action options:
+     -m,--jobmanager <host:port>   Address of the JobManager (master) to which
+                                   to connect. Specify 'yarn-cluster' as the
+                                   JobManager to deploy a YARN cluster for the
+                                   job. Use this flag to connect to a different
+                                   JobManager than the one specified in the
+                                   configuration.
+     -r,--running                  Show only running programs and their JobIDs
+     -s,--scheduled                Show only scheduled programs and their JobIDs
+
+
+Action "cancel" cancels a running program.
+
+  Syntax: cancel [OPTIONS] <Job ID>
+  "cancel" action options:
+     -m,--jobmanager <host:port>   Address of the JobManager (master) to which
+                                   to connect. Specify 'yarn-cluster' as the
+                                   JobManager to deploy a YARN cluster for the
+                                   job. Use this flag to connect to a different
+                                   JobManager than the one specified in the
+                                   configuration.
+~~~

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/cluster_execution.md
----------------------------------------------------------------------
diff --git a/docs/apis/cluster_execution.md b/docs/apis/cluster_execution.md
new file mode 100644
index 0000000..c2b3c27
--- /dev/null
+++ b/docs/apis/cluster_execution.md
@@ -0,0 +1,146 @@
+---
+title:  "Cluster Execution"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* This will be replaced by the TOC
+{:toc}
+
+Flink programs can run distributed on clusters of many machines. There
+are two ways to send a program to a cluster for execution:
+
+## Command Line Interface
+
+The command line interface lets you submit packaged programs (JARs) to a cluster
+(or single machine setup).
+
+Please refer to the [Command Line Interface](cli.html) documentation for
+details.
+
+## Remote Environment
+
+The remote environment lets you execute Flink Java programs on a cluster
+directly. The remote environment points to the cluster on which you want to
+execute the program.
+
+### Maven Dependency
+
+If you are developing your program as a Maven project, you have to add the
+`flink-clients` module using this dependency:
+
+~~~xml
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-clients</artifactId>
+  <version>{{ site.version }}</version>
+</dependency>
+~~~
+
+### Example
+
+The following illustrates the use of the `RemoteEnvironment`:
+
+~~~java
+public static void main(String[] args) throws Exception {
+    ExecutionEnvironment env = ExecutionEnvironment
+        .createRemoteEnvironment("strato-master", "7661", "/home/user/udfs.jar");
+
+    DataSet<String> data = env.readTextFile("hdfs://path/to/file");
+
+    data
+        .filter(new FilterFunction<String>() {
+            public boolean filter(String value) {
+                return value.startsWith("http://");
+            }
+        })
+        .writeAsText("hdfs://path/to/result");
+
+    env.execute();
+}
+~~~
+
+Note that the program contains custom user code and hence requires a JAR file with
+the classes of the code attached. The constructor of the remote environment
+takes the path(s) to the JAR file(s).
+
+## Remote Executor
+
+Similar to the RemoteEnvironment, the RemoteExecutor lets you execute
+Flink programs on a cluster directly. The remote executor accepts a
+*Plan* object, which describes the program as a single executable unit.
+
+### Maven Dependency
+
+If you are developing your program in a Maven project, you have to add the
+`flink-clients` module using this dependency:
+
+~~~xml
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-clients</artifactId>
+  <version>{{ site.version }}</version>
+</dependency>
+~~~
+
+### Example
+
+The following illustrates the use of the `RemoteExecutor` with the Scala API:
+
+~~~scala
+def main(args: Array[String]) {
+    val input = TextFile("hdfs://path/to/file")
+
+    val words = input flatMap { _.toLowerCase().split("""\W+""") filter { _ != "" } }
+    val counts = words groupBy { x => x } count()
+
+    val output = counts.write(wordsOutput, CsvOutputFormat())
+  
+    val plan = new ScalaPlan(Seq(output), "Word Count")
+    val executor = new RemoteExecutor("strato-master", 7881, "/path/to/jarfile.jar")
+    executor.executePlan(p);
+}
+~~~
+
+The following illustrates the use of the `RemoteExecutor` with the Java API (as
+an alternative to the RemoteEnvironment):
+
+~~~java
+public static void main(String[] args) throws Exception {
+    ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+    DataSet<String> data = env.readTextFile("hdfs://path/to/file");
+
+    data
+        .filter(new FilterFunction<String>() {
+            public boolean filter(String value) {
+                return value.startsWith("http://");
+            }
+        })
+        .writeAsText("hdfs://path/to/result");
+
+    Plan p = env.createProgramPlan();
+    RemoteExecutor e = new RemoteExecutor("strato-master", 7881, "/path/to/jarfile.jar");
+    e.executePlan(p);
+}
+~~~
+
+Note that the program contains custom UDFs and hence requires a JAR file with
+the classes of the code attached. The constructor of the remote executor takes
+the path(s) to the JAR file(s).


[18/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/dataflow.svg
----------------------------------------------------------------------
diff --git a/docs/img/dataflow.svg b/docs/img/dataflow.svg
deleted file mode 100644
index 26b7a18..0000000
--- a/docs/img/dataflow.svg
+++ /dev/null
@@ -1,998 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="800"
-   height="248"
-   id="svg10359"
-   version="1.1"
-   inkscape:version="0.48.3.1 r9886"
-   sodipodi:docname="dataflow.svg">
-  <defs
-     id="defs10361">
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart"
-       style="overflow:visible">
-      <path
-         id="path11612"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible">
-      <path
-         id="path11609"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(-0.8,0,0,-0.8,-10,0)"
-         inkscape:connector-curvature="0" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-7"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-4"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-5"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-47"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-3"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-8"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-32"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-0"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-4"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-1"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-8"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-7"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-0"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-3"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-37"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-82"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-05"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-5"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-03"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-00"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-6"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-84"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-1"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-6"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-42"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-07"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-74"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-32"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-89"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-80"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-77"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-69"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-79"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-03"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-41"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-02"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Mstart-45"
-       style="overflow:visible">
-      <path
-         inkscape:connector-curvature="0"
-         id="path11612-01"
-         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
-         transform="matrix(0.4,0,0,0.4,4,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.4"
-     inkscape:cx="250.86321"
-     inkscape:cy="254.0586"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1916"
-     inkscape:window-height="1161"
-     inkscape:window-x="1400"
-     inkscape:window-y="18"
-     inkscape:window-maximized="0" />
-  <metadata
-     id="metadata10364">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-101.14286,-83.672699)">
-    <g
-       id="g12838"
-       transform="translate(94.357143,-2.3120884)">
-      <g
-         transform="translate(-10.618665,-105.0985)"
-         id="g11342">
-        <path
-           sodipodi:type="arc"
-           style="fill:#e0e4cc;fill-opacity:1;stroke:#333333;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-           id="path10539"
-           sodipodi:cx="130.71428"
-           sodipodi:cy="229.1479"
-           sodipodi:rx="34.285713"
-           sodipodi:ry="33.214287"
-           d="m 164.99999,229.1479 c 0,18.34375 -15.35023,33.21429 -34.28571,33.21429 -18.93548,0 -34.285714,-14.87054 -34.285714,-33.21429 0,-18.34374 15.350234,-33.21428 34.285714,-33.21428 18.93548,0 34.28571,14.87054 34.28571,33.21428 z"
-           transform="translate(16.33296,-1.5382389)" />
-        <text
-           xml:space="preserve"
-           style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
-           x="147.0238"
-           y="223.23857"
-           id="text10541"
-           sodipodi:linespacing="125%"><tspan
-             sodipodi:role="line"
-             id="tspan10543"
-             x="147.0238"
-             y="223.23857"
-             style="text-align:center;text-anchor:middle">Data</tspan><tspan
-             sodipodi:role="line"
-             x="147.0238"
-             y="243.23857"
-             id="tspan10545"
-             style="text-align:center;text-anchor:middle">Source</tspan></text>
-      </g>
-      <g
-         transform="translate(-126.14284,-10.618054)"
-         id="g11348">
-        <path
-           sodipodi:type="arc"
-           style="fill:#e0e4cc;fill-opacity:1;stroke:#333333;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-           id="path10539-2"
-           sodipodi:cx="130.71428"
-           sodipodi:cy="229.1479"
-           sodipodi:rx="34.285713"
-           sodipodi:ry="33.214287"
-           d="m 164.99999,229.1479 c 0,18.34375 -15.35023,33.21429 -34.28571,33.21429 -18.93548,0 -34.285714,-14.87054 -34.285714,-33.21429 0,-18.34374 15.350234,-33.21428 34.285714,-33.21428 18.93548,0 34.28571,14.87054 34.28571,33.21428 z"
-           transform="translate(240.00001,78.928564)" />
-        <text
-           xml:space="preserve"
-           style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
-           x="370.69086"
-           y="303.70538"
-           id="text10541-6"
-           sodipodi:linespacing="125%"><tspan
-             sodipodi:role="line"
-             id="tspan10543-6"
-             x="370.69086"
-             y="303.70538"
-             style="text-align:center;text-anchor:middle">Data</tspan><tspan
-             sodipodi:role="line"
-             x="370.69086"
-             y="323.70538"
-             id="tspan10545-9"
-             style="text-align:center;text-anchor:middle">Source</tspan></text>
-      </g>
-      <g
-         transform="translate(-69.857101,-112.71429)"
-         id="g11503">
-        <g
-           id="g11348-9"
-           transform="translate(160,98.571427)">
-          <path
-             transform="translate(240.00001,78.928564)"
-             d="m 164.99999,229.1479 c 0,18.34375 -15.35023,33.21429 -34.28571,33.21429 -18.93548,0 -34.285714,-14.87054 -34.285714,-33.21429 0,-18.34374 15.350234,-33.21428 34.285714,-33.21428 18.93548,0 34.28571,14.87054 34.28571,33.21428 z"
-             sodipodi:ry="33.214287"
-             sodipodi:rx="34.285713"
-             sodipodi:cy="229.1479"
-             sodipodi:cx="130.71428"
-             id="path10539-2-2"
-             style="fill:#e0e4cc;fill-opacity:1;stroke:#333333;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-             sodipodi:type="arc" />
-          <text
-             sodipodi:linespacing="125%"
-             id="text10541-6-8"
-             y="303.70538"
-             x="370.69086"
-             style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
-             xml:space="preserve"><tspan
-               style="text-align:center;text-anchor:middle"
-               y="303.70538"
-               x="370.69086"
-               id="tspan10543-6-9"
-               sodipodi:role="line">Data</tspan><tspan
-               style="text-align:center;text-anchor:middle"
-               id="tspan10545-9-8"
-               y="323.70538"
-               x="370.69086"
-               sodipodi:role="line">Source</tspan></text>
-        </g>
-      </g>
-      <g
-         transform="translate(-84.847654,-64.285714)"
-         id="g11488">
-        <path
-           transform="translate(198.70482,-42.351028)"
-           d="m 164.99999,229.1479 c 0,18.34375 -15.35023,33.21429 -34.28571,33.21429 -18.93548,0 -34.285714,-14.87054 -34.285714,-33.21429 0,-18.34374 15.350234,-33.21428 34.285714,-33.21428 18.93548,0 34.28571,14.87054 34.28571,33.21428 z"
-           sodipodi:ry="33.214287"
-           sodipodi:rx="34.285713"
-           sodipodi:cy="229.1479"
-           sodipodi:cx="130.71428"
-           id="path10539-4"
-           style="fill:#4ecdc4;fill-opacity:1;stroke:#333333;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-           sodipodi:type="arc" />
-        <text
-           xml:space="preserve"
-           style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
-           x="313.57144"
-           y="190.93359"
-           id="text11423"
-           sodipodi:linespacing="125%"><tspan
-             sodipodi:role="line"
-             id="tspan11425"
-             x="313.57144"
-             y="190.93359">Map</tspan></text>
-      </g>
-      <g
-         transform="translate(22.684718,-61.12656)"
-         id="g11483">
-        <path
-           transform="translate(199.31529,86.152908)"
-           d="m 164.99999,229.1479 c 0,18.34375 -15.35023,33.21429 -34.28571,33.21429 -18.93548,0 -34.285714,-14.87054 -34.285714,-33.21429 0,-18.34374 15.350234,-33.21428 34.285714,-33.21428 18.93548,0 34.28571,14.87054 34.28571,33.21428 z"
-           sodipodi:ry="33.214287"
-           sodipodi:rx="34.285713"
-           sodipodi:cy="229.1479"
-           sodipodi:cx="130.71428"
-           id="path10539-08"
-           style="fill:#f3b33f;fill-opacity:1;stroke:#333333;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-           sodipodi:type="arc" />
-        <text
-           xml:space="preserve"
-           style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
-           x="302.14285"
-           y="320.93362"
-           id="text11427"
-           sodipodi:linespacing="125%"><tspan
-             sodipodi:role="line"
-             id="tspan11429"
-             x="302.14285"
-             y="320.93362">Reduce</tspan></text>
-      </g>
-      <g
-         transform="translate(5.4420293,-37.982104)"
-         id="g11493">
-        <path
-           transform="translate(324.70088,19.724304)"
-           d="m 164.99999,229.1479 c 0,18.34375 -15.35023,33.21429 -34.28571,33.21429 -18.93548,0 -34.285714,-14.87054 -34.285714,-33.21429 0,-18.34374 15.350234,-33.21428 34.285714,-33.21428 18.93548,0 34.28571,14.87054 34.28571,33.21428 z"
-           sodipodi:ry="33.214287"
-           sodipodi:rx="34.285713"
-           sodipodi:cy="229.1479"
-           sodipodi:cx="130.71428"
-           id="path10539-7"
-           style="fill:#b4a7d6;fill-opacity:1;stroke:#333333;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-           sodipodi:type="arc" />
-        <text
-           xml:space="preserve"
-           style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
-           x="433.57141"
-           y="254.50502"
-           id="text11431"
-           sodipodi:linespacing="125%"><tspan
-             sodipodi:role="line"
-             id="tspan11433"
-             x="433.57141"
-             y="254.50502">Match</tspan></text>
-      </g>
-      <g
-         transform="translate(-4.272862,3.5697637)"
-         id="g11498">
-        <path
-           transform="translate(442.55859,19.694183)"
-           d="m 164.99999,229.1479 c 0,18.34375 -15.35023,33.21429 -34.28571,33.21429 -18.93548,0 -34.285714,-14.87054 -34.285714,-33.21429 0,-18.34374 15.350234,-33.21428 34.285714,-33.21428 18.93548,0 34.28571,14.87054 34.28571,33.21428 z"
-           sodipodi:ry="33.214287"
-           sodipodi:rx="34.285713"
-           sodipodi:cy="229.1479"
-           sodipodi:cx="130.71428"
-           id="path10539-0"
-           style="fill:#87d69b;fill-opacity:1;stroke:#333333;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-           sodipodi:type="arc" />
-        <text
-           xml:space="preserve"
-           style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
-           x="540.71429"
-           y="253.07646"
-           id="text11450"
-           sodipodi:linespacing="125%"><tspan
-             sodipodi:role="line"
-             id="tspan11452"
-             x="540.71429"
-             y="253.07646">CoGroup</tspan></text>
-      </g>
-      <g
-         transform="translate(24.571445,-118.61493)"
-         id="g11478">
-        <path
-           transform="translate(89.285721,100.35713)"
-           d="m 164.99999,229.1479 c 0,18.34375 -15.35023,33.21429 -34.28571,33.21429 -18.93548,0 -34.285714,-14.87054 -34.285714,-33.21429 0,-18.34374 15.350234,-33.21428 34.285714,-33.21428 18.93548,0 34.28571,14.87054 34.28571,33.21428 z"
-           sodipodi:ry="33.214287"
-           sodipodi:rx="34.285713"
-           sodipodi:cy="229.1479"
-           sodipodi:cx="130.71428"
-           id="path10539-4-2"
-           style="fill:#4ecdc4;fill-opacity:1;stroke:#333333;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-           sodipodi:type="arc" />
-        <text
-           xml:space="preserve"
-           style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
-           x="204.15234"
-           y="333.64175"
-           id="text11423-8"
-           sodipodi:linespacing="125%"><tspan
-             sodipodi:role="line"
-             id="tspan11425-8"
-             x="204.15234"
-             y="333.64175">Map</tspan></text>
-      </g>
-      <g
-         transform="translate(146.42857,-154.23604)"
-         id="g11503-1">
-        <g
-           id="g11348-9-6"
-           transform="translate(160,98.571427)">
-          <path
-             transform="translate(240.00001,78.928564)"
-             d="m 164.99999,229.1479 c 0,18.34375 -15.35023,33.21429 -34.28571,33.21429 -18.93548,0 -34.285714,-14.87054 -34.285714,-33.21429 0,-18.34374 15.350234,-33.21428 34.285714,-33.21428 18.93548,0 34.28571,14.87054 34.28571,33.21428 z"
-             sodipodi:ry="33.214287"
-             sodipodi:rx="34.285713"
-             sodipodi:cy="229.1479"
-             sodipodi:cx="130.71428"
-             id="path10539-2-2-4"
-             style="fill:#e1f5c4;fill-opacity:1;stroke:#333333;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-             sodipodi:type="arc" />
-          <text
-             sodipodi:linespacing="125%"
-             id="text10541-6-8-2"
-             y="303.70538"
-             x="370.69086"
-             style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
-             xml:space="preserve"><tspan
-               style="text-align:center;text-anchor:middle"
-               y="303.70538"
-               x="370.69086"
-               id="tspan10543-6-9-6"
-               sodipodi:role="line">Data</tspan><tspan
-               style="text-align:center;text-anchor:middle"
-               id="tspan10545-9-8-8"
-               y="323.70538"
-               x="370.69086"
-               sodipodi:role="line">Sink</tspan></text>
-        </g>
-      </g>
-      <g
-         transform="translate(-10.618665,-16.719561)"
-         id="g11342-0">
-        <path
-           sodipodi:type="arc"
-           style="fill:#e0e4cc;fill-opacity:1;stroke:#333333;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-           id="path10539-20"
-           sodipodi:cx="130.71428"
-           sodipodi:cy="229.1479"
-           sodipodi:rx="34.285713"
-           sodipodi:ry="33.214287"
-           d="m 164.99999,229.1479 c 0,18.34375 -15.35023,33.21429 -34.28571,33.21429 -18.93548,0 -34.285714,-14.87054 -34.285714,-33.21429 0,-18.34374 15.350234,-33.21428 34.285714,-33.21428 18.93548,0 34.28571,14.87054 34.28571,33.21428 z"
-           transform="translate(16.33296,-1.5382389)" />
-        <text
-           xml:space="preserve"
-           style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
-           x="147.0238"
-           y="223.23857"
-           id="text10541-9"
-           sodipodi:linespacing="125%"><tspan
-             sodipodi:role="line"
-             id="tspan10543-0"
-             x="147.0238"
-             y="223.23857"
-             style="text-align:center;text-anchor:middle">Data</tspan><tspan
-             sodipodi:role="line"
-             x="147.0238"
-             y="243.23857"
-             id="tspan10545-2"
-             style="text-align:center;text-anchor:middle">Source</tspan></text>
-      </g>
-      <g
-         transform="translate(26.003898,-327.17553)"
-         id="g11595">
-        <path
-           sodipodi:type="arc"
-           style="fill:#93cbf8;fill-opacity:1;stroke:#333333;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-           id="path10539-7-3"
-           sodipodi:cx="130.71428"
-           sodipodi:cy="229.1479"
-           sodipodi:rx="34.285713"
-           sodipodi:ry="33.214287"
-           d="m 164.99999,229.1479 c 0,18.34375 -15.35023,33.21429 -34.28571,33.21429 -18.93548,0 -34.285714,-14.87054 -34.285714,-33.21429 0,-18.34374 15.350234,-33.21428 34.285714,-33.21428 18.93548,0 34.28571,14.87054 34.28571,33.21428 z"
-           transform="translate(195.99611,264.72826)" />
-        <text
-           xml:space="preserve"
-           style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
-           x="305.71429"
-           y="499.50507"
-           id="text11591"
-           sodipodi:linespacing="125%"><tspan
-             sodipodi:role="line"
-             id="tspan11593"
-             x="305.71429"
-             y="499.50507">Union</tspan></text>
-      </g>
-      <path
-         inkscape:connector-curvature="0"
-         id="path11600"
-         d="m 207.29525,122.36218 -36.6524,0"
-         style="fill:none;stroke:#333333;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path11600-3"
-         d="m 207.61192,210.8901 -36.6524,0"
-         style="fill:none;stroke:#333333;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path11600-5"
-         d="M 316.50477,153.07647 276.10269,135.86026"
-         style="fill:none;stroke:#333333;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path11600-30"
-         d="m 318.50402,182.481 -41.52749,16.69655"
-         style="fill:none;stroke:#333333;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path11600-3-1"
-         d="m 640.16549,252.41185 -36.65241,0"
-         style="fill:none;stroke:#333333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path11600-5-4"
-         d="M 425.80414,196.37869 384.84328,179.32635"
-         style="fill:none;stroke:#333333;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path11600-5-4-6"
-         d="M 535.14863,238.16024 493.24884,221.04335"
-         style="fill:none;stroke:#333333;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path11600-30-7"
-         d="m 425.9661,225.06044 -41.52749,16.69655"
-         style="fill:none;stroke:#333333;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path11600-30-7-0"
-         d="m 317.69053,267.33329 -41.52749,16.69655"
-         style="fill:none;stroke:#333333;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)" />
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path11600-30-7-7"
-         d="m 537.22878,272.70837 -41.52749,16.69655"
-         style="fill:none;stroke:#333333;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)" />
-    </g>
-    <g
-       id="g12953"
-       style="fill:#cccccc;stroke-width:5.2870717;stroke-miterlimit:4;stroke-dasharray:none"
-       transform="matrix(0.41814798,0,0,0.40644285,558.62945,282.71148)">
-      <path
-         id="path12920-9"
-         d="m -278.8125,-54.03125 0,53.625 c -0.0646,0.44696162 -0.0937,0.92003723 -0.0937,1.375 0,10.49341 17.46089,19 39,19 21.49586,0 38.93008,-8.473146 39,-18.9375 l 0.0937,0 0,-55.0625 -78,0 z"
-         style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:4.85137939;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         inkscape:connector-curvature="0"
-         transform="translate(101.14286,83.672699)" />
-      <path
-         transform="matrix(1.0434603,0,0,1.3435029,44.746165,-114.27442)"
-         d="m -138.3909,105.56849 c 0,7.81048 -16.73364,14.14213 -37.37564,14.14213 -20.642,0 -37.37565,-6.33165 -37.37565,-14.14213 0,-7.810487 16.73365,-14.142137 37.37565,-14.142137 20.642,0 37.37564,6.33165 37.37564,14.142137 z"
-         sodipodi:ry="14.142136"
-         sodipodi:rx="37.375645"
-         sodipodi:cy="105.56849"
-         sodipodi:cx="-175.76654"
-         id="path12920"
-         style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:4.09739685;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         sodipodi:type="arc" />
-    </g>
-    <g
-       id="g13048"
-       transform="matrix(0.53768785,0,0,0.6237725,211.71852,24.496616)">
-      <g
-         id="g12998">
-        <path
-           style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:3.45343852;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
-           d="m -83.252987,150.6069 46.538697,0 0,46.65177 0,9.41403 -10.803621,0 -35.735076,0 z"
-           id="rect12981"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccc" />
-        <path
-           style="fill:none;stroke:#333333;stroke-width:3.45343876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m -150.90663,122.80518 6.55098,-10.69463 6.44621,4.69223"
-           id="path12984"
-           inkscape:connector-curvature="0"
-           transform="translate(101.14286,83.672699)"
-           sodipodi:nodetypes="ccc" />
-      </g>
-      <g
-         id="g12998-8"
-         transform="translate(-5.7638991,-4.842059)">
-        <path
-           style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:3.45343852;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
-           d="m -83.252987,150.6069 46.538697,0 0,46.65177 0,9.41403 -10.803621,0 -35.735076,0 z"
-           id="rect12981-0"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccc" />
-        <path
-           style="fill:none;stroke:#333333;stroke-width:3.45343876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m -150.90663,122.80518 6.55098,-10.69463 6.44621,4.69223"
-           id="path12984-5"
-           inkscape:connector-curvature="0"
-           transform="translate(101.14286,83.672699)"
-           sodipodi:nodetypes="ccc" />
-      </g>
-      <g
-         id="g12998-82"
-         transform="translate(-11.5278,-9.6840945)">
-        <path
-           style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:3.45343852;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
-           d="m -83.252987,150.6069 46.538697,0 0,46.65177 0,9.41403 -10.803621,0 -35.735076,0 z"
-           id="rect12981-4"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccc" />
-        <path
-           style="fill:none;stroke:#333333;stroke-width:3.45343876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m -150.90663,122.80518 6.55098,-10.69463 6.44621,4.69223"
-           id="path12984-0"
-           inkscape:connector-curvature="0"
-           transform="translate(101.14286,83.672699)"
-           sodipodi:nodetypes="ccc" />
-      </g>
-      <g
-         id="g12998-1"
-         transform="translate(-17.291695,-14.526155)">
-        <path
-           style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:3.45343852;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
-           d="m -83.252987,150.6069 46.538697,0 0,46.65177 0,9.41403 -10.803621,0 -35.735076,0 z"
-           id="rect12981-1"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccc" />
-        <path
-           style="fill:none;stroke:#333333;stroke-width:3.45343876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m -150.90663,122.80518 6.55098,-10.69463 6.44621,4.69223"
-           id="path12984-6"
-           inkscape:connector-curvature="0"
-           transform="translate(101.14286,83.672699)"
-           sodipodi:nodetypes="ccc" />
-      </g>
-    </g>
-    <g
-       id="g13048-1"
-       transform="matrix(0.53768785,0,0,0.6237725,211.80554,112.87556)">
-      <g
-         id="g12998-3">
-        <path
-           style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:3.45343852;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
-           d="m -83.252987,150.6069 46.538697,0 0,46.65177 0,9.41403 -10.803621,0 -35.735076,0 z"
-           id="rect12981-3"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccc" />
-        <path
-           style="fill:none;stroke:#333333;stroke-width:3.45343876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m -150.90663,122.80518 6.55098,-10.69463 6.44621,4.69223"
-           id="path12984-04"
-           inkscape:connector-curvature="0"
-           transform="translate(101.14286,83.672699)"
-           sodipodi:nodetypes="ccc" />
-      </g>
-      <g
-         id="g12998-8-8"
-         transform="translate(-5.7638991,-4.842059)">
-        <path
-           style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:3.45343852;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
-           d="m -83.252987,150.6069 46.538697,0 0,46.65177 0,9.41403 -10.803621,0 -35.735076,0 z"
-           id="rect12981-0-0"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccc" />
-        <path
-           style="fill:none;stroke:#333333;stroke-width:3.45343876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m -150.90663,122.80518 6.55098,-10.69463 6.44621,4.69223"
-           id="path12984-5-0"
-           inkscape:connector-curvature="0"
-           transform="translate(101.14286,83.672699)"
-           sodipodi:nodetypes="ccc" />
-      </g>
-      <g
-         id="g12998-82-0"
-         transform="translate(-11.5278,-9.6840945)">
-        <path
-           style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:3.45343852;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
-           d="m -83.252987,150.6069 46.538697,0 0,46.65177 0,9.41403 -10.803621,0 -35.735076,0 z"
-           id="rect12981-4-0"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccc" />
-        <path
-           style="fill:none;stroke:#333333;stroke-width:3.45343876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m -150.90663,122.80518 6.55098,-10.69463 6.44621,4.69223"
-           id="path12984-0-3"
-           inkscape:connector-curvature="0"
-           transform="translate(101.14286,83.672699)"
-           sodipodi:nodetypes="ccc" />
-      </g>
-      <g
-         id="g12998-1-0"
-         transform="translate(-17.291695,-14.526155)">
-        <path
-           style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:3.45343852;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
-           d="m -83.252987,150.6069 46.538697,0 0,46.65177 0,9.41403 -10.803621,0 -35.735076,0 z"
-           id="rect12981-1-7"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccc" />
-        <path
-           style="fill:none;stroke:#333333;stroke-width:3.45343876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m -150.90663,122.80518 6.55098,-10.69463 6.44621,4.69223"
-           id="path12984-6-0"
-           inkscape:connector-curvature="0"
-           transform="translate(101.14286,83.672699)"
-           sodipodi:nodetypes="ccc" />
-      </g>
-    </g>
-    <g
-       id="g13048-3"
-       transform="matrix(0.53768785,0,0,0.6237725,319.87156,199.44387)">
-      <g
-         id="g12998-87">
-        <path
-           style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:3.45343852;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
-           d="m -83.252987,150.6069 46.538697,0 0,46.65177 0,9.41403 -10.803621,0 -35.735076,0 z"
-           id="rect12981-48"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccc" />
-        <path
-           style="fill:none;stroke:#333333;stroke-width:3.45343876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m -150.90663,122.80518 6.55098,-10.69463 6.44621,4.69223"
-           id="path12984-2"
-           inkscape:connector-curvature="0"
-           transform="translate(101.14286,83.672699)"
-           sodipodi:nodetypes="ccc" />
-      </g>
-      <g
-         id="g12998-8-86"
-         transform="translate(-5.7638991,-4.842059)">
-        <path
-           style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:3.45343852;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
-           d="m -83.252987,150.6069 46.538697,0 0,46.65177 0,9.41403 -10.803621,0 -35.735076,0 z"
-           id="rect12981-0-2"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccc" />
-        <path
-           style="fill:none;stroke:#333333;stroke-width:3.45343876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m -150.90663,122.80518 6.55098,-10.69463 6.44621,4.69223"
-           id="path12984-5-3"
-           inkscape:connector-curvature="0"
-           transform="translate(101.14286,83.672699)"
-           sodipodi:nodetypes="ccc" />
-      </g>
-      <g
-         id="g12998-82-6"
-         transform="translate(-11.5278,-9.6840945)">
-        <path
-           style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:3.45343852;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
-           d="m -83.252987,150.6069 46.538697,0 0,46.65177 0,9.41403 -10.803621,0 -35.735076,0 z"
-           id="rect12981-4-7"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccc" />
-        <path
-           style="fill:none;stroke:#333333;stroke-width:3.45343876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m -150.90663,122.80518 6.55098,-10.69463 6.44621,4.69223"
-           id="path12984-0-7"
-           inkscape:connector-curvature="0"
-           transform="translate(101.14286,83.672699)"
-           sodipodi:nodetypes="ccc" />
-      </g>
-      <g
-         id="g12998-1-6"
-         transform="translate(-17.291695,-14.526155)">
-        <path
-           style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:3.45343852;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
-           d="m -83.252987,150.6069 46.538697,0 0,46.65177 0,9.41403 -10.803621,0 -35.735076,0 z"
-           id="rect12981-1-8"
-           inkscape:connector-curvature="0"
-           sodipodi:nodetypes="ccccccc" />
-        <path
-           style="fill:none;stroke:#333333;stroke-width:3.45343876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           d="m -150.90663,122.80518 6.55098,-10.69463 6.44621,4.69223"
-           id="path12984-6-1"
-           inkscape:connector-curvature="0"
-           transform="translate(101.14286,83.672699)"
-           sodipodi:nodetypes="ccc" />
-      </g>
-    </g>
-    <g
-       id="g13190"
-       transform="translate(447.14285,-100.13051)">
-      <path
-         sodipodi:nodetypes="ccccccc"
-         inkscape:connector-curvature="0"
-         id="rect12981-1-8-1"
-         d="m 363.80979,348.47226 25.02329,0 0,29.10009 0,5.87221 -5.80897,0 -19.21432,0 z"
-         style="fill:#cccccc;fill-opacity:1;stroke:#333333;stroke-width:1.99999976;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0" />
-      <path
-         sodipodi:nodetypes="ccc"
-         inkscape:connector-curvature="0"
-         id="path12984-6-1-4"
-         d="m 381.81653,383.32304 3.52238,-6.67102 3.46605,2.92689"
-         style="fill:none;stroke:#333333;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-    </g>
-  </g>
-</svg>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/flink_on_tez_translation.png
----------------------------------------------------------------------
diff --git a/docs/img/flink_on_tez_translation.png b/docs/img/flink_on_tez_translation.png
deleted file mode 100644
index 88fa4d5..0000000
Binary files a/docs/img/flink_on_tez_translation.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/flink_tez_vertex.png
----------------------------------------------------------------------
diff --git a/docs/img/flink_tez_vertex.png b/docs/img/flink_tez_vertex.png
deleted file mode 100644
index b469862..0000000
Binary files a/docs/img/flink_tez_vertex.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/gelly-example-graph.png
----------------------------------------------------------------------
diff --git a/docs/img/gelly-example-graph.png b/docs/img/gelly-example-graph.png
deleted file mode 100644
index abef960..0000000
Binary files a/docs/img/gelly-example-graph.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/gelly-filter.png
----------------------------------------------------------------------
diff --git a/docs/img/gelly-filter.png b/docs/img/gelly-filter.png
deleted file mode 100644
index cb09744..0000000
Binary files a/docs/img/gelly-filter.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/gelly-reduceOnEdges.png
----------------------------------------------------------------------
diff --git a/docs/img/gelly-reduceOnEdges.png b/docs/img/gelly-reduceOnEdges.png
deleted file mode 100644
index ffb674d..0000000
Binary files a/docs/img/gelly-reduceOnEdges.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/gelly-reduceOnNeighbors.png
----------------------------------------------------------------------
diff --git a/docs/img/gelly-reduceOnNeighbors.png b/docs/img/gelly-reduceOnNeighbors.png
deleted file mode 100644
index 63137b8..0000000
Binary files a/docs/img/gelly-reduceOnNeighbors.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/gelly-union.png
----------------------------------------------------------------------
diff --git a/docs/img/gelly-union.png b/docs/img/gelly-union.png
deleted file mode 100644
index b00f831..0000000
Binary files a/docs/img/gelly-union.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/iterations_delta_iterate_operator.png
----------------------------------------------------------------------
diff --git a/docs/img/iterations_delta_iterate_operator.png b/docs/img/iterations_delta_iterate_operator.png
deleted file mode 100644
index 470485a..0000000
Binary files a/docs/img/iterations_delta_iterate_operator.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/iterations_delta_iterate_operator_example.png
----------------------------------------------------------------------
diff --git a/docs/img/iterations_delta_iterate_operator_example.png b/docs/img/iterations_delta_iterate_operator_example.png
deleted file mode 100644
index 15f2b54..0000000
Binary files a/docs/img/iterations_delta_iterate_operator_example.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/iterations_iterate_operator.png
----------------------------------------------------------------------
diff --git a/docs/img/iterations_iterate_operator.png b/docs/img/iterations_iterate_operator.png
deleted file mode 100644
index aaf4158..0000000
Binary files a/docs/img/iterations_iterate_operator.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/iterations_iterate_operator_example.png
----------------------------------------------------------------------
diff --git a/docs/img/iterations_iterate_operator_example.png b/docs/img/iterations_iterate_operator_example.png
deleted file mode 100644
index be4841c..0000000
Binary files a/docs/img/iterations_iterate_operator_example.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/iterations_supersteps.png
----------------------------------------------------------------------
diff --git a/docs/img/iterations_supersteps.png b/docs/img/iterations_supersteps.png
deleted file mode 100644
index 331dbc7..0000000
Binary files a/docs/img/iterations_supersteps.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/japi_example_overview.png
----------------------------------------------------------------------
diff --git a/docs/img/japi_example_overview.png b/docs/img/japi_example_overview.png
deleted file mode 100644
index c035e3b..0000000
Binary files a/docs/img/japi_example_overview.png and /dev/null differ


[05/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/programming_guide.md
----------------------------------------------------------------------
diff --git a/docs/programming_guide.md b/docs/programming_guide.md
deleted file mode 100644
index 4d298ac..0000000
--- a/docs/programming_guide.md
+++ /dev/null
@@ -1,2942 +0,0 @@
----
-title: "Flink Programming Guide"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-
-<a href="#top"></a>
-
-Introduction
-------------
-
-Analysis programs in Flink are regular programs that implement transformations on data sets
-(e.g., filtering, mapping, joining, grouping). The data sets are initially created from certain
-sources (e.g., by reading files, or from collections). Results are returned via sinks, which may for
-example write the data to (distributed) files, or to standard output (for example the command line
-terminal). Flink programs run in a variety of contexts, standalone, or embedded in other programs.
-The execution can happen in a local JVM, or on clusters of many machines.
-
-In order to create your own Flink program, we encourage you to start with the
-[program skeleton](#program-skeleton) and gradually add your own
-[transformations](#transformations). The remaining sections act as references for additional
-operations and advanced features.
-
-
-Example Program
----------------
-
-The following program is a complete, working example of WordCount. You can copy &amp; paste the code
-to run it locally. You only have to include the correct Flink's library into your project
-(see Section [Linking with Flink](#linking-with-flink)) and specify the imports. Then you are ready
-to go!
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-{% highlight java %}
-public class WordCountExample {
-    public static void main(String[] args) throws Exception {
-        final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-        DataSet<String> text = env.fromElements(
-            "Who's there?",
-            "I think I hear them. Stand, ho! Who's there?");
-
-        DataSet<Tuple2<String, Integer>> wordCounts = text
-            .flatMap(new LineSplitter())
-            .groupBy(0)
-            .sum(1);
-
-        wordCounts.print();
-
-        env.execute("Word Count Example");
-    }
-
-    public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
-        @Override
-        public void flatMap(String line, Collector<Tuple2<String, Integer>> out) {
-            for (String word : line.split(" ")) {
-                out.collect(new Tuple2<String, Integer>(word, 1));
-            }
-        }
-    }
-}
-{% endhighlight %}
-
-</div>
-
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-import org.apache.flink.api.scala._
-
-object WordCount {
-  def main(args: Array[String]) {
-
-    val env = ExecutionEnvironment.getExecutionEnvironment
-    val text = env.fromElements(
-      "Who's there?",
-      "I think I hear them. Stand, ho! Who's there?")
-
-    val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
-      .map { (_, 1) }
-      .groupBy(0)
-      .sum(1)
-
-    counts.print()
-
-    env.execute("Scala WordCount Example")
-  }
-}
-{% endhighlight %}
-</div>
-
-</div>
-
-[Back to top](#top)
-
-
-Linking with Flink
-------------------
-
-To write programs with Flink, you need to include the Flink library corresponding to
-your programming language in your project.
-
-The simplest way to do this is to use one of the quickstart scripts: either for
-[Java](java_api_quickstart.html) or for [Scala](scala_api_quickstart.html). They
-create a blank project from a template (a Maven Archetype), which sets up everything for you. To
-manually create the project, you can use the archetype and create a project by calling:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight bash %}
-mvn archetype:generate /
-    -DarchetypeGroupId=org.apache.flink/
-    -DarchetypeArtifactId=flink-quickstart-java /
-    -DarchetypeVersion={{site.FLINK_VERSION_SHORT }}
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight bash %}
-mvn archetype:generate /
-    -DarchetypeGroupId=org.apache.flink/
-    -DarchetypeArtifactId=flink-quickstart-scala /
-    -DarchetypeVersion={{site.FLINK_VERSION_SHORT }}
-{% endhighlight %}
-</div>
-</div>
-
-If you want to add Flink to an existing Maven project, add the following entry to your
-*dependencies* section in the *pom.xml* file of your project:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight xml %}
-<dependency>
-  <groupId>org.apache.flink</groupId>
-  <artifactId>flink-java</artifactId>
-  <version>{{site.FLINK_VERSION_SHORT }}</version>
-</dependency>
-<dependency>
-  <groupId>org.apache.flink</groupId>
-  <artifactId>flink-clients</artifactId>
-  <version>{{site.FLINK_VERSION_SHORT }}</version>
-</dependency>
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight xml %}
-<dependency>
-  <groupId>org.apache.flink</groupId>
-  <artifactId>flink-scala</artifactId>
-  <version>{{site.FLINK_VERSION_SHORT }}</version>
-</dependency>
-<dependency>
-  <groupId>org.apache.flink</groupId>
-  <artifactId>flink-clients</artifactId>
-  <version>{{site.FLINK_VERSION_SHORT }}</version>
-</dependency>
-{% endhighlight %}
-
-**Important:** When working with the Scala API you must have one of these two imports:
-{% highlight scala %}
-import org.apache.flink.api.scala._
-{% endhighlight %}
-
-or
-
-{% highlight scala %}
-import org.apache.flink.api.scala.createTypeInformation
-{% endhighlight %}
-
-The reason is that Flink analyzes the types that are used in a program and generates serializers
-and comparaters for them. By having either of those imports you enable an implicit conversion
-that creates the type information for Flink operations.
-</div>
-</div>
-
-If you are using Flink together with Hadoop, the version of the dependency may vary depending on the
-version of Hadoop (or more specifically, HDFS) that you want to use Flink with. Please refer to the
-[downloads page]({{site.baseurl}}/downloads.html) for a list of available versions, and instructions
-on how to link with custom versions of Hadoop.
-
-In order to link against the latest SNAPSHOT versions of the code, please follow
-[this guide]({{site.baseurl}}/downloads.html#nightly).
-
-The *flink-clients* dependency is only necessary to invoke the Flink program locally (for example to
-run it standalone for testing and debugging).  If you intend to only export the program as a JAR
-file and [run it on a cluster](cluster_execution.html), you can skip that dependency.
-
-[Back to top](#top)
-
-Program Skeleton
-----------------
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-As we already saw in the example, Flink programs look like regular Java
-programs with a `main()` method. Each program consists of the same basic parts:
-
-1. Obtain an `ExecutionEnvironment`,
-2. Load/create the initial data,
-3. Specify transformations on this data,
-4. Specify where to put the results of your computations, and
-5. Execute your program.
-
-We will now give an overview of each of those steps but please refer to the respective sections for
-more details. Note that all
-{% gh_link /flink-java/src/main/java/org/apache/flink/api/java "core classes of the Java API" %}
-are found in the package `org.apache.flink.api.java`.
-
-The `ExecutionEnvironment` is the basis for all Flink programs. You can
-obtain one using these static methods on class `ExecutionEnvironment`:
-
-{% highlight java %}
-getExecutionEnvironment()
-
-createLocalEnvironment()
-createLocalEnvironment(int parallelism)
-
-createRemoteEnvironment(String host, int port, String... jarFiles)
-createRemoteEnvironment(String host, int port, int parallelism, String... jarFiles)
-{% endhighlight %}
-
-Typically, you only need to use `getExecutionEnvironment()`, since this
-will do the right thing depending on the context: if you are executing
-your program inside an IDE or as a regular Java program it will create
-a local environment that will execute your program on your local machine. If
-you created a JAR file from you program, and invoke it through the [command line](cli.html)
-or the [web interface](web_client.html),
-the Flink cluster manager will
-execute your main method and `getExecutionEnvironment()` will return
-an execution environment for executing your program on a cluster.
-
-For specifying data sources the execution environment has several methods
-to read from files using various methods: you can just read them line by line,
-as CSV files, or using completely custom data input formats. To just read
-a text file as a sequence of lines, you can use:
-
-{% highlight java %}
-final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-DataSet<String> text = env.readTextFile("file:///path/to/file");
-{% endhighlight %}
-
-This will give you a DataSet on which you can then apply transformations. For
-more information on data sources and input formats, please refer to
-[Data Sources](#data-sources).
-
-Once you have a DataSet you can apply transformations to create a new
-DataSet which you can then write to a file, transform again, or
-combine with other DataSets. You apply transformations by calling
-methods on DataSet with your own custom transformation function. For example,
-a map transformation looks like this:
-
-{% highlight java %}
-DataSet<String> input = ...;
-
-DataSet<Integer> tokenized = text.map(new MapFunction<String, Integer>() {
-    @Override
-    public Integer map(String value) {
-        return Integer.parseInt(value);
-    }
-});
-{% endhighlight %}
-
-This will create a new DataSet by converting every String in the original
-set to an Integer. For more information and a list of all the transformations,
-please refer to [Transformations](#transformations).
-
-Once you have a DataSet that needs to be written to disk you call one
-of these methods on DataSet:
-
-{% highlight java %}
-writeAsText(String path)
-writeAsCsv(String path)
-write(FileOutputFormat<T> outputFormat, String filePath)
-
-print()
-{% endhighlight %}
-
-The last method is only useful for developing/debugging on a local machine,
-it will output the contents of the DataSet to standard output. (Note that in
-a cluster, the result goes to the standard out stream of the cluster nodes and ends
-up in the *.out* files of the workers).
-The first two do as the name suggests, the third one can be used to specify a
-custom data output format. Please refer
-to [Data Sinks](#data-sinks) for more information on writing to files and also
-about custom data output formats.
-
-Once you specified the complete program you need to call `execute` on
-the `ExecutionEnvironment`. This will either execute on your local
-machine or submit your program for execution on a cluster, depending on
-how you created the execution environment.
-
-</div>
-<div data-lang="scala" markdown="1">
-
-As we already saw in the example, Flink programs look like regular Scala
-programs with a `main()` method. Each program consists of the same basic parts:
-
-1. Obtain an `ExecutionEnvironment`,
-2. Load/create the initial data,
-3. Specify transformations on this data,
-4. Specify where to put the results of your computations, and
-5. Execute your program.
-
-We will now give an overview of each of those steps but please refer to the respective sections for
-more details. Note that all core classes of the Scala API are found in the package 
-{% gh_link /flink-scala/src/main/scala/org/apache/flink/api/scala "org.apache.flink.api.scala" %}.
-
-
-The `ExecutionEnvironment` is the basis for all Flink programs. You can
-obtain one using these static methods on class `ExecutionEnvironment`:
-
-{% highlight scala %}
-def getExecutionEnvironment
-
-def createLocalEnvironment(parallelism: Int = Runtime.getRuntime.availableProcessors()))
-
-def createRemoteEnvironment(host: String, port: String, jarFiles: String*)
-def createRemoteEnvironment(host: String, port: String, parallelism: Int, jarFiles: String*)
-{% endhighlight %}
-
-Typically, you only need to use `getExecutionEnvironment()`, since this
-will do the right thing depending on the context: if you are executing
-your program inside an IDE or as a regular Scala program it will create
-a local environment that will execute your program on your local machine. If
-you created a JAR file from you program, and invoke it through the [command line](cli.html)
-or the [web interface](web_client.html),
-the Flink cluster manager will
-execute your main method and `getExecutionEnvironment()` will return
-an execution environment for executing your program on a cluster.
-
-For specifying data sources the execution environment has several methods
-to read from files using various methods: you can just read them line by line,
-as CSV files, or using completely custom data input formats. To just read
-a text file as a sequence of lines, you can use:
-
-{% highlight scala %}
-val env = ExecutionEnvironment.getExecutionEnvironment()
-
-val text = env.readTextFile("file:///path/to/file")
-{% endhighlight %}
-
-This will give you a DataSet on which you can then apply transformations. For
-more information on data sources and input formats, please refer to
-[Data Sources](#data-sources).
-
-Once you have a DataSet you can apply transformations to create a new
-DataSet which you can then write to a file, transform again, or
-combine with other DataSets. You apply transformations by calling
-methods on DataSet with your own custom transformation function. For example,
-a map transformation looks like this:
-
-{% highlight scala %}
-val input: DataSet[String] = ...
-
-val mapped = text.map { x => x.toInt }
-{% endhighlight %}
-
-This will create a new DataSet by converting every String in the original
-set to an Integer. For more information and a list of all the transformations,
-please refer to [Transformations](#transformations).
-
-Once you have a DataSet that needs to be written to disk you can call one
-of these methods on DataSet:
-
-{% highlight scala %}
-def writeAsText(path: String, writeMode: WriteMode = WriteMode.NO_OVERWRITE)
-def writeAsCsv(
-    filePath: String,
-    rowDelimiter: String = "\n",
-    fieldDelimiter: String = ',',
-    writeMode: WriteMode = WriteMode.NO_OVERWRITE)
-def write(outputFormat: FileOutputFormat[T],
-    path: String,
-    writeMode: WriteMode = WriteMode.NO_OVERWRITE)
-
-def print()
-{% endhighlight %}
-
-The last method is only useful for developing/debugging on a local machine,
-it will output the contents of the DataSet to standard output. (Note that in
-a cluster, the result goes to the standard out stream of the cluster nodes and ends
-up in the *.out* files of the workers).
-The first two do as the name suggests, the third one can be used to specify a
-custom data output format. Please refer
-to [Data Sinks](#data-sinks) for more information on writing to files and also
-about custom data output formats.
-
-Once you specified the complete program you need to call `execute` on
-the `ExecutionEnvironment`. This will either execute on your local
-machine or submit your program for execution on a cluster, depending on
-how you created the execution environment.
-
-</div>
-</div>
-
-
-[Back to top](#top)
-
-
-Lazy Evaluation
----------------
-
-All Flink programs are executed lazily: When the program's main method is executed, the data loading
-and transformations do not happen directly. Rather, each operation is created and added to the
-program's plan. The operations are actually executed when one of the `execute()` methods is invoked
-on the ExecutionEnvironment object. Whether the program is executed locally or on a cluster depends
-on the environment of the program.
-
-The lazy evaluation lets you construct sophisticated programs that Flink executes as one
-holistically planned unit.
-
-[Back to top](#top)
-
-
-Transformations
----------------
-
-Data transformations transform one or more DataSets into a new DataSet. Programs can combine
-multiple transformations into sophisticated assemblies.
-
-This section gives a brief overview of the available transformations. The [transformations
-documentation](dataset_transformations.html) has a full description of all transformations with
-examples.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-<br />
-
-<table class="table table-bordered">
-  <thead>
-    <tr>
-      <th class="text-left" style="width: 20%">Transformation</th>
-      <th class="text-center">Description</th>
-    </tr>
-  </thead>
-
-  <tbody>
-    <tr>
-      <td><strong>Map</strong></td>
-      <td>
-        <p>Takes one element and produces one element.</p>
-{% highlight java %}
-data.map(new MapFunction<String, Integer>() {
-  public Integer map(String value) { return Integer.parseInt(value); }
-});
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>FlatMap</strong></td>
-      <td>
-        <p>Takes one element and produces zero, one, or more elements. </p>
-{% highlight java %}
-data.flatMap(new FlatMapFunction<String, String>() {
-  public void flatMap(String value, Collector<String> out) {
-    for (String s : value.split(" ")) {
-      out.collect(s);
-    }
-  }
-});
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>MapPartition</strong></td>
-      <td>
-        <p>Transforms a parallel partition in a single function call. The function get the partition
-        as an `Iterable` stream and can produce an arbitrary number of result values. The number of
-        elements in each partition depends on the degree-of-parallelism and previous operations.</p>
-{% highlight java %}
-data.mapPartition(new MapPartitionFunction<String, Long>() {
-  public void mapPartition(Iterable<String> values, Collector<Long> out) {
-    long c = 0;
-    for (String s : values) {
-      c++;
-    }
-    out.collect(c);
-  }
-});
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Filter</strong></td>
-      <td>
-        <p>Evaluates a boolean function for each element and retains those for which the function
-        returns true.<br/>
-        
-        <strong>IMPORTANT:</strong> The system assumes that the function does not modify the elements on which the predicate is applied. Violating this assumption
-        can lead to incorrect results.
-        </p>
-{% highlight java %}
-data.filter(new FilterFunction<Integer>() {
-  public boolean filter(Integer value) { return value > 1000; }
-});
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Reduce</strong></td>
-      <td>
-        <p>Combines a group of elements into a single element by repeatedly combining two elements
-        into one. Reduce may be applied on a full data set, or on a grouped data set.</p>
-{% highlight java %}
-data.reduce(new ReduceFunction<Integer> {
-  public Integer reduce(Integer a, Integer b) { return a + b; }
-});
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>ReduceGroup</strong></td>
-      <td>
-        <p>Combines a group of elements into one or more elements. ReduceGroup may be applied on a
-        full data set, or on a grouped data set.</p>
-{% highlight java %}
-data.reduceGroup(new GroupReduceFunction<Integer, Integer> {
-  public void reduce(Iterable<Integer> values, Collector<Integer> out) {
-    int prefixSum = 0;
-    for (Integer i : values) {
-      prefixSum += i;
-      out.collect(prefixSum);
-    }
-  }
-});
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Aggregate</strong></td>
-      <td>
-        <p>Aggregates a group of values into a single value. Aggregation functions can be thought of
-        as built-in reduce functions. Aggregate may be applied on a full data set, or on a grouped
-        data set.</p>
-{% highlight java %}
-Dataset<Tuple3<Integer, String, Double>> input = // [...]
-DataSet<Tuple3<Integer, String, Double>> output = input.aggregate(SUM, 0).and(MIN, 2);
-{% endhighlight %}
-	<p>You can also use short-hand syntax for minimum, maximum, and sum aggregations.</p>
-	{% highlight java %}
-	Dataset<Tuple3<Integer, String, Double>> input = // [...]
-DataSet<Tuple3<Integer, String, Double>> output = input.sum(0).andMin(2);
-	{% endhighlight %}
-      </td>
-    </tr>
-
-    </tr>
-      <td><strong>Join</strong></td>
-      <td>
-        Joins two data sets by creating all pairs of elements that are equal on their keys.
-        Optionally uses a JoinFunction to turn the pair of elements into a single element, or a
-        FlatJoinFunction to turn the pair of elements into arbitararily many (including none)
-        elements. See <a href="#specifying-keys">keys</a> on how to define join keys.
-{% highlight java %}
-result = input1.join(input2)
-               .where(0)       // key of the first input (tuple field 0)
-               .equalTo(1);    // key of the second input (tuple field 1)
-{% endhighlight %}
-        You can specify the way that the runtime executes the join via <i>Join Hints</i>. The hints
-        describe whether the join happens through partitioning or broadcasting, and whether it uses
-        a sort-based or a hash-based algorithm. Please refer to the 
-        <a href="dataset_transformations.html#join-algorithm-hints">Transformations Guide</a> for
-        a list of possible hints and an example.</br>
-        If no hint is specified, the system will try to make an estimate of the input sizes and
-        pick a the best strategy according to those estimates. 
-{% highlight java %}
-// This executes a join by broadcasting the first data set
-// using a hash table for the broadcasted data
-result = input1.join(input2, JoinHint.BROADCAST_HASH_FIRST)
-               .where(0).equalTo(1);
-{% endhighlight %}
-
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>CoGroup</strong></td>
-      <td>
-        <p>The two-dimensional variant of the reduce operation. Groups each input on one or more
-        fields and then joins the groups. The transformation function is called per pair of groups.
-        See <a href="#specifying-keys">keys</a> on how to define coGroup keys.</p>
-{% highlight java %}
-data1.coGroup(data2)
-     .where(0)
-     .equalTo(1)
-     .with(new CoGroupFunction<String, String, String>() {
-         public void coGroup(Iterable<String> in1, Iterable<String> in2, Collector<String> out) {
-           out.collect(...);
-         }
-      });
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Cross</strong></td>
-      <td>
-        <p>Builds the Cartesian product (cross product) of two inputs, creating all pairs of
-        elements. Optionally uses a CrossFunction to turn the pair of elements into a single
-        element</p>
-{% highlight java %}
-DataSet<Integer> data1 = // [...]
-DataSet<String> data2 = // [...]
-DataSet<Tuple2<Integer, String>> result = data1.cross(data2);
-{% endhighlight %}
-      </td>
-    </tr>
-    <tr>
-      <td><strong>Union</strong></td>
-      <td>
-        <p>Produces the union of two data sets. This operation happens implicitly if more than one
-        data set is used for a specific function input.</p>
-{% highlight java %}
-DataSet<String> data1 = // [...]
-DataSet<String> data2 = // [...]
-DataSet<String> result = data1.union(data2);
-{% endhighlight %}
-      </td>
-    </tr>
-    <tr>
-      <td><strong>Rebalance</strong></td>
-      <td>
-        <p>Evenly rebalances the parallel partitions of a data set to eliminate data skew. Only Map-like transformations may follow a rebalance transformation. (Java API Only)</p>
-{% highlight java %}
-DataSet<String> in = // [...]
-DataSet<String> result = in.rebalance()
-                           .map(new Mapper());
-{% endhighlight %}
-      </td>
-    </tr>
-    <tr>
-      <td><strong>Hash-Partition</strong></td>
-      <td>
-        <p>Hash-partitions a data set on a given key. Keys can be specified as key-selector functions or field position keys.</p>
-{% highlight java %}
-DataSet<Tuple2<String,Integer>> in = // [...]
-DataSet<Integer> result = in.partitionByHash(0)
-                            .mapPartition(new PartitionMapper());
-{% endhighlight %}
-      </td>
-    </tr>
-    <tr>
-      <td><strong>Sort Partition</strong></td>
-      <td>
-        <p>Locally sorts all partitions of a data set on a specified field in a specified order. 
-          Fields can be specified as tuple positions or field expressions. 
-          Sorting on multiple fields is done by chaining sortPartition() calls.</p>
-{% highlight java %}
-DataSet<Tuple2<String,Integer>> in = // [...]
-DataSet<Integer> result = in.sortPartition(1, Order.ASCENDING)
-                            .mapPartition(new PartitionMapper());
-{% endhighlight %}
-      </td>
-    </tr>
-    <tr>
-      <td><strong>First-n</strong></td>
-      <td>
-        <p>Returns the first n (arbitrary) elements of a data set. First-n can be applied on a regular data set, a grouped data set, or a grouped-sorted data set. Grouping keys can be specified as key-selector functions or field position keys.</p>
-{% highlight java %}
-DataSet<Tuple2<String,Integer>> in = // [...]
-// regular data set
-DataSet<Tuple2<String,Integer>> result1 = in.first(3);
-// grouped data set
-DataSet<Tuple2<String,Integer>> result2 = in.groupBy(0)
-                                            .first(3);
-// grouped-sorted data set
-DataSet<Tuple2<String,Integer>> result3 = in.groupBy(0)
-                                            .sortGroup(1, Order.ASCENDING)
-                                            .first(3);
-{% endhighlight %}
-      </td>
-    </tr>
-  </tbody>
-</table>
-
-----------
-
-The following transformations are available on data sets of Tuples:
-
-<table class="table table-bordered">
-  <thead>
-    <tr>
-      <th class="text-left" style="width: 20%">Transformation</th>
-      <th class="text-center">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-   <tr>
-      <td><strong>Project</strong></td>
-      <td>
-        <p>Selects a subset of fields from the tuples</p>
-{% highlight java %}
-DataSet<Tuple3<Integer, Double, String>> in = // [...]
-DataSet<Tuple2<String, Integer>> out = in.project(2,0);
-{% endhighlight %}
-      </td>
-    </tr>
-  </tbody>
-</table>
-
-</div>
-<div data-lang="scala" markdown="1">
-<br />
-
-<table class="table table-bordered">
-  <thead>
-    <tr>
-      <th class="text-left" style="width: 20%">Transformation</th>
-      <th class="text-center">Description</th>
-    </tr>
-  </thead>
-
-  <tbody>
-    <tr>
-      <td><strong>Map</strong></td>
-      <td>
-        <p>Takes one element and produces one element.</p>
-{% highlight scala %}
-data.map { x => x.toInt }
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>FlatMap</strong></td>
-      <td>
-        <p>Takes one element and produces zero, one, or more elements. </p>
-{% highlight scala %}
-data.flatMap { str => str.split(" ") }
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>MapPartition</strong></td>
-      <td>
-        <p>Transforms a parallel partition in a single function call. The function get the partition
-        as an `Iterator` and can produce an arbitrary number of result values. The number of
-        elements in each partition depends on the degree-of-parallelism and previous operations.</p>
-{% highlight scala %}
-data.mapPartition { in => in map { (_, 1) } }
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Filter</strong></td>
-      <td>
-        <p>Evaluates a boolean function for each element and retains those for which the function
-        returns true.<br/>
-        <strong>IMPORTANT:</strong> The system assumes that the function does not modify the element on which the predicate is applied.
-        Violating this assumption can lead to incorrect results.</p>
-{% highlight scala %}
-data.filter { _ > 1000 }
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Reduce</strong></td>
-      <td>
-        <p>Combines a group of elements into a single element by repeatedly combining two elements
-        into one. Reduce may be applied on a full data set, or on a grouped data set.</p>
-{% highlight scala %}
-data.reduce { _ + _ }
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>ReduceGroup</strong></td>
-      <td>
-        <p>Combines a group of elements into one or more elements. ReduceGroup may be applied on a
-        full data set, or on a grouped data set.</p>
-{% highlight scala %}
-data.reduceGroup { elements => elements.sum }
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Aggregate</strong></td>
-      <td>
-        <p>Aggregates a group of values into a single value. Aggregation functions can be thought of
-        as built-in reduce functions. Aggregate may be applied on a full data set, or on a grouped
-        data set.</p>
-{% highlight scala %}
-val input: DataSet[(Int, String, Double)] = // [...]
-val output: DataSet[(Int, String, Doublr)] = input.aggregate(SUM, 0).aggregate(MIN, 2);
-{% endhighlight %}
-  <p>You can also use short-hand syntax for minimum, maximum, and sum aggregations.</p>
-{% highlight scala %}
-val input: DataSet[(Int, String, Double)] = // [...]
-val output: DataSet[(Int, String, Doublr)] = input.sum(0).min(2)
-{% endhighlight %}
-      </td>
-    </tr>
-
-    </tr>
-      <td><strong>Join</strong></td>
-      <td>
-        Joins two data sets by creating all pairs of elements that are equal on their keys.
-        Optionally uses a JoinFunction to turn the pair of elements into a single element, or a
-        FlatJoinFunction to turn the pair of elements into arbitararily many (including none)
-        elements. See <a href="#specifying-keys">keys</a> on how to define join keys.
-{% highlight scala %}
-// In this case tuple fields are used as keys. "0" is the join field on the first tuple
-// "1" is the join field on the second tuple.
-val result = input1.join(input2).where(0).equalTo(1)
-{% endhighlight %}
-        You can specify the way that the runtime executes the join via <i>Join Hints</i>. The hints
-        describe whether the join happens through partitioning or broadcasting, and whether it uses
-        a sort-based or a hash-based algorithm. Please refer to the 
-        <a href="dataset_transformations.html#join-algorithm-hints">Transformations Guide</a> for
-        a list of possible hints and an example.</br>
-        If no hint is specified, the system will try to make an estimate of the input sizes and
-        pick a the best strategy according to those estimates.
-{% highlight scala %}
-// This executes a join by broadcasting the first data set
-// using a hash table for the broadcasted data
-val result = input1.join(input2, JoinHint.BROADCAST_HASH_FIRST)
-                   .where(0).equalTo(1)
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>CoGroup</strong></td>
-      <td>
-        <p>The two-dimensional variant of the reduce operation. Groups each input on one or more
-        fields and then joins the groups. The transformation function is called per pair of groups.
-        See <a href="#specifying-keys">keys</a> on how to define coGroup keys.</p>
-{% highlight scala %}
-data1.coGroup(data2).where(0).equalTo(1)
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Cross</strong></td>
-      <td>
-        <p>Builds the Cartesian product (cross product) of two inputs, creating all pairs of
-        elements. Optionally uses a CrossFunction to turn the pair of elements into a single
-        element</p>
-{% highlight scala %}
-val data1: DataSet[Int] = // [...]
-val data2: DataSet[String] = // [...]
-val result: DataSet[(Int, String)] = data1.cross(data2)
-{% endhighlight %}
-      </td>
-    </tr>
-    <tr>
-      <td><strong>Union</strong></td>
-      <td>
-        <p>Produces the union of two data sets.</p>
-{% highlight scala %}
-data.union(data2)
-{% endhighlight %}
-      </td>
-    </tr>
-    <tr>
-      <td><strong>Hash-Partition</strong></td>
-      <td>
-        <p>Hash-partitions a data set on a given key. Keys can be specified as key-selector functions, tuple positions
-        or case class fields.</p>
-{% highlight scala %}
-val in: DataSet[(Int, String)] = // [...]
-val result = in.partitionByHash(0).mapPartition { ... }
-{% endhighlight %}
-      </td>
-    </tr>
-    </tr>
-    <tr>
-      <td><strong>Sort Partition</strong></td>
-      <td>
-        <p>Locally sorts all partitions of a data set on a specified field in a specified order. 
-          Fields can be specified as tuple positions or field expressions. 
-          Sorting on multiple fields is done by chaining sortPartition() calls.</p>
-{% highlight scala %}
-val in: DataSet[(Int, String)] = // [...]
-val result = in.sortPartition(1, Order.ASCENDING).mapPartition { ... }
-{% endhighlight %}
-      </td>
-    </tr>
-    <tr>
-      <td><strong>First-n</strong></td>
-      <td>
-        <p>Returns the first n (arbitrary) elements of a data set. First-n can be applied on a regular data set, a grouped data set, or a grouped-sorted data set. Grouping keys can be specified as key-selector functions,
-        tuple positions or case class fields.</p>
-{% highlight scala %}
-val in: DataSet[(Int, String)] = // [...]
-// regular data set
-val result1 = in.first(3)
-// grouped data set
-val result2 = in.groupBy(0).first(3)
-// grouped-sorted data set
-val result3 = in.groupBy(0).sortGroup(1, Order.ASCENDING).first(3)
-{% endhighlight %}
-      </td>
-    </tr>
-  </tbody>
-</table>
-
-</div>
-</div>
-
-The [parallelism](#parallel-execution) of a transformation can be defined by `setParallelism(int)` while
-`name(String)` assigns a custom name to a transformation which is helpful for debugging. The same is
-possible for [Data Sources](#data-sources) and [Data Sinks](#data-sinks).
-
-[Back to Top](#top)
-
-
-Specifying Keys
--------------
-
-
-
-Some transformations (join, coGroup) require that a key is defined on
-its argument DataSets, and other transformations (Reduce, GroupReduce,
-Aggregate) allow that the DataSet is grouped on a key before they are
-applied.
-
-A DataSet is grouped as
-{% highlight java %}
-DataSet<...> input = // [...]
-DataSet<...> reduced = input
-	.groupBy(/*define key here*/)
-	.reduceGroup(/*do something*/);
-{% endhighlight %}
-
-The data model of Flink is not based on key-value pairs. Therefore,
-you do not need to physically pack the data set types into keys and
-values. Keys are "virtual": they are defined as functions over the
-actual data to guide the grouping operator.
-
-### Define keys for Tuples
-{:.no_toc}
-
-The simplest case is grouping a data set of Tuples on one or more
-fields of the Tuple:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-DataSet<Tuple3<Integer,String,Long>> input = // [...]
-DataSet<Tuple3<Integer,String,Long> grouped = input
-	.groupBy(0)
-	.reduceGroup(/*do something*/);
-{% endhighlight %}
-
-The data set is grouped on the first field of the tuples (the one of
-Integer type). The GroupReduce function will thus receive groups of tuples with
-the same value in the first field.
-
-{% highlight java %}
-DataSet<Tuple3<Integer,String,Long>> input = // [...]
-DataSet<Tuple3<Integer,String,Long> grouped = input
-	.groupBy(0,1)
-	.reduce(/*do something*/);
-{% endhighlight %}
-
-The data set is grouped on the composite key consisting of the first and the
-second field. Therefore, the GroupReduce function will receive groups
-with the same value for both fields.
-
-A note on nested Tuples: If you have a DataSet with a nested tuple, such as:
-
-{% highlight java %}
-DataSet<Tuple3<Tuple2<Integer, Float>,String,Long>> ds;
-{% endhighlight %}
-
-Specifying `groupBy(0)` will cause the system to use the full `Tuple2` as a key (with the Integer and Float being the key). If you want to "navigate" into the nested `Tuple2`, you have to use field expression keys which are explained below.
-
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-val input: DataSet[(Int, String, Long)] = // [...]
-val grouped = input
-  .groupBy(0)
-  .reduceGroup(/*do something*/)
-{% endhighlight %}
-
-The data set is grouped on the first field of the tuples (the one of
-Integer type). The GroupReduce function will thus receive groups of tuples with
-the same value in the first field.
-
-{% highlight scala %}
-val input: DataSet[(Int, String, Long)] = // [...]
-val grouped = input
-  .groupBy(0,1)
-  .reduce(/*do something*/)
-{% endhighlight %}
-
-The data set is grouped on the composite key consisting of the first and the
-second field. Therefore, the GroupReduce function will receive groups
-with the same value for both fields.
-
-A note on nested Tuples: If you have a DataSet with a nested tuple, such as:
-
-{% highlight scala %}
-val ds: DataSet[((Int, Float), String, Long)]
-{% endhighlight %}
-
-Specifying `groupBy(0)` will cause the system to use the full `Tuple2` as a key (with the Int and
-Float being the key). If you want to "navigate" into the nested `Tuple2`, you have to use field expression keys which are explained below.
-
-</div>
-</div>
-
-### Define keys using Field Expressions
-{:.no_toc}
-
-Starting from release 0.7-incubating, you can use String-based field expressions to reference nested fields and define keys for grouping, sorting, joining, or coGrouping. In addition, field expressions can be used to define [semantic function annotations](#semantic-annotations).
-
-Field expressions make it very easy to select fields in (nested) composite types such as [Tuple](#tuples-and-case-classes) and [POJO](#pojos) types.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-In the example below, we have a `WC` POJO with two fields "word" and "count". To group by the field `word`, we just pass its name to the `groupBy()` function.
-{% highlight java %}
-// some ordinary POJO (Plain old Java Object)
-public class WC {
-  public String word; 
-  public int count;
-}
-DataSet<WC> words = // [...]
-DataSet<WC> wordCounts = words.groupBy("word").reduce(/*do something*/);
-{% endhighlight %}
-
-**Field Expression Syntax**:
-
-- Select POJO fields by their field name. For example `"user"` refers to the "user" field of a POJO type.
-
-- Select Tuple fields by their field name or 0-offset field index. For example `"f0"` and `"5"` refer to the first and sixth field of a Java Tuple type, respectively.
-
-- You can select nested fields in POJOs and Tuples. For example `"user.zip"` refers to the "zip" field of a POJO which is stored in the "user" field of a POJO type. Arbitrary nesting and mixing of POJOs and Tuples is supported such as `"f1.user.zip"` or `"user.f3.1.zip"`.
-
-- You can select the full type using the `"*"` wildcard expressions. This does also work for types which are not Tuple or POJO types.
-
-**Field Expression Example**:
-
-{% highlight java %}
-public static class WC {
-  public ComplexNestedClass complex; //nested POJO
-  private int count;
-  // getter / setter for private field (count)
-  public int getCount() {
-    return count;
-  }
-  public void setCount(int c) {
-    this.count = c;
-  }
-}
-public static class ComplexNestedClass {
-  public Integer someNumber;
-  public float someFloat;
-  public Tuple3<Long, Long, String> word;
-  public IntWritable hadoopCitizen;
-}
-{% endhighlight %}
-
-These are valid field expressions for the example code above:
-
-- `"count"`: The count field in the `WC` class.
-
-- `"complex"`: Recursively selects all fields of the field complex of POJO type `ComplexNestedClass`.
-
-- `"complex.word.f2"`: Selects the last field of the nested `Tuple3`.
-
-- `"complex.hadoopCitizen"`: Selects the Hadoop `IntWritable` type.
-
-</div>
-<div data-lang="scala" markdown="1">
-
-In the example below, we have a `WC` POJO with two fields "word" and "count". To group by the field `word`, we just pass its name to the `groupBy()` function.
-{% highlight java %}
-// some ordinary POJO (Plain old Java Object)
-class WC(var word: String, var count: Int) {
-  def this() { this("", 0L) }
-}
-val words: DataSet[WC] = // [...]
-val wordCounts = words.groupBy("word").reduce(/*do something*/)
-
-// or, as a case class, which is less typing
-case class WC(word: String, count: Int)
-val words: DataSet[WC] = // [...]
-val wordCounts = words.groupBy("word").reduce(/*do something*/)
-{% endhighlight %}
-
-**Field Expression Syntax**:
-
-- Select POJO fields by their field name. For example `"user"` refers to the "user" field of a POJO type.
-
-- Select Tuple fields by their 1-offset field name or 0-offset field index. For example `"_1"` and `"5"` refer to the first and sixth field of a Scala Tuple type, respectively.
-
-- You can select nested fields in POJOs and Tuples. For example `"user.zip"` refers to the "zip" field of a POJO which is stored in the "user" field of a POJO type. Arbitrary nesting and mixing of POJOs and Tuples is supported such as `"_2.user.zip"` or `"user._4.1.zip"`.
-
-- You can select the full type using the `"_"` wildcard expressions. This does also work for types which are not Tuple or POJO types.
-
-**Field Expression Example**:
-
-{% highlight scala %}
-class WC(var complex: ComplexNestedClass, var count: Int) {
-  def this() { this(null, 0) }
-}
-
-class ComplexNestedClass(
-    var someNumber: Int,
-    someFloat: Float,
-    word: (Long, Long, String),
-    hadoopCitizen: IntWritable) {
-  def this() { this(0, 0, (0, 0, ""), new IntWritable(0)) }
-}
-{% endhighlight %}
-
-These are valid field expressions for the example code above:
-
-- `"count"`: The count field in the `WC` class.
-
-- `"complex"`: Recursively selects all fields of the field complex of POJO type `ComplexNestedClass`.
-
-- `"complex.word._3"`: Selects the last field of the nested `Tuple3`.
-
-- `"complex.hadoopCitizen"`: Selects the Hadoop `IntWritable` type.
-
-</div>
-</div>
-
-### Define keys using Key Selector Functions
-{:.no_toc}
-
-An additional way to define keys are "key selector" functions. A key selector function 
-takes a single dataset element as input and returns the key for the element. The key can be of any type and be derived from arbitrary computations. 
-
-The following example shows a key selector function that simply returns the field of an object:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-// some ordinary POJO
-public class WC {public String word; public int count;}
-DataSet<WC> words = // [...]
-DataSet<WC> wordCounts = words
-                         .groupBy(
-                           new KeySelector<WC, String>() {
-                             public String getKey(WC wc) { return wc.word; }
-                           })
-                         .reduce(/*do something*/);
-{% endhighlight %}
-
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-// some ordinary case class
-case class WC(word: String, count: Int)
-val words: DataSet[WC] = // [...]
-val wordCounts = words
-  .groupBy( _.word ).reduce(/*do something*/)
-{% endhighlight %}
-</div>
-</div>
-
-
-[Back to top](#top)
-
-
-Passing Functions to Flink
---------------------------
-
-Operations require user-defined functions. This section lists several ways for doing this.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-#### Implementing an interface
-
-The most basic way is to implement one of the provided interfaces:
-
-{% highlight java %}
-class MyMapFunction implements MapFunction<String, Integer> {
-  public Integer map(String value) { return Integer.parseInt(value); }
-});
-data.map (new MyMapFunction());
-{% endhighlight %}
-
-#### Anonymous classes
-
-You can pass a function as an anonmymous class:
-{% highlight java %}
-data.map(new MapFunction<String, Integer> () {
-  public Integer map(String value) { return Integer.parseInt(value); }
-});
-{% endhighlight %}
-
-#### Java 8 Lambdas
-
-Flink also supports Java 8 Lambdas in the Java API. Please see the full [Java 8 Guide](java8_programming_guide.html).
-
-{% highlight java %}
-DataSet<String> data = // [...]
-data.filter(s -> s.startsWith("http://"));
-{% endhighlight %}
-
-{% highlight java %}
-DataSet<Integer> data = // [...]
-data.reduce((i1,i2) -> i1 + i2);
-{% endhighlight %}
-
-#### Rich functions
-
-All transformations that take as argument a user-defined function can
-instead take as argument a *rich* function. For example, instead of
-
-{% highlight java %}
-class MyMapFunction implements MapFunction<String, Integer> {
-  public Integer map(String value) { return Integer.parseInt(value); }
-});
-{% endhighlight %}
-
-you can write
-
-{% highlight java %}
-class MyMapFunction extends RichMapFunction<String, Integer> {
-  public Integer map(String value) { return Integer.parseInt(value); }
-});
-{% endhighlight %}
-
-and pass the function as usual to a `map` transformation:
-
-{% highlight java %}
-data.map(new MyMapFunction());
-{% endhighlight %}
-
-Rich functions can also be defined as an anonymous class:
-{% highlight java %}
-data.map (new RichMapFunction<String, Integer>() {
-  public Integer map(String value) { return Integer.parseInt(value); }
-});
-{% endhighlight %}
-
-</div>
-<div data-lang="scala" markdown="1">
-
-
-#### Lambda Functions
-
-As already seen in previous examples all operations accept lambda functions for describing
-the operation:
-{% highlight scala %}
-val data: DataSet[String] = // [...]
-data.filter { _.startsWith("http://") }
-{% endhighlight %}
-
-{% highlight scala %}
-val data: DataSet[Int] = // [...]
-data.reduce { (i1,i2) => i1 + i2 }
-// or
-data.reduce { _ + _ }
-{% endhighlight %}
-
-#### Rich functions
-
-All transformations that take as argument a lambda function can
-instead take as argument a *rich* function. For example, instead of
-
-{% highlight scala %}
-data.map { x => x.toInt }
-{% endhighlight %}
-
-you can write
-
-{% highlight scala %}
-class MyMapFunction extends RichMapFunction[String, Int] {
-  def map(in: String):Int = { in.toInt }
-})
-{% endhighlight %}
-
-and pass the function to a `map` transformation:
-
-{% highlight scala %}
-data.map(new MyMapFunction())
-{% endhighlight %}
-
-Rich functions can also be defined as an anonymous class:
-{% highlight scala %}
-data.map (new RichMapFunction[String, Int] {
-  def map(in: String):Int = { in.toInt }
-})
-{% endhighlight %}
-</div>
-
-</div>
-
-Rich functions provide, in addition to the user-defined function (map,
-reduce, etc), four methods: `open`, `close`, `getRuntimeContext`, and
-`setRuntimeContext`. These are useful for creating and finalizing
-local state, accessing broadcast variables (see
-[Broadcast Variables](#broadcast-variables), and for accessing runtime
-information such as accumulators and counters (see
-[Accumulators and Counters](#accumulators--counters), and information
-on iterations (see [Iterations](iterations.html)).
-
-In particular for the `reduceGroup` transformation, using a rich
-function is the only way to define an optional `combine` function. See
-the
-[transformations documentation](dataset_transformations.html)
-for a complete example.
-
-[Back to top](#top)
-
-
-Data Types
-----------
-
-Flink places some restrictions on the type of elements that are used in DataSets and as results
-of transformations. The reason for this is that the system analyzes the types to determine
-efficient execution strategies.
-
-There are six different categories of data types:
-
-1. **Java Tuples** and **Scala Case Classes**
-2. **Java POJOs**
-3. **Primitive Types**
-4. **Regular Classes**
-5. **Values**
-6. **Hadoop Writables**
-
-#### Tuples and Case Classes
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-Tuples are composite types that contain a fixed number of fields with various types. 
-The Java API provides classes from `Tuple1` up to `Tuple25`. Every field of a tuple
-can be an arbitrary Flink type including further tuples, resulting in nested tuples. Fields of a
-tuple can be accessed directly using the field's name as `tuple.f4`, or using the generic getter method
-`tuple.getField(int position)`. The field indicies start at 0. Note that this stands in contrast
-to the Scala tuples, but it is more consistent with Java's general indexing.
-
-{% highlight java %}
-DataSet<Tuple2<String, Integer>> wordCounts = env.fromElements(
-    new Tuple2<String, Integer>("hello", 1),
-    new Tuple2<String, Integer>("world", 2));
-
-wordCounts.map(new MapFunction<Tuple2<String, Integer>, Integer>() {
-    @Override
-    public String map(Tuple2<String, Integer> value) throws Exception {
-        return value.f1;
-    }
-});
-{% endhighlight %}
-
-When grouping, sorting, or joining a data set of tuples, keys can be specified as field positions or field expressions. See the [key definition section](#specifying-keys) or [data transformation section](#transformations) for details.
-
-{% highlight java %}
-wordCounts
-    .groupBy(0) // also valid .groupBy("f0")
-    .reduce(new MyReduceFunction());
-{% endhighlight %}
-
-</div>
-<div data-lang="scala" markdown="1">
-
-Scala case classes (and Scala tuples which are a special case of case classes), are composite types that contain a fixed number of fields with various types. Tuple fields are addressed by their 1-offset names such as `_1` for the first field. Case class fields are accessed by their name.
-
-{% highlight scala %}
-case class WordCount(word: String, count: Int)
-val input = env.fromElements(
-    WordCount("hello", 1),
-    WordCount("world", 2)) // Case Class Data Set
-
-input.groupBy("word").reduce(...) // group by field expression "word"
-
-val input2 = env.fromElements(("hello", 1), ("world", 2)) // Tuple2 Data Set
-
-input2.groupBy(0, 1).reduce(...) // group by field positions 0 and 1
-{% endhighlight %}
-
-When grouping, sorting, or joining a data set of tuples, keys can be specified as field positions or field expressions. See the [key definition section](#specifying-keys) or [data transformation section](#transformations) for details.
-
-</div>
-</div>
-
-#### POJOs
-
-Java and Scala classes are treated by Flink as a special POJO data type if they fulfill the following requirements:
-
-- The class must be public.
-
-- It must have a public constructor without arguments (default constructor).
-
-- All fields are either public or must be accessible through getter and setter functions. For a field called `foo` the getter and setter methods must be named `getFoo()` and `setFoo()`.
-
-- The type of a field must be supported by Flink. At the moment, Flink uses [Avro](http://avro.apache.org) to serialize arbitrary objects (such as `Date`).
-
-Flink analyzes the structure of POJO types, i.e., it learns about the fields of a POJO. As a result POJO types are easier to use than general types. Moreover, they Flink can process POJOs more efficiently than general types.  
-
-The following example shows a simple POJO with two public fields.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-public class WordWithCount {
-
-    public String word;
-    public int count;
-
-    public WordCount() {}
-
-    public WordCount(String word, int count) {
-        this.word = word;
-        this.count = count;
-    }
-}
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-class WordWithCount(var word: String, var count: Int) {
-    def this() {
-      this(null, -1)
-    }
-}
-{% endhighlight %}
-</div>
-</div>
-
-When grouping, sorting, or joining a data set of POJO types, keys can be specified with field expressions. See the [key definition section](#specifying-keys) or [data transformation section](#transformations) for details.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-wordCounts
-    .groupBy("word")                    // group by field expression "word"
-    .reduce(new MyReduceFunction());
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-wordCounts groupBy { _.word } reduce(new MyReduceFunction())
-{% endhighlight %}
-</div>
-</div>
-
-#### Primitive Types
-
-Flink supports all Java and Scala primitive types such as `Integer`, `String`, and `Double`. 
-
-#### General Class Types
-
-Flink supports most Java and Scala classes (API and custom). 
-Restrictions apply to classes containing fields that cannot be serialized, like file pointers, I/O streams, or other native
-resources. Classes that follow the Java Beans conventions work well in general.
-
-All classes that are not identified as POJO types (see POJO requirements above) are handled by Flink as general class types. 
-Flink treats these data types as black boxes and is not able to access their their content (i.e., for efficient sorting). General types are de/serialized using the serialization framework [Kryo](https://github.com/EsotericSoftware/kryo). 
-
-When grouping, sorting, or joining a data set of generic types, keys must be specified with key selector functions. See the [key definition section](#specifying-keys) or [data transformation section](#transformations) for details.
-
-
-#### Values
-
-*Value* types describe their serialization and deserialization manually. Instead of going through a
-general purpose serialization framework, they provide custom code for those operations by means of
-implementing the `org.apache.flinktypes.Value` interface with the methods `read` and `write`. Using
-a Value type is reasonable when general purpose serialization would be highly inefficient. An
-example would be a data type that implements a sparse vector of elements as an array. Knowing that
-the array is mostly zero, one can use a special encoding for the non-zero elements, while the
-general purpose serialization would simply write all array elements.
-
-The `org.apache.flinktypes.CopyableValue` interface supports manual internal cloning logic in a
-similar way.
-
-Flink comes with pre-defined Value types that correspond to basic data types. (`ByteValue`,
-`ShortValue`, `IntValue`, `LongValue`, `FloatValue`, `DoubleValue`, `StringValue`, `CharValue`,
-`BooleanValue`). These Value types act as mutable variants of the basic data types: Their value can
-be altered, allowing programmers to reuse objects and take pressure off the garbage collector.
-
-
-#### Hadoop Writables
-
-You can use types that implement the `org.apache.hadoop.Writable` interface. The serialization logic
-defined in the `write()`and `readFields()` methods will be used for serialization.
-
-
-#### Type Erasure & Type Inferrence
-
-*Note: This Section is only relevant for Java.*
-
-The Java compiler throws away much of the generic type information after compilation. This is
-known as *type erasure* in Java. It means that at runtime, an instance of an object does not know
-its generic type any more. For example, instances of `DataSet<String>` and `DataSet<Long>` look the
-same to the JVM.
-
-Flink requires type information at the time when it prepares the program for execution (when the
-main method of the program is called). The Flink Java API tries to reconstruct the type information
-that was thrown away in various ways and store it explicitly in the data sets and operators. You can
-retrieve the type via `DataSet.getType()`. The method returns an instance of `TypeInformation`,
-which is Flink's internal way of representing types.
-
-The type inference has its limits and needs the "cooperation" of the programmer in some cases.
-Examples for that are methods that create data sets from collections, such as
-`ExecutionEnvironment.fromCollection(),` where you can pass an argument that describes the type. But
-also generic functions like `MapFunction<I, O>` may need extra type information.
-
-The
-{% gh_link /flink-java/src/main/java/org/apache/flink/api/java/typeutils/ResultTypeQueryable.java "ResultTypeQueryable" %}
-interface can be implemented by input formats and functions to tell the API
-explicitly about their return type. The *input types* that the functions are invoked with can
-usually be inferred by the result types of the previous operations.
-
-[Back to top](#top)
-
-
-Data Sources
-------------
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-Data sources create the initial data sets, such as from files or from Java collections. The general
-mechanism of creating data sets is abstracted behind an
-{% gh_link /flink-core/src/main/java/org/apache/flink/api/common/io/InputFormat.java "InputFormat"%}.
-Flink comes
-with several built-in formats to create data sets from common file formats. Many of them have
-shortcut methods on the *ExecutionEnvironment*.
-
-File-based:
-
-- `readTextFile(path)` / `TextInputFormat` - Reads files line wise and returns them as Strings.
-
-- `readTextFileWithValue(path)` / `TextValueInputFormat` - Reads files line wise and returns them as
-  StringValues. StringValues are mutable strings.
-
-- `readCsvFile(path)` / `CsvInputFormat` - Parses files of comma (or another char) delimited fields.
-  Returns a DataSet of tuples or POJOs. Supports the basic java types and their Value counterparts as field
-  types.
-
-- `readFileOfPrimitives(path, Class)` / `PrimitiveInputFormat` - Parses files of new-line (or another char sequence) delimited primitive data types such as `String` or `Integer`. 
-
-Collection-based:
-
-- `fromCollection(Collection)` - Creates a data set from the Java Java.util.Collection. All elements
-  in the collection must be of the same type.
-
-- `fromCollection(Iterator, Class)` - Creates a data set from an iterator. The class specifies the
-  data type of the elements returned by the iterator.
-
-- `fromElements(T ...)` - Creates a data set from the given sequence of objects. All objects must be
-  of the same type.
-
-- `fromParallelCollection(SplittableIterator, Class)` - Creates a data set from an iterator, in
-  parallel. The class specifies the data type of the elements returned by the iterator.
-
-- `generateSequence(from, to)` - Generates the squence of numbers in the given interval, in
-  parallel.
-
-Generic:
-
-- `readFile(inputFormat, path)` / `FileInputFormat` - Accepts a file input format.
-
-- `createInput(inputFormat)` / `InputFormat` - Accepts a generic input format.
-
-**Examples**
-
-{% highlight java %}
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-// read text file from local files system
-DataSet<String> localLines = env.readTextFile("file:///path/to/my/textfile");
-
-// read text file from a HDFS running at nnHost:nnPort
-DataSet<String> hdfsLines = env.readTextFile("hdfs://nnHost:nnPort/path/to/my/textfile");
-
-// read a CSV file with three fields
-DataSet<Tuple3<Integer, String, Double>> csvInput = env.readCsvFile("hdfs:///the/CSV/file")
-	                       .types(Integer.class, String.class, Double.class);
-
-// read a CSV file with five fields, taking only two of them
-DataSet<Tuple2<String, Double>> csvInput = env.readCsvFile("hdfs:///the/CSV/file")
-                               .includeFields("10010")  // take the first and the fourth field
-	                       .types(String.class, Double.class);
-
-// read a CSV file with three fields into a POJO (Person.class) with corresponding fields
-DataSet<Person>> csvInput = env.readCsvFile("hdfs:///the/CSV/file")
-                         .pojoType(Person.class, "name", "age", "zipcode");                         
-
-// create a set from some given elements
-DataSet<String> value = env.fromElements("Foo", "bar", "foobar", "fubar");
-
-// generate a number sequence
-DataSet<Long> numbers = env.generateSequence(1, 10000000);
-
-// Read data from a relational database using the JDBC input format
-DataSet<Tuple2<String, Integer> dbData = 
-    env.createInput(
-      // create and configure input format
-      JDBCInputFormat.buildJDBCInputFormat()
-                     .setDrivername("org.apache.derby.jdbc.EmbeddedDriver")
-                     .setDBUrl("jdbc:derby:memory:persons")
-                     .setQuery("select name, age from persons")
-                     .finish(),
-      // specify type information for DataSet
-      new TupleTypeInfo(Tuple2.class, STRING_TYPE_INFO, INT_TYPE_INFO)
-    );
-
-// Note: Flink's program compiler needs to infer the data types of the data items which are returned
-// by an InputFormat. If this information cannot be automatically inferred, it is necessary to
-// manually provide the type information as shown in the examples above.
-{% endhighlight %}
-
-#### Configuring CSV Parsing
-
-Flink offers a number of configuration options for CSV parsing:
-
-- `types(Class ... types)` specifies the types of the fields to parse. **It is mandatory to configure the types of the parsed fields.**
-
-- `lineDelimiter(String del)` specifies the delimiter of individual records. The default line delimiter is the new-line character `'\n'`.
-
-- `fieldDelimiter(String del)` specifies the delimiter that separates fields of a record. The default field delimiter is the comma character `','`.
-
-- `includeFields(boolean ... flag)`, `includeFields(String mask)`, or `includeFields(long bitMask)` defines which fields to read from the input file (and which to ignore). By default the first *n* fields (as defined by the number of types in the `types()` call) are parsed.
-
-- `parseQuotedStrings(char quoteChar)` enables quoted string parsing. Strings are parsed as quoted strings if the first character of the string field is the quote character (leading or tailing whitespaces are *not* trimmed). Field delimiters within quoted strings are ignored. Quoted string parsing fails if the last character of a quoted string field is not the quote character. If quoted string parsing is enabled and the first character of the field is *not* the quoting string, the string is parsed as unquoted string. By default, quoted string parsing is disabled.
-
-- `ignoreComments(String commentPrefix)` specifies a comment prefix. All lines that start with the specified comment prefix are not parsed and ignored. By default, no lines are ignored.
-
-- `ignoreInvalidLines()` enables lenient parsing, i.e., lines that cannot be correctly parsed are ignored. By default, lenient parsing is disabled and invalid lines raise an exception.
-
-- `ignoreFirstLine()` configures the InputFormat to ignore the first line of the input file. By default no line is ignored.
-
-
-#### Recursive Traversal of the Input Path Directory
-
-For file-based inputs, when the input path is a directory, nested files are not enumerated by default. Instead, only the files inside the base directory are read, while nested files are ignored. Recursive enumeration of nested files can be enabled through the `recursive.file.enumeration` configuration parameter, like in the following example.
-
-{% highlight java %}
-// enable recursive enumeration of nested input files
-ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-// create a configuration object
-Configuration parameters = new Configuration();
-
-// set the recursive enumeration parameter
-parameters.setBoolean("recursive.file.enumeration", true);
-
-// pass the configuration to the data source
-DataSet<String> logs = env.readTextFile("file:///path/with.nested/files")
-			  .withParameters(parameters);
-{% endhighlight %}
-
-</div>
-<div data-lang="scala" markdown="1">
-
-Data sources create the initial data sets, such as from files or from Java collections. The general
-mechanism of creating data sets is abstracted behind an
-{% gh_link /flink-core/src/main/java/org/apache/flink/api/common/io/InputFormat.java "InputFormat"%}.
-Flink comes
-with several built-in formats to create data sets from common file formats. Many of them have
-shortcut methods on the *ExecutionEnvironment*.
-
-File-based:
-
-- `readTextFile(path)` / `TextInputFormat` - Reads files line wise and returns them as Strings.
-
-- `readTextFileWithValue(path)` / `TextValueInputFormat` - Reads files line wise and returns them as
-  StringValues. StringValues are mutable strings.
-
-- `readCsvFile(path)` / `CsvInputFormat` - Parses files of comma (or another char) delimited fields.
-  Returns a DataSet of tuples, case class objects, or POJOs. Supports the basic java types and their Value counterparts as field
-  types.
-
-Collection-based:
-
-- `fromCollection(Seq)` - Creates a data set from a Seq. All elements
-  in the collection must be of the same type.
-
-- `fromCollection(Iterator)` - Creates a data set from an Iterator. The class specifies the
-  data type of the elements returned by the iterator.
-
-- `fromElements(elements: _*)` - Creates a data set from the given sequence of objects. All objects
-  must be of the same type.
-
-- `fromParallelCollection(SplittableIterator)` - Creates a data set from an iterator, in
-  parallel. The class specifies the data type of the elements returned by the iterator.
-
-- `generateSequence(from, to)` - Generates the squence of numbers in the given interval, in
-  parallel.
-
-Generic:
-
-- `readFile(inputFormat, path)` / `FileInputFormat` - Accepts a file input format.
-
-- `createInput(inputFormat)` / `InputFormat` - Accepts a generic input format.
-
-**Examples**
-
-{% highlight scala %}
-val env  = ExecutionEnvironment.getExecutionEnvironment
-
-// read text file from local files system
-val localLines = env.readTextFile("file:///path/to/my/textfile")
-
-// read text file from a HDFS running at nnHost:nnPort
-val hdfsLines = env.readTextFile("hdfs://nnHost:nnPort/path/to/my/textfile")
-
-// read a CSV file with three fields
-val csvInput = env.readCsvFile[(Int, String, Double)]("hdfs:///the/CSV/file")
-
-// read a CSV file with five fields, taking only two of them
-val csvInput = env.readCsvFile[(String, Double)](
-  "hdfs:///the/CSV/file",
-  includedFields = Array(0, 3)) // take the first and the fourth field
-
-// CSV input can also be used with Case Classes
-case class MyCaseClass(str: String, dbl: Double)
-val csvInput = env.readCsvFile[MyCaseClass](
-  "hdfs:///the/CSV/file",
-  includedFields = Array(0, 3)) // take the first and the fourth field
-
-// read a CSV file with three fields into a POJO (Person) with corresponding fields
-val csvInput = env.readCsvFile[Person](
-  "hdfs:///the/CSV/file",
-  pojoFields = Array("name", "age", "zipcode"))
-
-// create a set from some given elements
-val values = env.fromElements("Foo", "bar", "foobar", "fubar")
-
-// generate a number sequence
-val numbers = env.generateSequence(1, 10000000);
-{% endhighlight %}
-
-
-#### Configuring CSV Parsing
-
-Flink offers a number of configuration options for CSV parsing:
-
-- `lineDelimiter: String` specifies the delimiter of individual records. The default line delimiter is the new-line character `'\n'`.
-
-- `fieldDelimiter: String` specifies the delimiter that separates fields of a record. The default field delimiter is the comma character `','`.
-
-- `includeFields: Array[Int]` defines which fields to read from the input file (and which to ignore). By default the first *n* fields (as defined by the number of types in the `types()` call) are parsed.
-
-- `pojoFields: Array[String]` specifies the fields of a POJO that are mapped to CSV fields. Parsers for CSV fields are automatically initialized based on the type and order of the POJO fields.
-
-- `parseQuotedStrings: Character` enables quoted string parsing. Strings are parsed as quoted strings if the first character of the string field is the quote character (leading or tailing whitespaces are *not* trimmed). Field delimiters within quoted strings are ignored. Quoted string parsing fails if the last character of a quoted string field is not the quote character. If quoted string parsing is enabled and the first character of the field is *not* the quoting string, the string is parsed as unquoted string. By default, quoted string parsing is disabled.
-
-- `ignoreComments: String` specifies a comment prefix. All lines that start with the specified comment prefix are not parsed and ignored. By default, no lines are ignored.
-
-- `lenient: Boolean` enables lenient parsing, i.e., lines that cannot be correctly parsed are ignored. By default, lenient parsing is disabled and invalid lines raise an exception.
-
-- `ignoreFirstLine: Boolean` configures the InputFormat to ignore the first line of the input file. By default no line is ignored.
-
-#### Recursive Traversal of the Input Path Directory
-
-For file-based inputs, when the input path is a directory, nested files are not enumerated by default. Instead, only the files inside the base directory are read, while nested files are ignored. Recursive enumeration of nested files can be enabled through the `recursive.file.enumeration` configuration parameter, like in the following example.
-
-{% highlight scala %}
-// enable recursive enumeration of nested input files
-val env  = ExecutionEnvironment.getExecutionEnvironment
-
-// create a configuration object
-val parameters = new Configuration
-
-// set the recursive enumeration parameter
-parameters.setBoolean("recursive.file.enumeration", true)
-
-// pass the configuration to the data source
-env.readTextFile("file:///path/with.nested/files").withParameters(parameters)
-{% endhighlight %}
-
-</div>
-</div>
-[Back to top](#top)
-
-Data Sinks
-----------
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-Data sinks consume DataSets and are used to store or return them. Data sink operations are described
-using an
-{% gh_link /flink-core/src/main/java/org/apache/flink/api/common/io/OutputFormat.java "OutputFormat" %}.
-Flink comes with a variety of built-in output formats that are encapsulated behind operations on the
-DataSet:
-
-- `writeAsText()` / `TextOuputFormat` - Writes elements line-wise as Strings. The Strings are
-  obtained by calling the *toString()* method of each element.
-- `writeAsFormattedText()` / `TextOutputFormat` - Write elements line-wise as Strings. The Strings
-  are obtained by calling a user-defined *format()* method for each element.
-- `writeAsCsv(...)` / `CsvOutputFormat` - Writes tuples as comma-separated value files. Row and field
-  delimiters are configurable. The value for each field comes from the *toString()* method of the objects.
-- `print()` / `printToErr()` / `print(String msg)` / `printToErr(String msg)` - Prints the *toString()* value
-of each element on the standard out / strandard error stream. Optionally, a prefix (msg) can be provided which is
-prepended to the output. This can help to distinguish between different calls to *print*. If the parallelism is
-greater than 1, the output will also be prepended with the identifier of the task which produced the output.
-- `write()` / `FileOutputFormat` - Method and base class for custom file outputs. Supports
-  custom object-to-bytes conversion.
-- `output()`/ `OutputFormat` - Most generic output method, for data sinks that are not file based
-  (such as storing the result in a database).
-
-A DataSet can be input to multiple operations. Programs can write or print a data set and at the
-same time run additional transformations on them.
-
-**Examples**
-
-Standard data sink methods:
-
-{% highlight java %}
-// text data 
-DataSet<String> textData = // [...]
-
-// write DataSet to a file on the local file system
-textData.writeAsText("file:///my/result/on/localFS");
-
-// write DataSet to a file on a HDFS with a namenode running at nnHost:nnPort
-textData.writeAsText("hdfs://nnHost:nnPort/my/result/on/localFS");
-
-// write DataSet to a file and overwrite the file if it exists
-textData.writeAsText("file:///my/result/on/localFS", WriteMode.OVERWRITE);
-
-// tuples as lines with pipe as the separator "a|b|c"
-DataSet<Tuple3<String, Integer, Double>> values = // [...]
-values.writeAsCsv("file:///path/to/the/result/file", "\n", "|");
-
-// this writes tuples in the text formatting "(a, b, c)", rather than as CSV lines
-values.writeAsText("file:///path/to/the/result/file");
-
-// this wites values as strings using a user-defined TextFormatter object
-values.writeAsFormattedText("file:///path/to/the/result/file",
-    new TextFormatter<Tuple2<Integer, Integer>>() {
-        public String format (Tuple2<Integer, Integer> value) {
-            return value.f1 + " - " + value.f0;
-        }
-    });
-{% endhighlight %}
-
-Using a custom output format:
-
-{% highlight java %}
-DataSet<Tuple3<String, Integer, Double>> myResult = [...]
-
-// write Tuple DataSet to a relational database
-myResult.output(
-    // build and configure OutputFormat
-    JDBCOutputFormat.buildJDBCOutputFormat()
-                    .setDrivername("org.apache.derby.jdbc.EmbeddedDriver")
-                    .setDBUrl("jdbc:derby:memory:persons")
-                    .setQuery("insert into persons (name, age, height) values (?,?,?)")
-                    .finish()
-    );
-{% endhighlight %}
-
-#### Locally Sorted Output
-
-The output of a data sink can be locally sorted on specified fields in specified orders using [tuple field positions](#define-keys-for-tuples) or [field expressions](#define-keys-using-field-expressions). This works for every output format.
-
-The following examples show how to use this feature:
-
-{% highlight java %}
-
-DataSet<Tuple3<Integer, String, Double>> tData = // [...]
-DataSet<Tuple2<BookPojo, Double>> pData = // [...]
-DataSet<String> sData = // [...]
-
-// sort output on String field in ascending order
-tData.print().sortLocalOutput(1, Order.ASCENDING);
-
-// sort output on Double field in descending and Integer field in ascending order
-tData.print().sortLocalOutput(2, Order.DESCENDING).sortLocalOutput(0, Order.ASCENDING);
-
-// sort output on the "author" field of nested BookPojo in descending order
-pData.writeAsText(...).sortLocalOutput("f0.author", Order.DESCENDING);
-
-// sort output on the full tuple in ascending order
-tData.writeAsCsv(...).sortLocalOutput("*", Order.ASCENDING);
-
-// sort atomic type (String) output in descending order
-sData.writeAsText(...).sortLocalOutput("*", Order.DESCENDING);
-
-{% endhighlight %}
-
-Globally sorted output is not supported yet.
-
-</div>
-<div data-lang="scala" markdown="1">
-Data sinks consume DataSets and are used to store or return them. Data sink operations are described
-using an
-{% gh_link /flink-core/src/main/java/org/apache/flink/api/common/io/OutputFormat.java "OutputFormat" %}.
-Flink comes with a variety of built-in output formats that are encapsulated behind operations on the
-DataSet:
-
-- `writeAsText()` / `TextOuputFormat` - Writes elements line-wise as Strings. The Strings are
-  obtained by calling the *toString()* method of each element.
-- `writeAsCsv(...)` / `CsvOutputFormat` - Writes tuples as comma-separated value files. Row and field
-  delimiters are configurable. The value for each field comes from the *toString()* method of the objects.
-- `print()` / `printToErr()` - Prints the *toString()* value of each element on the
-  standard out / strandard error stream.
-- `write()` / `FileOutputFormat` - Method and base class for custom file outputs. Supports
-  custom object-to-bytes conversion.
-- `output()`/ `OutputFormat` - Most generic output method, for data sinks that are not file based
-  (such as storing the result in a database).
-
-A DataSet can be input to multiple operations. Programs can write or print a data set and at the
-same time run additional transformations on them.
-
-**Examples**
-
-Standard data sink methods:
-
-{% highlight scala %}
-// text data 
-val textData: DataSet[String] = // [...]
-
-// write DataSet to a file on the local file system
-textData.writeAsText("file:///my/result/on/localFS")
-
-// write DataSet to a file on a HDFS with a namenode running at nnHost:nnPort
-textData.writeAsText("hdfs://nnHost:nnPort/my/result/on/localFS")
-
-// write DataSet to a file and overwrite the file if it exists
-textData.writeAsText("file:///my/result/on/localFS", WriteMode.OVERWRITE)
-
-// tuples as lines with pipe as the separator "a|b|c"
-val values: DataSet[(String, Int, Double)] = // [...]
-values.writeAsCsv("file:///path/to/the/result/file", "\n", "|")
-
-// this writes tuples in the text formatting "(a, b, c)", rather than as CSV lines
-values.writeAsText("file:///path/to/the/result/file");
-
-// this wites values as strings using a user-defined formatting
-values map { tuple => tuple._1 + " - " + tuple._2 }
-  .writeAsText("file:///path/to/the/result/file")
-{% endhighlight %}
-
-
-#### Locally Sorted Output
-
-The output of a data sink can be locally sorted on specified fields in specified orders using [tuple field positions](#define-keys-for-tuples) or [field expressions](#define-keys-using-field-expressions). This works for every output format.
-
-The following examples show how to use this feature:
-
-{% highlight scala %}
-
-val tData: DataSet[(Int, String, Double)] = // [...]
-val pData: DataSet[(BookPojo, Double)] = // [...]
-val sData: DataSet[String] = // [...]
-
-// sort output on String field in ascending order
-tData.print.sortLocalOutput(1, Order.ASCENDING);
-
-// sort output on Double field in descending and Int field in ascending order
-tData.print.sortLocalOutput(2, Order.DESCENDING).sortLocalOutput(0, Order.ASCENDING);
-
-// sort output on the "author" field of nested BookPojo in descending order
-pData.writeAsText(...).sortLocalOutput("_1.author", Order.DESCENDING);
-
-// sort output on the full tuple in ascending order
-tData.writeAsCsv(...).sortLocalOutput("_", Order.ASCENDING);
-
-// sort atomic type (String) output in descending order
-sData.writeAsText(...).sortLocalOutput("_", Order.DESCENDING);
-
-{% endhighlight %}
-
-Globally sorted output is not supported yet.
-
-</div>
-</div>
-
-[Back to top](#top)
-
-Debugging
----------
-
-Before running a data analysis program on a large data set in a distributed cluster, it is a good
-idea to make sure that the implemented algorithm works as desired. Hence, implementing data analysis
-programs is usually an incremental process of checking results, debugging, and improving.
-
-Flink provides a few nice features to significantly ease the development process of data analysis
-programs by supporting local debugging from within an IDE, injection of test data, and collection of
-result data. This section give some hints how to ease the development of Flink programs.
-
-### Local Execution Environment
-
-A `LocalEnvironment` starts a Flink system within the same JVM process it was created in. If you
-start the LocalEnvironement from an IDE, you can set breakpoint in your code and easily debug your
-program.
-
-A LocalEnvironment is created and used as follows:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-final ExecutionEnvironment env = ExecutionEnvironment.createLocalEnvironment();
-
-DataSet<String> lines = env.readTextFile(pathToTextFile);
-// build your program
-
-env.execute();
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-
-{% highlight scala %}
-val env = ExecutionEnvironment.createLocalEnvironment()
-
-val lines = env.readTextFile(pathToTextFile)
-// build your program
-
-env.execute();
-{% endhighlight %}
-</div>
-</div>
-
-### Collection Data Sources and Sinks
-
-Providing input for an analysis program and checking its output is cumbersome when done by creating
-input files and reading output files. Flink features special data sources and sinks which are backed
-by Java collections to ease testing. Once a program has been tested, the sources and sinks can be
-easily replaced by sources and sinks that read from / write to external data stores such as HDFS.
-
-Collection data sources can be used as follows:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-final ExecutionEnvironment env = ExecutionEnvironment.createLocalEnvironment();
-
-// Create a DataSet from a list of elements
-DataSet<Integer> myInts = env.fromElements(1, 2, 3, 4, 5);
-
-// Create a DataSet from any Java collection
-List<Tuple2<String, Integer>> data = ...
-DataSet<Tuple2<String, Integer>> myTuples = env.fromCollection(data);
-
-// Create a DataSet from an Iterator
-Iterator<Long> longIt = ...
-DataSet<Long> myLongs = env.fromCollection(longIt, Long.class);
-{% endhighlight %}
-
-A collection data sink is specified as follows:
-
-{% highlight java %}
-DataSet<Tuple2<String, Integer>> myResult = ...
-
-List<Tuple2<String, Integer>> outData = new ArrayList<Tuple2<String, Integer>>();
-myResult.output(new LocalCollectionOutputFormat(outData));
-{% endhighlight %}
-
-**Note:** Currently, the collection data sink is restricted to local execution, as a debugging tool.
-
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-val env = ExecutionEnvironment.createLocalEnvironment()
-
-// Create a DataSet from a list of elements
-val myInts = env.fromElements(1, 2, 3, 4, 5)
-
-// Create a DataSet from any Collection
-val data: Seq[(String, Int)] = ...
-val myTuples = env.fromCollection(data)
-
-// Create a DataSet from an Iterator
-val longIt: Iterator[Long] = ...
-val myLongs = env.fromCollection(longIt)
-{% endhighlight %}
-</div>
-</div>
-
-**Note:** Currently, the collection data source requires that data types and iterators implement
-`Serializable`. Furthermore, collection data sources can not be executed in parallel (
-parallelism = 1).
-
-[Back to top](#top)
-
-Iteration Operators
--------------------
-
-Iterations implement loops in Flink programs. The iteration operators encapsulate a part of the
-program and execute it repeatedly, feeding back the result of one iteration (the partial solution)
-into the next iteration. There are two types of iterations in Flink: **BulkIteration** and
-**DeltaIteration**.
-
-This section provides quick examples on how to use both operators. Check out the [Introduction to
-Iterations](iterations.html) page for a more detailed introduction.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-#### Bulk Iterations
-
-To create a BulkIteration call the `iterate(int)` method of the DataSet the iteration should start
-at. This will return an `IterativeDataSet`, which can be transformed with the regular operators. The
-single argument to the iterate call specifies the maximum number of iterations.
-
-To specify the end of an iteration call the `closeWith(DataSet)` method on the `IterativeDataSet` to
-specify which transformation should be fed back to the next iteration. You can optionally specify a
-termination criterion with `closeWith(DataSet, DataSet)`, which evaluates the second DataSet and
-terminates the iteration, if this DataSet is empty. If no termination criterion is specified, the
-iteration terminates after the given maximum number iterations.
-
-The following example iteratively estimates the number Pi. The goal is to count the number of random
-points, which fall into the unit circle. In each iteration, a random point is picked. If this point
-lies inside the unit circle, we increment the count. Pi is then estimated as the resulting count
-divided by the number of iterations multiplied by 4.
-
-{% highlight java %}
-final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-
-// Create initial IterativeDataSet
-IterativeDataSet<Integer> initial = env.fromElements(0).iterate(10000);
-
-DataSet<Integer> iteration = initial.map(new MapFunction<Integer, Integer>() {
-    @Override
-    public Integer map(Integer i) throws Exception {
-        double x = Math.random();
-        double y = Math.random();
-
-        return i + ((x * x + y * y < 1) ? 1 : 0);
-    }
-});
-
-// Iteratively transform the IterativeDataSet
-DataSet<Integer> count = initial.closeWith(iteration);
-
-count.map(new MapFunction<Integer, Double>() {
-    @Override
-    public Double map(Integer count) throws Exception {
-        return count / (double) 10000 * 4;
-    }
-}).print();
-
-env.execute("Iterative Pi Example");
-{% endhighlight %}
-
-You can also check out the
-{% gh_link /flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/clustering/KMeans.java "K-Means example" %},
-which uses a BulkIteration to cluster a set of unlabeled points.
-
-#### Delta Iterations
-
-Delta iterations exploit the fact that certain algorithms do not change every data point of the
-solution in each iteration.
-
-In addition to the partial solution that is fed back (called workset) in every iteration, delta
-iterations maintain state across iterations (called solution set), which can be updated through
-deltas. The result of the iterative computation is the state after the last iteration. Please refer
-to the [Introduction to Iterations](iterations.html) for an overview of the basic principle of delta
-iterations.
-
-Defining a DeltaIteration is similar to defining a BulkIteration. For delta iterations, two data
-sets form the input to each iteration (workset and solution set), and two data sets are produced as
-the result (new workset, solution set delta) in each iteration.
-
-To create a DeltaIteration call the `iterateDelta(DataSet, int, int)` (or `iterateDelta(DataSet,
-int, int[])` respectively). This method is called on the initial solution set. The arguments are the
-initial delta set, the maximum number of iterations and the key positions. The returned
-`DeltaIteration` object gives you access to the DataSets representing the workset and solution set
-via the methods `iteration.getWorkset()` and `iteration.getSolutionSet()`.
-
-Below is an example for the syntax of a delta iteration
-
-{% highlight java %}
-// read the initial data sets
-DataSet<Tuple2<Long, Double>> initialSolutionSet = // [...]
-
-DataSet<Tuple2<Long, Double>> initialDeltaSet = // [...]
-
-int maxIterations = 100;
-int keyPosition = 0;
-
-DeltaIteration<Tuple2<Long, Double>, Tuple2<Long, Double>> iteration = initialSolutionSet
-    .iterateDelta(initialDeltaSet, maxIterations, keyPosition);
-
-DataSet<Tuple2<Long, Double>> candidateUpdates = iteration.getWorkset()
-    .groupBy(1)
-    .reduceGroup(new ComputeCandidateChanges());
-
-DataSet<Tuple2<Long, Double>> deltas = candidateUpdates
-    .join(iteration.getSolutionSet())
-    .where(0)
-    .equalTo(0)
-    .with(new CompareChangesToCurrent());
-
-DataSet<Tuple2<Long, Double>> nextWorkset = deltas
-    .filter(new FilterByThreshold());
-
-iteration.closeWith(deltas, nextWorkset)
-	.writeAsCsv(outputPath);
-{% endhighlight %}
-
-</div>
-<div data-lang="scala" markdown="1">
-#### Bulk Iterations
-
-To create a BulkIteration call the `iterate(int)` method of the DataSet the iteration should start
-at and also specify a step function. The step function gets the input DataSet for the current
-iteration and must return a new DataSet. The parameter of the iterate call is the maximum number
-of iterations after which to stop.
-
-There is also the `iterateWithTermination(int)` function that accepts a step function that
-returns two DataSets: The result of the iteration step and a termination criterion. The iterations
-are stopped once the termination criterion DataSet is empty.
-
-The following example iteratively estimates the number Pi. The goal is to count the number of random
-points, which fall into the unit circle. In each iteration, a random point is picked. If this point
-lies inside the unit circle, we increment the count. Pi is then estimated as the resulting count
-divided by the number of iterations multiplied by 4.
-
-{% highlight scala %}
-val env = ExecutionEnvironment.getExecutionEnvironment()
-
-// Create initial DataSet
-val initial = env.fromElements(0)
-
-val count = initial.iterate(10000) { iterationInput: DataSet[Int] =>
-  val result = iterationInput.map { i => 
-    val x = Math.random()
-    val y = Math.random()
-    i + (if (x * x + y * y < 1) 1 else 0)
-  }
-  result
-}
-
-val result = count map { c => c / 10000.0 * 4 }
-
-result.print()
-
-env.execute("Iterative Pi Example");
-{% endhighlight %}
-
-You can also check out the
-{% gh_link /flink-examples/flink-scala-examples/src/main/scala/org/apache/flink/examples/scala/clustering/K

<TRUNCATED>

[11/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/fig/projects_dependencies.svg
----------------------------------------------------------------------
diff --git a/docs/internals/fig/projects_dependencies.svg b/docs/internals/fig/projects_dependencies.svg
new file mode 100644
index 0000000..d537ab8
--- /dev/null
+++ b/docs/internals/fig/projects_dependencies.svg
@@ -0,0 +1,586 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="184.83mm"
+   height="182.98mm"
+   id="svg2985"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="Picture1.emf">
+  <metadata
+     id="metadata3185">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="480"
+     id="namedview3183"
+     showgrid="false"
+     inkscape:zoom="1.5284853"
+     inkscape:cx="327.45474"
+     inkscape:cy="324.17715"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2985" />
+  <defs
+     id="defs2987" />
+  <g
+     id="g2989">
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 260.48364 21.380326   C 260.48364 18.510862 262.80922 16.185282 265.69744 16.185282   L 378.24423 16.185282   C 381.13245 16.185282 383.45803 18.510862 383.45803 21.380326   L 383.45803 42.216767   C 383.45803 45.086232 381.13245 47.411811 378.24423 47.411811   L 265.69744 47.411811   C 262.80922 47.411811 260.48364 45.086232 260.48364 42.216767   z"
+       id="path2991" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 260.48364 21.380326   C 260.48364 18.510862 262.80922 16.185282 265.69744 16.185282   L 378.24423 16.185282   C 381.13245 16.185282 383.45803 18.510862 383.45803 21.380326   L 383.45803 42.216767   C 383.45803 45.086232 381.13245 47.411811 378.24423 47.411811   L 265.69744 47.411811   C 262.80922 47.411811 260.48364 45.086232 260.48364 42.216767   z"
+       id="path2993" />
+    <text
+       xml:space="preserve"
+       x="275.28831"
+       y="39.668396"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text2995">flink</text>
+    <text
+       xml:space="preserve"
+       x="316.69863"
+       y="39.668396"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text2997">-</text>
+    <text
+       xml:space="preserve"
+       x="325.70087"
+       y="39.668396"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text2999">core</text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 130.86073 96.502166   C 130.86073 93.670211 133.1488 91.372763 135.98075 91.372763   L 233.41127 91.372763   C 236.23385 91.372763 238.5313 93.670211 238.5313 96.502166   L 238.5313 116.98227   C 238.5313 119.81422 236.23385 122.10229 233.41127 122.10229   L 135.98075 122.10229   C 133.1488 122.10229 130.86073 119.81422 130.86073 116.98227   z"
+       id="path3001" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.5037487px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 130.86073 96.502166   C 130.86073 93.670211 133.1488 91.372763 135.98075 91.372763   L 233.41127 91.372763   C 236.23385 91.372763 238.5313 93.670211 238.5313 96.502166   L 238.5313 116.98227   C 238.5313 119.81422 236.23385 122.10229 233.41127 122.10229   L 135.98075 122.10229   C 133.1488 122.10229 130.86073 119.81422 130.86073 116.98227   z"
+       id="path3003" />
+    <text
+       xml:space="preserve"
+       x="138.4718"
+       y="114.6131"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3005">flink</text>
+    <text
+       xml:space="preserve"
+       x="179.88211"
+       y="114.6131"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3007">-</text>
+    <text
+       xml:space="preserve"
+       x="188.88436"
+       y="114.6131"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3009">java</text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 260.48364 96.567807   C 260.48364 93.754607 262.77171 91.466537 265.58491 91.466537   L 363.05295 91.466537   C 365.86615 91.466537 368.15422 93.754607 368.15422 96.567807   L 368.15422 117.0104   C 368.15422 119.8236 365.86615 122.11167 363.05295 122.11167   L 265.58491 122.11167   C 262.77171 122.11167 260.48364 119.8236 260.48364 117.0104   z"
+       id="path3011" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 260.48364 96.567807   C 260.48364 93.754607 262.77171 91.466537 265.58491 91.466537   L 363.05295 91.466537   C 365.86615 91.466537 368.15422 93.754607 368.15422 96.567807   L 368.15422 117.0104   C 368.15422 119.8236 365.86615 122.11167 363.05295 122.11167   L 265.58491 122.11167   C 262.77171 122.11167 260.48364 119.8236 260.48364 117.0104   z"
+       id="path3013" />
+    <text
+       xml:space="preserve"
+       x="264.04551"
+       y="114.65651"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3015">flink</text>
+    <text
+       xml:space="preserve"
+       x="305.45583"
+       y="114.65651"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3017">-</text>
+    <text
+       xml:space="preserve"
+       x="314.45807"
+       y="114.65651"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3019">scala</text>
+    <text
+       xml:space="preserve"
+       x="20.936318"
+       y="28.495681"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3021">c</text>
+    <text
+       xml:space="preserve"
+       x="28.738261"
+       y="28.495681"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3023">ore types, common API, utils,</text>
+    <text
+       xml:space="preserve"
+       x="102.25658"
+       y="46.500168"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3025">core data structures</text>
+    <text
+       xml:space="preserve"
+       x="277.67823"
+       y="145.73346"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3027">Scala API</text>
+    <text
+       xml:space="preserve"
+       x="152.42842"
+       y="145.73346"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3029">Java API</text>
+    <text
+       xml:space="preserve"
+       x="127.97233"
+       y="163.73794"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3031">Old Record API</text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 260.48364 198.25564   C 260.48364 195.0861 263.05303 192.51671 266.20382 192.51671   L 399.26822 192.51671   C 402.419 192.51671 404.98839 195.0861 404.98839 198.25564   L 404.98839 221.13634   C 404.98839 224.30588 402.419 226.87527 399.26822 226.87527   L 266.20382 226.87527   C 263.05303 226.87527 260.48364 224.30588 260.48364 221.13634   z"
+       id="path3033" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 260.48364 198.25564   C 260.48364 195.0861 263.05303 192.51671 266.20382 192.51671   L 399.26822 192.51671   C 402.419 192.51671 404.98839 195.0861 404.98839 198.25564   L 404.98839 221.13634   C 404.98839 224.30588 402.419 226.87527 399.26822 226.87527   L 266.20382 226.87527   C 263.05303 226.87527 260.48364 224.30588 260.48364 221.13634   z"
+       id="path3035" />
+    <text
+       xml:space="preserve"
+       x="268.52797"
+       y="217.56563"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3037">flink</text>
+    <text
+       xml:space="preserve"
+       x="309.93829"
+       y="217.56563"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3039">-</text>
+    <text
+       xml:space="preserve"
+       x="318.94053"
+       y="217.56563"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3041">runtime</text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 260.48364 262.94051   C 260.48364 259.77097 263.05303 257.22033 266.20382 257.22033   L 399.26822 257.22033   C 402.419 257.22033 404.98839 259.77097 404.98839 262.94051   L 404.98839 285.83996   C 404.98839 288.99074 402.419 291.56013 399.26822 291.56013   L 266.20382 291.56013   C 263.05303 291.56013 260.48364 288.99074 260.48364 285.83996   z"
+       id="path3043" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 260.48364 262.94051   C 260.48364 259.77097 263.05303 257.22033 266.20382 257.22033   L 399.26822 257.22033   C 402.419 257.22033 404.98839 259.77097 404.98839 262.94051   L 404.98839 285.83996   C 404.98839 288.99074 402.419 291.56013 399.26822 291.56013   L 266.20382 291.56013   C 263.05303 291.56013 260.48364 288.99074 260.48364 285.83996   z"
+       id="path3045" />
+    <text
+       xml:space="preserve"
+       x="264.77703"
+       y="282.25536"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3047">flink</text>
+    <text
+       xml:space="preserve"
+       x="306.18735"
+       y="282.25536"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3049">-</text>
+    <text
+       xml:space="preserve"
+       x="315.18959"
+       y="282.25536"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3051">compiler</text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 260.48364 326.7439   C 260.48364 323.57436 263.05303 321.02373 266.20382 321.02373   L 399.26822 321.02373   C 402.419 321.02373 404.98839 323.57436 404.98839 326.7439   L 404.98839 349.64335   C 404.98839 352.79414 402.419 355.36353 399.26822 355.36353   L 266.20382 355.36353   C 263.05303 355.36353 260.48364 352.79414 260.48364 349.64335   z"
+       id="path3053" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 260.48364 326.7439   C 260.48364 323.57436 263.05303 321.02373 266.20382 321.02373   L 399.26822 321.02373   C 402.419 321.02373 404.98839 323.57436 404.98839 326.7439   L 404.98839 349.64335   C 404.98839 352.79414 402.419 355.36353 399.26822 355.36353   L 266.20382 355.36353   C 263.05303 355.36353 260.48364 352.79414 260.48364 349.64335   z"
+       id="path3055" />
+    <text
+       xml:space="preserve"
+       x="275.72976"
+       y="346.05788"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3057">flink</text>
+    <text
+       xml:space="preserve"
+       x="317.14008"
+       y="346.05788"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3059">-</text>
+    <text
+       xml:space="preserve"
+       x="326.14232"
+       y="346.05788"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3061">clients</text>
+    <path
+       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 333.49558 397.91788   L 333.94569 363.25925   L 331.45132 363.22174   L 331.00121 397.88037   z  M 338.07172 370.17972   L 332.7454 360.74612   L 327.1565 370.02968   C 326.80016 370.62983 326.98771 371.39877 327.58786 371.75511   C 328.16926 372.11145 328.9382 371.92391 329.29454 371.32376   L 329.29454 371.32376   L 333.7769 363.87815   L 331.62011 363.8594   L 335.89618 371.41753   C 336.23376 372.01768 337.00271 372.22398 337.60286 371.8864   C 338.203 371.54881 338.40931 370.77987 338.07172 370.17972   z"
+       id="path3063" />
+    <text
+       xml:space="preserve"
+       x="90.010614"
+       y="280.17295"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3065">compiler </text>
+    <text
+       xml:space="preserve"
+       x="159.62796"
+       y="280.17295"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3067">/ </text>
+    <text
+       xml:space="preserve"
+       x="171.78098"
+       y="280.17295"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3069">optimizer</text>
+    <text
+       xml:space="preserve"
+       x="48.60059"
+       y="208.5999"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3071">l</text>
+    <text
+       xml:space="preserve"
+       x="52.651599"
+       y="208.5999"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3073">ocal/distributed execution,</text>
+    <text
+       xml:space="preserve"
+       x="71.706347"
+       y="226.60439"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3075">runtime </text>
+    <text
+       xml:space="preserve"
+       x="135.92234"
+       y="226.60439"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3077">web monitor</text>
+    <text
+       xml:space="preserve"
+       x="73.125502"
+       y="323.98799"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3079">local/remote execution</text>
+    <text
+       xml:space="preserve"
+       x="124.13821"
+       y="341.99247"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3081">CLI </text>
+    <text
+       xml:space="preserve"
+       x="154.44576"
+       y="341.99247"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3083">client</text>
+    <text
+       xml:space="preserve"
+       x="74.775913"
+       y="359.99696"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3085">compiler web frontend</text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 413.72807 12.678158   C 421.54877 12.678158 427.9066 13.72842 427.9066 15.041247   L 427.9066 68.229498   C 427.9066 69.52357 434.24568 70.592586 442.08513 70.592586   C 434.24568 70.592586 427.9066 71.642848 427.9066 72.955675   L 427.9066 126.14393   C 427.9066 127.45675 421.54877 128.50701 413.72807 128.50701 "
+       id="path3087" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 409.35823 181.56398   C 417.17893 181.56398 423.53676 182.61424 423.53676 183.92707   L 423.53676 273.18056   C 423.53676 274.49338 429.87584 275.54364 437.7153 275.54364   C 429.87584 275.54364 423.53676 276.61266 423.53676 277.90673   L 423.53676 367.17897   C 423.53676 368.47305 417.17893 369.54206 409.35823 369.54206 "
+       id="path3089" />
+    <text
+       xml:space="preserve"
+       x="464.00202"
+       y="69.388546"
+       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3091">Needed to </text>
+    <text
+       xml:space="preserve"
+       x="486.95774"
+       y="90.393779"
+       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3093">write </text>
+    <text
+       xml:space="preserve"
+       x="467.00277"
+       y="111.39901"
+       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3095">programs</text>
+    <text
+       xml:space="preserve"
+       x="440.46593"
+       y="265.59638"
+       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3097">Needed </text>
+    <text
+       xml:space="preserve"
+       x="512.93399"
+       y="265.59638"
+       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3099">in addition for </text>
+    <text
+       xml:space="preserve"
+       x="472.87401"
+       y="286.60161"
+       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3101">embedded </text>
+    <text
+       xml:space="preserve"
+       x="571.14849"
+       y="286.60161"
+       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3103">and </text>
+    <text
+       xml:space="preserve"
+       x="445.41717"
+       y="307.60684"
+       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3105">distributed execution</text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 126.70657 484.20813   C 126.70657 479.61323 130.43875 475.88105 135.05239 475.88105   L 288.46561 475.88105   C 293.07926 475.88105 296.81144 479.61323 296.81144 484.20813   L 296.81144 517.57269   C 296.81144 522.16759 293.07926 525.91852 288.46561 525.91852   L 135.05239 525.91852   C 130.43875 525.91852 126.70657 522.16759 126.70657 517.57269   z"
+       id="path3107" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 126.70657 484.20813   C 126.70657 479.61323 130.43875 475.88105 135.05239 475.88105   L 288.46561 475.88105   C 293.07926 475.88105 296.81144 479.61323 296.81144 484.20813   L 296.81144 517.57269   C 296.81144 522.16759 293.07926 525.91852 288.46561 525.91852   L 135.05239 525.91852   C 130.43875 525.91852 126.70657 522.16759 126.70657 517.57269   z"
+       id="path3109" />
+    <text
+       xml:space="preserve"
+       x="161.02009"
+       y="496.75874"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3111">flink</text>
+    <text
+       xml:space="preserve"
+       x="202.4304"
+       y="496.75874"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3113">-</text>
+    <text
+       xml:space="preserve"
+       x="211.43265"
+       y="496.75874"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3115">java</text>
+    <text
+       xml:space="preserve"
+       x="253.59315"
+       y="496.75874"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3117">-</text>
+    <text
+       xml:space="preserve"
+       x="164.17087"
+       y="520.76472"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3119">examples</text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 68.867157 548.64918   C 68.867157 544.12931 72.543072 540.45339 77.062948 540.45339   L 251.57517 540.45339   C 256.09505 540.45339 259.77097 544.12931 259.77097 548.64918   L 259.77097 581.43235   C 259.77097 585.95223 256.09505 589.62814 251.57517 589.62814   L 77.062948 589.62814   C 72.543072 589.62814 68.867157 585.95223 68.867157 581.43235   z"
+       id="path3121" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 68.867157 548.64918   C 68.867157 544.12931 72.543072 540.45339 77.062948 540.45339   L 251.57517 540.45339   C 256.09505 540.45339 259.77097 544.12931 259.77097 548.64918   L 259.77097 581.43235   C 259.77097 585.95223 256.09505 589.62814 251.57517 589.62814   L 77.062948 589.62814   C 72.543072 589.62814 68.867157 585.95223 68.867157 581.43235   z"
+       id="path3123" />
+    <text
+       xml:space="preserve"
+       x="109.65675"
+       y="560.90686"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3125">flink</text>
+    <text
+       xml:space="preserve"
+       x="151.06706"
+       y="560.90686"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3127">-</text>
+    <text
+       xml:space="preserve"
+       x="160.06931"
+       y="560.90686"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3129">scala</text>
+    <text
+       xml:space="preserve"
+       x="210.18179"
+       y="560.90686"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3131">-</text>
+    <text
+       xml:space="preserve"
+       x="116.85854"
+       y="584.91284"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3133">examples</text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 273.3681 606.75116   C 273.3681 603.22528 276.25632 600.33706 279.7822 600.33706   L 402.92538 600.33706   C 406.48877 600.33706 409.37699 603.22528 409.37699 606.75116   L 409.37699 632.52008   C 409.37699 636.04595 406.48877 638.93417 402.92538 638.93417   L 279.7822 638.93417   C 276.25632 638.93417 273.3681 636.04595 273.3681 632.52008   z"
+       id="path3135" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 273.3681 606.75116   C 273.3681 603.22528 276.25632 600.33706 279.7822 600.33706   L 402.92538 600.33706   C 406.48877 600.33706 409.37699 603.22528 409.37699 606.75116   L 409.37699 632.52008   C 409.37699 636.04595 406.48877 638.93417 402.92538 638.93417   L 279.7822 638.93417   C 276.25632 638.93417 273.3681 636.04595 273.3681 632.52008   z"
+       id="path3137" />
+    <text
+       xml:space="preserve"
+       x="292.11598"
+       y="627.49492"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3139">flink</text>
+    <text
+       xml:space="preserve"
+       x="333.5263"
+       y="627.49492"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3141">-</text>
+    <text
+       xml:space="preserve"
+       x="342.52854"
+       y="627.49492"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3143">tests</text>
+    <path
+       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 298.83695 81.395278   L 308.45809 60.108725   L 306.17002 59.077218   L 296.56763 80.382525   z  M 309.47085 68.098215   L 308.34557 57.333033   L 299.51212 63.615848   C 298.94948 64.009696 298.81819 64.797393 299.2308 65.360033   C 299.62464 65.922673 300.41234 66.053956 300.97498 65.641353   L 308.04549 60.615101   L 306.07625 59.733631   L 306.97648 68.36078   C 307.05149 69.054703 307.6704 69.542325 308.34557 69.467306   C 309.03949 69.411042 309.52711 68.792138 309.47085 68.098215   z"
+       id="path3145" />
+    <path
+       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 214.32839 88.962788   L 264.78784 60.765138   L 263.56879 58.589596   L 213.10934 86.777869   z  M 260.83998 67.788763   L 266.34448 58.467691   L 255.52303 58.261389   C 254.82911 58.252012 254.25709 58.805275 254.24771 59.48982   C 254.23834 60.183743 254.78222 60.755761 255.47615 60.765138   L 264.15956 60.924553   L 263.09992 59.039708   L 258.69257 66.522823   C 258.33623 67.113595 258.53316 67.882536 259.13331 68.229498   C 259.72408 68.585836 260.49302 68.388912 260.83998 67.788763   z"
+       id="path3147" />
+    <path
+       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 358.60809 184.69601   L 363.55932 174.3997   L 365.97867 169.27967   L 368.34176 164.19716   L 370.64859 159.1709   L 372.86164 154.20092   L 374.96216 149.30595   L 376.95016 144.50475   L 378.78812 139.77857   L 380.47604 135.16492   L 381.97641 130.6638   L 383.30799 126.31272   L 383.87063 124.21219   L 384.39576 122.11167   L 384.88338 120.06741   L 385.27723 118.06066   L 385.63357 116.09142   L 385.93365 114.17844   L 386.13995 112.30298   L 386.30874 110.48377   L 386.38376 108.70208   L 386.40251 106.97665   L 386.365 105.28873   L 386.27123 103.65707   L 386.10244 102.04417   L 385.87738 100.48753   L 385.61482 98.949651   L 385.29599 97.449277   L 384.48954 94.561058   L 383.49554 91.804121   L 382.33275 89.140957   L 381.01992 86.590322   L 379.55706 84.114705   L 377.98166 81.714107   L 376.29374 79.351018   L 374.53081 77.062948   L 372.67409 74.812388   L 370.76112 72.580582   L 368.4918 70.011192   L 370.36727 68.342026   L 372.67409 70.948925   L 374.6
 0582 73.21824   L 376.50005 75.54382   L 378.338 77.906909   L 380.08219 80.326261   L 381.7326 82.839387   L 383.23297 85.446287   L 384.62082 88.14696   L 385.83987 90.96016   L 386.89013 93.885889   L 387.73409 96.942901   L 388.07168 98.518293   L 388.353 100.1312   L 388.59681 101.80036   L 388.7656 103.48828   L 388.87813 105.23247   L 388.91564 107.01416   L 388.89688 108.83336   L 388.78436 110.69008   L 388.63432 112.60305   L 388.39051 114.55354   L 388.09043 116.54153   L 387.73409 118.56704   L 387.30274 120.63005   L 386.83387 122.73058   L 386.28998 124.84985   L 385.68984 127.04415   L 384.35825 131.47025   L 382.82037 136.02764   L 381.11369 140.6788   L 379.25698 145.44248   L 377.26899 150.29994   L 375.14971 155.23242   L 372.9179 160.22117   L 370.61108 165.26617   L 368.22924 170.34869   L 365.80988 175.46871   L 360.8774 185.76503   z  M 369.8984 77.944418   L 367.77912 67.310519   L 378.07544 70.705114   C 378.7131 70.93017 379.06944 71.624093 378.86313 72.280
 507   C 378.63808 72.93692 377.94416 73.293259 377.28774 73.086958   L 369.03569 70.36753   L 370.64859 68.923421   L 372.33651 77.456796   C 372.48655 78.131965 372.03643 78.788378 371.36127 78.919661   C 370.6861 79.050944 370.02968 78.619586 369.8984 77.944418   z"
+       id="path3149" />
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 259.48965 415.00339   C 259.48965 411.89011 262.02153 409.35823 265.1348 409.35823   L 399.36199 409.35823   C 402.47527 409.35823 404.98839 411.89011 404.98839 415.00339   L 404.98839 437.50899   C 404.98839 440.62227 402.47527 443.1354 399.36199 443.1354   L 265.1348 443.1354   C 262.02153 443.1354 259.48965 440.62227 259.48965 437.50899   z"
+       id="path3151" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 259.48965 415.00339   C 259.48965 411.89011 262.02153 409.35823 265.1348 409.35823   L 399.36199 409.35823   C 402.47527 409.35823 404.98839 411.89011 404.98839 415.00339   L 404.98839 437.50899   C 404.98839 440.62227 402.47527 443.1354 399.36199 443.1354   L 265.1348 443.1354   C 262.02153 443.1354 259.48965 440.62227 259.48965 437.50899   z"
+       id="path3153" />
+    <text
+       xml:space="preserve"
+       x="263.06067"
+       y="434.12154"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3155">flink</text>
+    <text
+       xml:space="preserve"
+       x="304.47099"
+       y="434.12154"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3157">-</text>
+    <text
+       xml:space="preserve"
+       x="313.47323"
+       y="434.12154"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3159">test</text>
+    <text
+       xml:space="preserve"
+       x="350.83254"
+       y="434.12154"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3161">-</text>
+    <text
+       xml:space="preserve"
+       x="359.83478"
+       y="434.12154"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3163">utils</text>
+    <path
+       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 333.9832 252.40038   L 333.9832 237.32162   L 331.48883 237.32162   L 331.48883 252.40038   z  M 338.18425 244.18583   L 332.7454 234.84601   L 327.28779 244.18583   C 326.93145 244.78598 327.13775 245.55492 327.7379 245.91126   C 328.31929 246.24885 329.08823 246.04255 329.44457 245.46115   L 333.81441 237.95928   L 331.65762 237.95928   L 336.02746 245.46115   L 336.02746 245.46115   C 336.3838 246.04255 337.15274 246.24885 337.73414 245.91126   C 338.33429 245.55492 338.54059 244.78598 338.18425 244.18583   z"
+       id="path3165" />
+    <path
+       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 333.9832 314.38457   L 333.9832 299.28706   L 331.48883 299.28706   L 331.48883 314.38457   z  M 338.18425 306.17002   L 332.7454 296.81144   L 327.28779 306.17002   C 326.93145 306.77017 327.13775 307.52036 327.7379 307.8767   C 328.31929 308.23304 329.08823 308.02674 329.44457 307.42659   L 333.81441 299.92472   L 331.65762 299.92472   L 336.02746 307.42659   L 336.02746 307.42659   C 336.3838 308.02674 337.15274 308.23304 337.73414 307.8767   C 338.33429 307.52036 338.54059 306.77017 338.18425 306.17002   z"
+       id="path3167" />
+    <text
+       xml:space="preserve"
+       x="165.18987"
+       y="432.03911"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3169">Test </text>
+    <text
+       xml:space="preserve"
+       x="129.63101"
+       y="450.0436"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3171">environments</text>
+    <path
+       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 334.03947 589.66565   L 331.05747 457.10763   L 333.55185 457.05136   L 336.53384 589.60939   z  M 327.00647 464.08437   L 332.23902 454.61326   L 337.90293 463.84055   C 338.27802 464.42195 338.09048 465.19089 337.49033 465.54723   C 336.90893 465.92232 336.13999 465.73478 335.78365 465.13463   L 335.78365 465.13463   L 331.22627 457.74529   L 333.40181 457.68902   L 329.18201 465.28466   C 328.84442 465.88481 328.09424 466.10987 327.49409 465.77229   C 326.87518 465.4347 326.66888 464.68451 327.00647 464.08437   z"
+       id="path3173" />
+    <path
+       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.037509345px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 266.72895 617.7789   L 259.33961 617.55385   L 252.1003 617.29128   L 248.49941 617.10374   L 244.97353 616.91619   L 241.56018 616.69113   L 238.18434 616.42857   L 234.92102 616.09098   L 231.77024 615.7534   L 228.73198 615.30329   L 225.80625 614.81567   L 223.03056 614.25303   L 220.44242 613.61537   L 217.9668 612.90269   L 215.71624 612.07748   L 213.61572 611.17726   L 211.70274 610.127   L 209.97731 609.03923   L 208.40192 607.87644   L 206.97656 606.60112   L 205.66374 605.28829   L 204.53846 603.90045   L 203.48819 602.43758   L 202.58797 600.97472   L 201.76276 599.47434   L 201.01258 597.93646   L 200.33741 596.36107   L 199.13711 593.21028   L 198.87454 592.38508   L 201.23763 591.59738   L 201.5002 592.34757   L 202.62548 595.38583   L 203.26314 596.84869   L 203.97582 598.27405   L 204.68849 599.66189   L 205.55121 601.01223   L 206.45143 602.28754   L 207.46418 603.56286   L 208.62697 604.72565   L 209.90229 605.85093   L 211.29014 606.9387   L 212.865
 53 607.95146   L 214.62847 608.85168   L 216.54145 609.7144   L 218.67948 610.50209   L 221.00506 611.17726   L 223.55569 611.81492   L 226.21886 612.34005   L 229.06957 612.82767   L 232.03281 613.24027   L 235.14608 613.61537   L 238.37188 613.91544   L 241.71022 614.17801   L 245.12357 614.40306   L 248.61194 614.62812   L 252.17532 614.77816   L 259.41463 615.04072   L 266.80397 615.26578   z  M 197.11161 600.26204   L 199.24964 589.6469   L 207.42668 596.73616   C 207.95181 597.18627 208.02682 597.97397 207.5392 598.4991   C 207.08909 599.02423 206.30139 599.06174 205.77626 598.61163   L 199.21213 592.94772   L 201.27514 592.23504   L 199.54971 600.74966   C 199.43718 601.42483 198.76202 601.87494 198.08685 601.7249   C 197.41168 601.57487 196.96157 600.93721 197.11161 600.26204   z"
+       id="path3175" />
+    <path
+       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 310.91496 593.04149   L 306.28255 588.76543   L 301.70641 584.52687   L 297.28031 580.32582   L 295.12352 578.24406   L 293.04175 576.21855   L 291.01625 574.17429   L 289.08452 572.1863   L 287.22781 570.21706   L 285.46487 568.28532   L 283.7957 566.40986   L 282.23906 564.55314   L 280.81371 562.7527   L 279.50088 560.98976   L 278.33809 559.28308   L 277.28783 557.61392   L 276.36885 556.00101   L 275.58115 554.42562   L 274.86848 552.88774   L 274.26833 551.36861   L 273.76195 549.90575   L 273.34935 548.48039   L 272.97425 547.07379   L 272.69293 545.68594   L 272.26158 543.02278   L 271.98026 540.39713   L 271.9615 540.30335   L 274.45587 540.11581   L 274.45587 540.13456   L 274.73719 542.62893   L 275.13104 545.17957   L 275.41236 546.45489   L 275.73119 547.76771   L 276.12504 549.09929   L 276.61266 550.46839   L 277.15655 551.85623   L 277.79421 553.28159   L 278.54439 554.76321   L 279.42586 556.30109   L 280.4011 557.87648   L 281.52639 559.50814   L 282.
 76419 561.19606   L 284.17079 562.959   L 285.67117 564.75945   L 287.30282 566.61616   L 289.02825 568.51038   L 290.86621 570.44211   L 292.79794 572.41135   L 294.78594 574.4181   L 296.86771 576.46236   L 298.98699 578.52538   L 303.41309 582.70767   L 307.97047 586.92747   L 312.62163 591.20353   z  M 268.34185 547.50515   L 273.01176 537.73396   L 279.21956 546.60492   C 279.61341 547.18632 279.46337 547.95526 278.90073 548.34911   C 278.33809 548.74296 277.55039 548.61167 277.15655 548.04903   L 272.18656 540.92226   L 274.34335 540.75347   L 270.59241 548.57416   C 270.29234 549.21182 269.54215 549.47439 268.92325 549.17431   C 268.30434 548.87424 268.04178 548.12405 268.34185 547.50515   z"
+       id="path3177" />
+    <text
+       xml:space="preserve"
+       x="441.23605"
+       y="616.32234"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3179">integration tests</text>
+    <text
+       xml:space="preserve"
+       x="435.68466"
+       y="634.32683"
+       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text3181">(entire programs)</text>
+  </g>
+</svg>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/fig/slots.svg
----------------------------------------------------------------------
diff --git a/docs/internals/fig/slots.svg b/docs/internals/fig/slots.svg
new file mode 100644
index 0000000..7d5dc2a
--- /dev/null
+++ b/docs/internals/fig/slots.svg
@@ -0,0 +1,505 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="770.84375"
+   height="448.26599"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.5 r10040">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.5"
+     inkscape:cx="200.03973"
+     inkscape:cy="568.73823"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1600"
+     inkscape:window-height="838"
+     inkscape:window-x="1912"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(59.7139,-268.22389)">
+    <g
+       id="g2989"
+       transform="translate(-107.30765,87.786395)">
+      <path
+         id="path2991"
+         d="m 48.855921,209.35841 c 0,-15.26631 12.378084,-27.66315 27.663142,-27.66315 l 147.224177,0 c 15.2663,0 27.66314,12.39684 27.66314,27.66315 l 0,129.08841 c 0,15.28505 -12.39684,27.66314 -27.66314,27.66314 l -147.224177,0 c -15.285058,0 -27.663142,-12.37809 -27.663142,-27.66314 z"
+         style="fill:none;stroke:#85888d;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text2993"
+         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="206.08313"
+         x="57.055454"
+         xml:space="preserve">TaskManager</text>
+      <text
+         id="text2995"
+         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="206.08313"
+         x="170.78378"
+         xml:space="preserve">1</text>
+      <path
+         id="path2997"
+         d="m 70.573832,246.90526 c 0,-7.25806 5.907721,-13.16578 13.16578,-13.16578 l 10.390088,0 c 7.27681,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.390088,0 c -7.258059,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path2999"
+         d="m 70.573832,246.90526 c 0,-7.25806 5.907721,-13.16578 13.16578,-13.16578 l 10.390088,0 c 7.27681,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.390088,0 c -7.258059,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:none;stroke:#00882b;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3001"
+         d="m 128.09441,246.90526 c 0,-7.25806 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3003"
+         d="m 128.09441,246.90526 c 0,-7.25806 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:none;stroke:#00882b;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3005"
+         d="m 185.59624,246.90526 c 0,-7.25806 5.90772,-13.16578 13.18453,-13.16578 l 10.39009,0 c 7.25806,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.90772,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.18453,-5.88896 -13.18453,-13.16578 z"
+         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3007"
+         d="m 185.59624,246.90526 c 0,-7.25806 5.90772,-13.16578 13.18453,-13.16578 l 10.39009,0 c 7.25806,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.90772,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.18453,-5.88896 -13.18453,-13.16578 z"
+         style="fill:none;stroke:#00882b;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3009"
+         d="m 266.09129,209.35841 c 0,-15.26631 12.39684,-27.66315 27.66314,-27.66315 l 147.07414,0 c 15.2663,0 27.66314,12.39684 27.66314,27.66315 l 0,129.08841 c 0,15.28505 -12.39684,27.66314 -27.66314,27.66314 l -147.07414,0 c -15.2663,0 -27.66314,-12.37809 -27.66314,-27.66314 z"
+         style="fill:none;stroke:#85888d;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3011"
+         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="206.08313"
+         x="274.21527"
+         xml:space="preserve">TaskManager</text>
+      <text
+         id="text3013"
+         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="206.08313"
+         x="387.94357"
+         xml:space="preserve">2</text>
+      <path
+         id="path3015"
+         d="m 287.65916,246.96152 c 0,-7.29556 5.92648,-13.22204 13.22205,-13.22204 l 10.44635,0 c 7.29557,0 13.22204,5.92648 13.22204,13.22204 l 0,84.35852 c 0,7.31432 -5.92647,13.22204 -13.22204,13.22204 l -10.44635,0 c -7.29557,0 -13.22205,-5.90772 -13.22205,-13.22204 z"
+         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3017"
+         d="m 287.65916,246.96152 c 0,-7.29556 5.92648,-13.22204 13.22205,-13.22204 l 10.44635,0 c 7.29557,0 13.22204,5.92648 13.22204,13.22204 l 0,84.35852 c 0,7.31432 -5.92647,13.22204 -13.22204,13.22204 l -10.44635,0 c -7.29557,0 -13.22205,-5.90772 -13.22205,-13.22204 z"
+         style="fill:none;stroke:#00882b;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3019"
+         d="m 345.17974,246.90526 c 0,-7.25806 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3021"
+         d="m 345.17974,246.90526 c 0,-7.25806 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:none;stroke:#00882b;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3023"
+         d="m 402.68157,246.90526 c 0,-7.25806 5.90772,-13.16578 13.18453,-13.16578 l 10.39009,0 c 7.25806,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.90772,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.18453,-5.88896 -13.18453,-13.16578 z"
+         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3025"
+         d="m 402.68157,246.90526 c 0,-7.25806 5.90772,-13.16578 13.18453,-13.16578 l 10.39009,0 c 7.25806,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.90772,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.18453,-5.88896 -13.18453,-13.16578 z"
+         style="fill:none;stroke:#00882b;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3027"
+         d="m 178.65701,597.48635 c 7.20179,7.12677 7.20179,18.71716 0,25.84394 -7.2018,7.16428 -18.90471,7.16428 -26.10651,0 -7.20179,-7.12678 -7.20179,-18.71717 0,-25.84394 7.2018,-7.16429 18.90471,-7.16429 26.10651,0"
+         style="fill:#51a7f9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3029"
+         d="m 236.15883,597.48635 c 7.2018,7.12677 7.2018,18.71716 0,25.84394 -7.20179,7.16428 -18.8672,7.16428 -26.06899,0 -7.2018,-7.12678 -7.2018,-18.71717 0,-25.84394 7.20179,-7.16429 18.8672,-7.16429 26.06899,0"
+         style="fill:#f5d328;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3031"
+         d="m 293.54813,597.48635 c 7.16429,7.12677 7.16429,18.71716 0,25.84394 -7.16428,7.16428 -18.79218,7.16428 -25.95647,0 -7.20179,-7.12678 -7.20179,-18.71717 0,-25.84394 7.16429,-7.16429 18.79219,-7.16429 25.95647,0"
+         style="fill:#f39019;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3033"
+         d="m 351.04996,597.48635 c 7.16428,7.12677 7.16428,18.71716 0,25.84394 -7.16429,7.16428 -18.79219,7.16428 -25.95647,0 -7.16429,-7.12678 -7.16429,-18.71717 0,-25.84394 7.16428,-7.16429 18.79218,-7.16429 25.95647,0"
+         style="fill:#ec5d57;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3035"
+         d="m 181.47021,516.03481 c 7.18304,7.14553 7.18304,18.71716 0,25.86269 -7.16429,7.14553 -18.79218,7.14553 -25.95647,0 -7.18304,-7.14553 -7.18304,-18.71716 0,-25.86269 7.16429,-7.12678 18.79218,-7.12678 25.95647,0"
+         style="fill:#51a7f9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3037"
+         d="m 237.09657,516.03481 c 7.20179,7.14553 7.20179,18.71716 0,25.86269 -7.2018,7.14553 -18.88596,7.14553 -26.08775,0 -7.2018,-7.14553 -7.2018,-18.71716 0,-25.86269 7.20179,-7.12678 18.88595,-7.12678 26.08775,0"
+         style="fill:#f5d328;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3039"
+         d="m 292.59164,516.03481 c 7.18304,7.14553 7.18304,18.71716 0,25.86269 -7.16428,7.14553 -18.79218,7.14553 -25.95646,0 -7.18304,-7.14553 -7.18304,-18.71716 0,-25.86269 7.16428,-7.12678 18.79218,-7.12678 25.95646,0"
+         style="fill:#f39019;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3041"
+         d="m 348.23675,516.03481 c 7.16429,7.14553 7.16429,18.71716 0,25.86269 -7.16428,7.14553 -18.79218,7.14553 -25.97522,0 -7.16428,-7.14553 -7.16428,-18.71716 0,-25.86269 7.18304,-7.12678 18.81094,-7.12678 25.97522,0"
+         style="fill:#ec5d57;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3043"
+         d="m 207.38917,434.48949 c 7.20179,7.16429 7.20179,18.79218 0,25.95647 -7.2018,7.18304 -18.8672,7.18304 -26.069,0 -7.20179,-7.16429 -7.20179,-18.79218 0,-25.95647 7.2018,-7.18304 18.8672,-7.18304 26.069,0"
+         style="fill:#51a7f9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3045"
+         d="m 264.77846,434.48949 c 7.16429,7.16429 7.16429,18.79218 0,25.95647 -7.16428,7.18304 -18.79218,7.18304 -25.97522,0 -7.16428,-7.16429 -7.16428,-18.79218 0,-25.95647 7.18304,-7.18304 18.81094,-7.18304 25.97522,0"
+         style="fill:#f5d328;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3047"
+         d="m 322.29904,434.48949 c 7.16429,7.16429 7.16429,18.79218 0,25.95647 -7.18304,7.18304 -18.81093,7.18304 -25.97522,0 -7.16428,-7.16429 -7.16428,-18.79218 0,-25.95647 7.16429,-7.18304 18.79218,-7.18304 25.97522,0"
+         style="fill:#f39019;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3049"
+         d="m 166.84156,610.50209 2.70068,-76.48155 -2.51313,-0.075 -2.66316,76.48155 2.47561,0.075 z m 1.46287,-76.51906 3.63841,2.62565 -3.48837,-7.61439 -4.0135,7.35183 3.86346,-2.36309 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3051"
+         d="m 224.3809,610.50209 0.90022,-76.51906 -2.51312,0 -0.90023,76.48155 2.51313,0.0375 z m -0.37509,-76.51906 3.75093,2.55063 -3.67592,-7.53937 -3.82595,7.42685 3.75094,-2.43811 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3053"
+         d="m 279.40711,610.50209 -0.90023,-76.51906 2.51313,0 0.90022,76.48155 -2.51312,0.0375 z m 0.33758,-76.51906 -3.71342,2.55063 3.67591,-7.53937 3.82596,7.42685 -3.78845,-2.43811 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3055"
+         d="m 336.7964,610.50209 -2.70067,-76.48155 2.51313,-0.075 2.66316,76.48155 -2.47562,0.075 z m -1.42535,-76.51906 -3.67592,2.62565 3.48837,-7.61439 4.0135,7.35183 -3.82595,-2.36309 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3057"
+         d="m 334.09573,529.25685 -24.38107,-76.72536 2.38184,-0.75019 24.38108,76.72536 -2.38185,0.75019 z m -23.19953,-77.10046 -2.8132,3.52588 1.29407,-8.28956 5.85146,6.00149 -4.33233,-1.23781 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3059"
+         d="m 334.39581,529.78198 -79.81989,-78.00068 1.74419,-1.80045 79.81988,78.00068 -1.74418,1.80045 z m -78.93842,-78.9009 -0.84396,4.4261 -2.73818,-7.91447 7.98949,2.55063 -4.40735,0.93774 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3061"
+         d="m 334.62086,529.96953 -136.55277,-78.99468 1.23781,-2.15679 136.57153,78.97593 -1.25657,2.17554 z M 198.687,449.88708 l 0.28132,4.50112 -4.61365,-6.99549 8.38334,0.50637 -4.05101,1.988 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3063"
+         d="m 278.7882,529.78198 -81.67659,-78.03819 1.72543,-1.80045 81.67659,78.03819 -1.72543,1.80045 z m -80.81388,-78.93841 -0.7877,4.44485 -2.83195,-7.89571 8.027,2.47561 -4.40735,0.97525 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3065"
+         d="m 278.48813,529.29436 -26.18152,-76.76287 2.36308,-0.80645 26.18153,76.76287 -2.36309,0.80645 z m -24.99998,-77.17548 -2.73818,3.58215 1.12528,-8.30832 5.96398,5.88896 -4.35108,-1.16279 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3067"
+         d="m 280.86997,529.31312 27.98197,-76.80039 -2.34433,-0.84396 -28.00073,76.78163 2.36309,0.86272 z m 26.81918,-77.23175 2.66317,3.63841 -0.95649,-8.32707 -6.09527,5.75768 4.38859,-1.06902 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3069"
+         d="m 222.88053,529.31312 -27.98198,-76.80039 2.34434,-0.84396 28.00072,76.78163 -2.36308,0.86272 z m -26.81919,-77.23175 -2.66316,3.63841 0.95649,-8.32707 6.09527,5.75768 -4.3886,-1.06902 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3071"
+         d="m 225.24361,529.29436 26.18153,-76.76287 -2.38185,-0.80645 -26.18152,76.76287 2.38184,0.80645 z m 24.99998,-77.17548 2.73818,3.58215 -1.12528,-8.30832 -5.98274,5.88896 4.36984,-1.16279 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3073"
+         d="m 224.92478,529.78198 81.6766,-78.03819 -1.72543,-1.80045 -81.69535,78.03819 1.74418,1.80045 z m 80.81389,-78.93841 0.78769,4.44485 2.83196,-7.89571 -8.027,2.47561 4.40735,0.97525 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3075"
+         d="m 169.03586,529.96953 136.57152,-78.99468 -1.25656,-2.15679 -136.57152,78.97593 1.25656,2.17554 z m 135.95262,-80.08245 -0.30007,4.50112 4.61364,-6.99549 -8.36458,0.50637 4.05101,1.988 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3077"
+         d="m 169.27967,529.78198 79.81989,-78.00068 -1.74419,-1.80045 -79.81988,78.00068 1.74418,1.80045 z m 78.95717,-78.9009 0.82521,4.4261 2.73818,-7.91447 -7.97074,2.55063 4.40735,0.93774 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3079"
+         d="m 169.5985,529.25685 24.38108,-76.72536 -2.38185,-0.75019 -24.38107,76.72536 2.38184,0.75019 z m 23.19953,-77.10046 2.8132,3.52588 -1.31283,-8.28956 -5.8327,6.00149 4.33233,-1.23781 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3081"
+         d="m 252.92551,408.6268 0,-12.20929 -11.53412,0 16.97298,-31.71415 16.95422,31.71415 -11.53412,0 0,12.20929 z"
+         style="fill:none;stroke:#85888d;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3083"
+         d="m 478.80678,363.50306 19.14852,0 0,-20.66765 50.07498,30.40132 -50.07498,30.38257 0,-20.66765 -19.14852,0 z"
+         style="fill:none;stroke:#85888d;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3085"
+         d="m 611.02722,243.43565 c 0,-15.26631 12.37809,-27.64439 27.6819,-27.64439 l 147.03663,0 c 15.30381,0 27.6819,12.37808 27.6819,27.64439 l 0,129.10716 c 0,15.2663 -12.37809,27.64439 -27.6819,27.64439 l -147.03663,0 c -15.30381,0 -27.6819,-12.37809 -27.6819,-27.64439 z"
+         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3087"
+         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="240.15894"
+         x="619.12134"
+         xml:space="preserve">TaskManager</text>
+      <text
+         id="text3089"
+         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="240.15894"
+         x="732.84967"
+         xml:space="preserve">1</text>
+      <path
+         id="path3091"
+         d="m 632.5951,280.9825 c 0,-7.27681 5.88896,-13.16578 13.16578,-13.16578 l 10.39008,0 c 7.27682,0 13.16578,5.88897 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88896,13.16578 -13.16578,13.16578 l -10.39008,0 c -7.27682,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3093"
+         d="m 632.5951,280.9825 c 0,-7.27681 5.88896,-13.16578 13.16578,-13.16578 l 10.39008,0 c 7.27682,0 13.16578,5.88897 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88896,13.16578 -13.16578,13.16578 l -10.39008,0 c -7.27682,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:none;stroke:#00882b;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3095"
+         d="m 690.09692,280.9825 c 0,-7.27681 5.92648,-13.16578 13.20329,-13.16578 l 10.39009,0 c 7.2393,0 13.16578,5.88897 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.92648,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.20329,-5.88896 -13.20329,-13.16578 z"
+         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3097"
+         d="m 690.09692,280.9825 c 0,-7.27681 5.92648,-13.16578 13.20329,-13.16578 l 10.39009,0 c 7.2393,0 13.16578,5.88897 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.92648,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.20329,-5.88896 -13.20329,-13.16578 z"
+         style="fill:none;stroke:#00882b;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3099"
+         d="m 747.63625,280.9825 c 0,-7.27681 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27682,0 13.16578,5.88897 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88896,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3101"
+         d="m 747.63625,280.9825 c 0,-7.27681 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27682,0 13.16578,5.88897 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88896,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:none;stroke:#00882b;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3103"
+         d="m 614.62812,464.4407 c 0,-15.30381 12.37808,-27.68189 27.64439,-27.68189 l 147.22417,0 c 15.30382,0 27.6819,12.37808 27.6819,27.68189 l 0,129.06966 c 0,15.30381 -12.37808,27.68189 -27.6819,27.68189 l -147.22417,0 c -15.26631,0 -27.64439,-12.37808 -27.64439,-27.68189 z"
+         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3105"
+         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="461.10257"
+         x="622.8421"
+         xml:space="preserve">TaskManager</text>
+      <text
+         id="text3107"
+         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="461.10257"
+         x="736.57043"
+         xml:space="preserve">2</text>
+      <path
+         id="path3109"
+         d="m 636.34603,501.98756 c 0,-7.27682 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.88896 13.16578,13.16578 l 0,84.321 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3111"
+         d="m 636.34603,501.98756 c 0,-7.27682 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.88896 13.16578,13.16578 l 0,84.321 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:none;stroke:#00882b;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3113"
+         d="m 693.84785,501.98756 c 0,-7.27682 5.92648,-13.16578 13.20329,-13.16578 l 10.39009,0 c 7.23931,0 13.16578,5.88896 13.16578,13.16578 l 0,84.321 c 0,7.27682 -5.92647,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.20329,-5.88896 -13.20329,-13.16578 z"
+         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3115"
+         d="m 693.84785,501.98756 c 0,-7.27682 5.92648,-13.16578 13.20329,-13.16578 l 10.39009,0 c 7.23931,0 13.16578,5.88896 13.16578,13.16578 l 0,84.321 c 0,7.27682 -5.92647,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.20329,-5.88896 -13.20329,-13.16578 z"
+         style="fill:none;stroke:#00882b;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3117"
+         d="m 751.38719,501.98756 c 0,-7.27682 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.88896 13.16578,13.16578 l 0,84.321 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3119"
+         d="m 751.38719,501.98756 c 0,-7.27682 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.88896 13.16578,13.16578 l 0,84.321 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
+         style="fill:none;stroke:#00882b;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3121"
+         d="m 657.20123,356.52632 c 3.45085,3.45086 3.45085,9.03975 0,12.49061 -3.48837,3.45086 -9.15228,3.45086 -12.60314,0 -3.48837,-3.45086 -3.48837,-9.03975 0,-12.49061 3.45086,-3.45086 9.11477,-3.45086 12.60314,0"
+         style="fill:#51a7f9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3123"
+         d="m 657.46379,316.99147 c 3.52588,3.45086 3.52588,9.03975 0,12.49061 -3.48837,3.45086 -9.18979,3.45086 -12.71567,0 -3.48837,-3.45086 -3.48837,-9.03975 0,-12.49061 3.52588,-3.45086 9.2273,-3.45086 12.71567,0"
+         style="fill:#51a7f9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3125"
+         d="m 657.46379,277.45662 c 3.52588,3.45086 3.52588,9.03975 0,12.4531 -3.48837,3.45086 -9.18979,3.45086 -12.71567,0 -3.48837,-3.41335 -3.48837,-9.00224 0,-12.4531 3.52588,-3.45086 9.2273,-3.45086 12.71567,0"
+         style="fill:#51a7f9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3127"
+         d="m 652.13746,362.67785 0.18755,-34.50859 -2.47562,-0.0375 -0.22505,34.5461 2.51312,0 z m -1.05026,-34.5461 3.75094,2.55063 -3.71343,-7.53938 -3.78844,7.50187 3.75093,-2.51312 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3129"
+         d="m 649.77438,323.29304 0,-34.54611 2.51312,0 0,34.54611 -2.51312,0 z m 1.27531,-34.54611 -3.75093,2.51313 3.75093,-7.50187 3.75094,7.50187 -3.75094,-2.51313 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3131"
+         d="m 714.70305,356.52632 c 3.48837,3.45086 3.48837,9.03975 0,12.49061 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.48837,-3.45086 -3.48837,-9.03975 0,-12.49061 3.48837,-3.45086 9.11477,-3.45086 12.60314,0"
+         style="fill:#f5d328;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3133"
+         d="m 714.85309,316.99147 c 3.48837,3.45086 3.48837,9.03975 0,12.49061 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.48837,-3.45086 -3.48837,-9.03975 0,-12.49061 3.48837,-3.45086 9.11477,-3.45086 12.60314,0"
+         style="fill:#f5d328;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3135"
+         d="m 714.85309,277.45662 c 3.48837,3.45086 3.48837,9.03975 0,12.4531 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.48837,-3.41335 -3.48837,-9.00224 0,-12.4531 3.48837,-3.45086 9.11477,-3.45086 12.60314,0"
+         style="fill:#f5d328;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3137"
+         d="m 709.63929,362.67785 0.22506,-34.50859 -2.51313,-0.0375 -0.18755,34.5461 2.47562,0 z m -1.05026,-34.5461 3.75093,2.55063 -3.71342,-7.53938 -3.78845,7.50187 3.75094,-2.51312 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3139"
+         d="m 709.78933,323.29304 0,-34.54611 -2.47562,0 0,34.54611 2.47562,0 z m -1.23781,-34.54611 3.75093,2.51313 -3.75093,-7.50187 -3.75094,7.50187 3.75094,-2.51313 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3141"
+         d="m 660.95216,577.38134 c 3.45086,3.48837 3.45086,9.11477 0,12.60314 -3.48837,3.48837 -9.15228,3.48837 -12.60314,0 -3.48837,-3.48837 -3.48837,-9.11477 0,-12.60314 3.45086,-3.48837 9.11477,-3.48837 12.60314,0"
+         style="fill:#ec5d57;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3143"
+         d="m 661.1022,537.84649 c 3.45086,3.48837 3.45086,9.11477 0,12.60314 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.48837,-3.48837 -3.48837,-9.11477 0,-12.60314 3.48837,-3.48837 9.11477,-3.48837 12.60314,0"
+         style="fill:#ec5d57;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3145"
+         d="m 655.8884,583.68291 0.18754,-34.54611 -2.47561,0 -0.22506,34.5086 2.51313,0.0375 z m -1.05026,-34.54611 3.75093,2.51313 -3.71342,-7.50187 -3.78845,7.46436 3.75094,-2.47562 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3147"
+         d="m 717.66629,577.34383 c 3.48837,3.45086 3.48837,9.03975 0,12.49061 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.48837,-3.45086 -3.48837,-9.03975 0,-12.49061 3.48837,-3.45086 9.11477,-3.45086 12.60314,0"
+         style="fill:#f39019;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3149"
+         d="m 717.81633,537.80898 c 3.48837,3.45086 3.48837,9.03975 0,12.49061 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.45086,-3.45086 -3.45086,-9.03975 0,-12.49061 3.48837,-3.45086 9.11477,-3.45086 12.60314,0"
+         style="fill:#f39019;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3151"
+         d="m 717.81633,498.27413 c 3.48837,3.45086 3.48837,9.03975 0,12.49061 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.45086,-3.45086 -3.45086,-9.03975 0,-12.49061 3.48837,-3.45086 9.11477,-3.45086 12.60314,0"
+         style="fill:#f39019;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3153"
+         d="m 712.60253,583.68291 0.22505,-34.54611 -2.51312,0 -0.18755,34.5086 2.47562,0.0375 z m -1.05026,-34.54611 3.75093,2.51313 -3.71343,-7.50187 -3.78844,7.46436 3.75094,-2.47562 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3155"
+         d="m 712.79007,544.11055 0,-34.5086 -2.51312,0 0,34.5086 2.51312,0 z m -1.27531,-34.5086 3.75093,2.51313 -3.75093,-7.50187 -3.75094,7.50187 3.75094,-2.51313 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>


[02/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/spargel_guide.md
----------------------------------------------------------------------
diff --git a/docs/spargel_guide.md b/docs/spargel_guide.md
deleted file mode 100644
index da362b1..0000000
--- a/docs/spargel_guide.md
+++ /dev/null
@@ -1,131 +0,0 @@
----
-title: "Spargel Graph Processing API"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-Spargel is our [Giraph](http://giraph.apache.org) like **graph processing** Java API. It supports basic graph computations, which are run as a sequence of [supersteps](iterations.html#supersteps). Spargel and Giraph both implement the [Bulk Synchronous Parallel (BSP)](https://en.wikipedia.org/wiki/Bulk_Synchronous_Parallel) programming model, propsed by Google's [Pregel](http://googleresearch.blogspot.de/2009/06/large-scale-graph-computing-at-google.html).
-
-The API provides a **vertex-centric** view on graph processing with two basic operations per superstep:
-
-  1. **Send messages** to other vertices, and
-  2. **Receive messages** from other vertices and **update own vertex state**.
-
-This vertex-centric view makes it easy to express a large class of graph problems efficiently. We will list all *relevant interfaces* of the **Spargel API** to implement and walk through an **example Spargel program**.
-
-Spargel API
------------
-
-The Spargel API is part of the *addons* Maven project. All relevant classes are located in the *org.apache.flink.spargel.java* package.
-
-Add the following dependency to your `pom.xml` to use the Spargel.
-
-~~~xml
-<dependency>
-	<groupId>org.apache.flink</groupId>
-	<artifactId>flink-spargel</artifactId>
-	<version>{{site.FLINK_VERSION_SHORT}}</version>
-</dependency>
-~~~
-
-Extend **VertexUpdateFunction&lt;***VertexKeyType*, *VertexValueType*, *MessageType***&gt;** to implement your *custom vertex update logic*.
-
-Extend **MessagingFunction&lt;***VertexKeyType*, *VertexValueType*, *MessageType*, *EdgeValueType***&gt;** to implement your *custom message logic*.
-
-Create a **SpargelIteration** operator to include Spargel in your data flow.
-
-Example: Propagate Minimum Vertex ID in Graph
----------------------------------------------
-
-The Spargel operator **SpargelIteration** includes Spargel graph processing into your data flow. As usual, it can be combined with other operators like *map*, *reduce*, *join*, etc.
-
-~~~java
-FileDataSource vertices = new FileDataSource(...);
-FileDataSource edges = new FileDataSource(...);
-
-SpargelIteration iteration = new SpargelIteration(new MinMessager(), new MinNeighborUpdater());
-iteration.setVertexInput(vertices);
-iteration.setEdgesInput(edges);
-iteration.setNumberOfIterations(maxIterations);
-
-FileDataSink result = new FileDataSink(...);
-result.setInput(iteration.getOutput());
-
-new Plan(result);
-~~~
-
-Besides the **program logic** of vertex updates in *MinNeighborUpdater* and messages in *MinMessager*, you have to specify the **initial vertex** and **edge input**. Every vertex has a **key** and **value**. In each superstep, it **receives messages** from other vertices and updates its state:
-
-  - **Vertex** input: **(id**: *VertexKeyType*, **value**: *VertexValueType***)**
-  - **Edge** input: **(source**: *VertexKeyType*, **target**: *VertexKeyType*[, **value**: *EdgeValueType*])
-
-For our example, we set the vertex ID as both *id and value* (initial minimum) and *leave out the edge values* as we don't need them:
-
-<p class="text-center">
-    <img alt="Spargel Example Input" width="75%" src="img/spargel_example_input.png" />
-</p>
-
-In order to **propagate the minimum vertex ID**, we iterate over all received messages (which contain the neighboring IDs) and update our value, if we found a new minimum:
-
-~~~java
-public class MinNeighborUpdater extends VertexUpdateFunction<IntValue, IntValue, IntValue> {
-	
-	@Override
-	public void updateVertex(IntValue id, IntValue currentMin, Iterator<IntValue> messages) {
-		int min = Integer.MAX_VALUE;
-
-		// iterate over all received messages
-		while (messages.hasNext()) {
-			int next = messages.next().getValue();
-			min = next < min ? next : min;
-		}
-
-		// update vertex value, if new minimum
-		if (min < currentMin.getValue()) {
-			setNewVertexValue(new IntValue(min));
-		}
-	}
-}
-~~~
-
-The **messages in each superstep** consist of the **current minimum ID** seen by the vertex:
-
-~~~java
-public class MinMessager extends MessagingFunction<IntValue, IntValue, IntValue, NullValue> {
-	
-	@Override
-	public void sendMessages(IntValue id, IntValue currentMin) {
-		// send current minimum to neighbors
-		sendMessageToAllNeighbors(currentMin);
-    }
-}
-~~~
-
-The **API-provided method** `sendMessageToAllNeighbors(MessageType)` sends the message to all neighboring vertices. It is also possible to address specific vertices with `sendMessageTo(VertexKeyType, MessageType)`.
-
-If the value of a vertex does not change during a superstep, it will **not send** any messages in the superstep. This allows to do incremental updates to the **hot (changing) parts** of the graph, while leaving **cold (steady) parts** untouched.
-
-The computation **terminates** after a specified *maximum number of supersteps* **-OR-** the *vertex states stop changing*.
-
-<p class="text-center">
-    <img alt="Spargel Example" width="75%" src="img/spargel_example.png" />
-</p>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/streaming_guide.md
----------------------------------------------------------------------
diff --git a/docs/streaming_guide.md b/docs/streaming_guide.md
deleted file mode 100644
index 47b4509..0000000
--- a/docs/streaming_guide.md
+++ /dev/null
@@ -1,1711 +0,0 @@
----
-title: "Flink Stream Processing API"
-is_beta: true
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-<a href="#top"></a>
-
-Introduction
-------------
-
-
-Flink Streaming is a system for high-throughput, low-latency data stream processing. The system can connect to and process data streams from different data sources like file sources, web sockets, message queues(Apache Kafka, RabbitMQ, Apache Flume, Twitter…) and also from any user defined data source using a very simple interface. Data streams can be transformed and modified to create new data streams using high-level functions similar to the ones provided by the batch processing API. Flink Streaming natively supports flexible, data-driven windowing semantics and iterative stream processing. The processed data can be pushed to different output types.
-
-Flink Streaming API
------------
-
-The Streaming API is currently part of the *flink-staging* Maven project. All relevant classes are located in the *org.apache.flink.streaming* package.
-
-Add the following dependency to your `pom.xml` to use the Flink Streaming.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight xml %}
-<dependency>
-  <groupId>org.apache.flink</groupId>
-  <artifactId>flink-streaming-core</artifactId>
-  <version>{{site.FLINK_VERSION_SHORT }}</version>
-</dependency>
-<dependency>
-  <groupId>org.apache.flink</groupId>
-  <artifactId>flink-clients</artifactId>
-  <version>{{site.FLINK_VERSION_SHORT }}</version>
-</dependency>
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight xml %}
-<dependency>
-  <groupId>org.apache.flink</groupId>
-  <artifactId>flink-streaming-scala</artifactId>
-  <version>{{site.FLINK_VERSION_SHORT }}</version>
-</dependency>
-<dependency>
-  <groupId>org.apache.flink</groupId>
-  <artifactId>flink-clients</artifactId>
-  <version>{{site.FLINK_VERSION_SHORT }}</version>
-</dependency>
-{% endhighlight %}
-</div>
-</div>
-
-In order to create your own Flink Streaming program we encourage you to start with the [skeleton](#program-skeleton) and gradually add your own [transformations](#transformations). The remaining sections act as references for additional transformations and advanced features.
-
-
-Example Program
----------------
-
-The following program is a complete, working example of streaming WordCount that incrementally counts the words coming from a web socket. You can copy &amp; paste the code to run it locally.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-{% highlight java %}
-public class StreamingWordCount {
-
-    public static void main(String[] args) {
-
-        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
-        
-        DataStream<Tuple2<String, Integer>> dataStream = env
-                .socketTextStream("localhost", 9999)
-                .flatMap(new Splitter())
-                .groupBy(0)
-                .sum(1);
-        
-        dataStream.print();
-        
-        env.execute("Socket Stream WordCount");
-    }
-    
-    public static class Splitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
-        @Override
-        public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) throws Exception {
-            for (String word: sentence.split(" ")) {
-                out.collect(new Tuple2<String, Integer>(word, 1));
-            }
-        }
-    }
-    
-}
-{% endhighlight %}
-
-</div>
-
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-
-object WordCount {
-  def main(args: Array[String]) {
-
-    val env = StreamExecutionEnvironment.getExecutionEnvironment
-    val text = env.socketTextStream("localhost", 9999)
-
-    val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
-      .map { (_, 1) }
-      .groupBy(0)
-      .sum(1)
-
-    counts.print
-
-    env.execute("Scala Socket Stream WordCount")
-  }
-}
-{% endhighlight %}
-</div>
-
-</div>
-
-To run the example program start the input stream with netcat first from a terminal:
-
-~~~bash
-nc -lk 9999
-~~~
-
-The lines typed to this terminal will be the source data stream for your streaming job.
-
-[Back to top](#top)
-
-Program Skeleton
-----------------
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-As presented in the [example](#example-program) a Flink Streaming program looks almost identical to a regular Flink program. Each stream processing program consists of the following parts:
-
-1. Obtaining a `StreamExecutionEnvironment`,
-2. Connecting to data stream sources,
-3. Specifying transformations on the data streams,
-4. Specifying output for the processed data,
-5. Executing the program.
-
-As these steps are basically the same as in the batch API we will only note the important differences.
-For stream processing jobs, the user needs to obtain a `StreamExecutionEnvironment` in contrast with the [batch API](programming_guide.html#program-skeleton) where one would need an `ExecutionEnvironment`. The process otherwise is essentially the same:
-
-{% highlight java %}
-StreamExecutionEnvironment.getExecutionEnvironment();
-StreamExecutionEnvironment.createLocalEnvironment(parallelism);
-StreamExecutionEnvironment.createRemoteEnvironment(String host, int port, int parallelism, String... jarFiles);
-{% endhighlight %}
-
-For connecting to data streams the `StreamExecutionEnvironment` has many different methods, from basic file sources to completely general user defined data sources. We will go into details in the [basics](#basics) section.
-
-For example:
-
-{% highlight java %}
-env.socketTextStream(host, port);
-env.fromElements(elements…);
-env.addSource(sourceFunction)
-{% endhighlight %}
-
-After defining the data stream sources the user can specify transformations on the data streams to create a new data stream. Different data streams can be also combined together for joint transformations which are being showcased in the [transformations](#transformations) section.
-
-For example:
-
-{% highlight java %}
-dataStream.map(mapFunction).reduce(reduceFunction);
-{% endhighlight %}
-
-The processed data can be pushed to different outputs called sinks. The user can define their own sinks or use any predefined filesystem, message queue or database sink.
-
-For example:
-
-{% highlight java %}
-dataStream.writeAsCsv(path);
-dataStream.print();
-dataStream.addSink(sinkFunction)
-{% endhighlight %}
-
-Once the complete program is specified `execute(programName)` is to be called on the `StreamExecutionEnvironment`. This will either execute on the local machine or submit the program for execution on a cluster, depending on the chosen execution environment.
-
-{% highlight java %}
-env.execute(programName);
-{% endhighlight %}
-
-</div>
-
-<div data-lang="scala" markdown="1">
-
-As presented in the [example](#example-program) a Flink Streaming program looks almost identical to a regular Flink program. Each stream processing program consists of the following parts:
-
-1. Obtaining a `StreamExecutionEnvironment`,
-2. Connecting to data stream sources,
-3. Specifying transformations on the data streams,
-4. Specifying output for the processed data,
-5. Executing the program.
-
-As these steps are basically the same as in the batch API we will only note the important differences.
-For stream processing jobs, the user needs to obtain a `StreamExecutionEnvironment` in contrast with the [batch API](programming_guide.html#program-skeleton) where one would need an `ExecutionEnvironment`. The process otherwise is essentially the same:
-
-{% highlight scala %}
-StreamExecutionEnvironment.getExecutionEnvironment
-StreamExecutionEnvironment.createLocalEnvironment(parallelism)
-StreamExecutionEnvironment.createRemoteEnvironment(host: String, port: String, parallelism: Int, jarFiles: String*)
-{% endhighlight %}
-
-For connecting to data streams the `StreamExecutionEnvironment` has many different methods, from basic file sources to completely general user defined data sources. We will go into details in the [basics](#basics) section.
-
-For example:
-
-{% highlight scala %}
-env.socketTextStream(host, port)
-env.fromElements(elements…)
-env.addSource(sourceFunction)
-{% endhighlight %}
-
-After defining the data stream sources the user can specify transformations on the data streams to create a new data stream. Different data streams can be also combined together for joint transformations which are being showcased in the [transformations](#transformations) section.
-
-For example:
-
-{% highlight scala %}
-dataStream.map(mapFunction).reduce(reduceFunction)
-{% endhighlight %}
-
-The processed data can be pushed to different outputs called sinks. The user can define their own sinks or use any predefined filesystem, message queue or database sink.
-
-For example:
-
-{% highlight scala %}
-dataStream.writeAsCsv(path)
-dataStream.print
-dataStream.addSink(sinkFunction)
-{% endhighlight %}
-
-Once the complete program is specified `execute(programName)` is to be called on the `StreamExecutionEnvironment`. This will either execute on the local machine or submit the program for execution on a cluster, depending on the chosen execution environment.
-
-{% highlight scala %}
-env.execute(programName)
-{% endhighlight %}
-
-</div>
-
-</div>
-
-[Back to top](#top)
-
-Basics
-----------------
-
-### DataStream
-
-The `DataStream` is the basic data abstraction provided by the Flink Streaming. It represents a continuous, parallel, immutable stream of data of a certain type. By applying transformations the user can create new data streams or output the results of the computations. For instance the map transformation creates a new `DataStream` by applying a user defined function on each element of a given `DataStream`
-
-The transformations may return different data stream types allowing more elaborate transformations, for example the `groupBy(…)` method returns a `GroupedDataStream` which can be used for grouped transformations such as aggregating by key. We will discover more elaborate data stream types in the upcoming sections.
-
-### Partitioning
-
-Partitioning controls how individual data points of a stream are distributed among the parallel instances of the transformation operators. This also controls the ordering of the records in the `DataStream`. There is partial ordering guarantee for the outputs with respect to the partitioning scheme (outputs produced from each partition are guaranteed to arrive in the order they were produced).
-
-There are several partitioning types supported in Flink Streaming:
-
- * *Forward(default)*: Forward partitioning directs the output data to the next operator on the same machine (if possible) avoiding expensive network I/O. If there are more processing nodes than inputs or vice verse the load is distributed among the extra nodes in a round-robin fashion. This is the default partitioner.
-Usage: `dataStream.forward()`
- * *Shuffle*: Shuffle partitioning randomly partitions the output data stream to the next operator using uniform distribution. Use this only when it is important that the partitioning is randomised. If you only care about an even load use *Distribute*
-Usage: `dataStream.shuffle()`
- * *Distribute*: Distribute partitioning directs the output data stream to the next operator in a round-robin fashion, achieving a balanced distribution.
-Usage: `dataStream.distribute()`
- * *Field/Key*: Field/Key partitioning partitions the output data stream based on the hash code of a selected key of the tuples. Data points with the same key are directed to the same operator instance. 
-Usage: `dataStream.groupBy(fields…)`
- * *Broadcast*: Broadcast partitioning sends the output data stream to all parallel instances of the next operator.
-Usage: `dataStream.broadcast()`
- * *Global*: All data points are directed to the first instance of the operator. 
-Usage: `dataStream.global()`
-
-By default *Forward* partitioning is used. 
-
-Partitioning does not remain in effect after a transformation, so it needs to be set again for subsequent operations.
-
-### Connecting to the outside world
-
-The user is expected to connect to the outside world through the source and the sink interfaces. 
-
-#### Sources
-
-The user can create(connect to) data streams by the different implementations of `SourceFunction` interface using `StreamExecutionEnvironment.addSource(sourceFunction)`. By default, sources run with parallelism of 1.
-
-To create parallel sources the users source function needs to implement `ParallelSourceFunction` or extend `RichParallelSourceFunction` in which cases the source will have the parallelism of the environment. The parallelism for ParallelSourceFunctions can be changed afterwards using `source.setParallelism(parallelism)`.
-
-The `SourceFunction` interface contains only two methods: `run(Collector<T> out)` and `cancel()`.
-The `run` method will be called only once when the program starts, and should encapsulate the logic for generating the `DataStream`. Any object collected to the collector will be part of the `DataStream`. The `cancel` method will be called whenever the topology has failed for some reason.
-
-In addition to the static data sources (with similar method signatures as the [batch API](programming_guide.html#data-sources)) there are several predefined stream sources accessible from the `StreamExecutionEnvironment`:
-
-* *Socket text stream*: Creates a new `DataStream` that contains the strings received infinitely from the given socket. Strings are decoded by the system's default character set. The user can optionally set the delimiters or the number of connection retries in case of errors.
-Usage: `env.socketTextStream(hostname, port,…)`
-* *Text file stream*: Creates a new `DataStream` that contains the lines of the files created (or modified) in a given directory. The system continuously monitors the given path, and processes any new files or modifications based on the settings. The file will be read with the system's default character set.
-Usage: `env.readFileStream(String path, long checkFrequencyMillis, WatchType watchType)`
-* *Message queue connectors*: There are pre-implemented connectors for a number of the most popular message queue services, please refer to the section on [connectors](#stream-connectors) for more detail.
-* *Custom source*: Creates a new `DataStream` by using a user defined `SourceFunction` implementation.
-Usage: `env.addSource(sourceFunction)`
-
-#### Sinks
-
-`DataStreamSink` represents the different outputs of Flink Streaming programs. The user can either define his own `SinkFunction` implementation or chose one of the available implementations (methods of `DataStream`).
-
-For example:
-
- * `dataStream.print()` – Writes the `DataStream` to the standard output, practical for testing purposes
- * `dataStream.writeAsText(parameters)` – Writes the `DataStream` to a text file
- * `dataStream.writeAsCsv(parameters)` – Writes the `DataStream` to CSV format
- * `dataStream.addSink(sinkFunction)` – Custom sink implementation
-
-There are pre-implemented connectors for a number of the most popular message queue services, please refer to the section on [connectors](#stream-connectors) for more detail.
-
-[Back to top](#top)
-
-Transformations
-----------------
-
-Transformations, also called operators, represent the users' business logic on the data stream. Operators consume data streams and produce new data streams. The user can chain and combine multiple operators on the data stream to produce the desired processing steps. Most of the operators work very similar to the batch Flink API allowing developers to reason about `DataStream` the same way as they would about `DataSet`. At the same time there are operators that exploit the streaming nature of the data to allow advanced functionality.
-
-### Basic transformations
-
-Basic transformations can be seen as functions that operate on records of the data stream.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-<br />
-
-<table class="table table-bordered">
-  <thead>
-    <tr>
-      <th class="text-left" style="width: 20%">Transformation</th>
-      <th class="text-center">Description</th>
-    </tr>
-  </thead>
-
-  <tbody>
-    <tr>
-      <td><strong>Map</strong></td>
-      <td>
-        <p>Takes one element and produces one element. A map that doubles the values of the input stream:</p>
-{% highlight java %}
-dataStream.map(new MapFunction<Integer, Integer>() {
-            @Override
-            public Integer map(Integer value) throws Exception {
-                return 2 * value;
-            }
-        });
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>FlatMap</strong></td>
-      <td>
-        <p>Takes one element and produces zero, one, or more elements. A flatmap that splits sentences to words:</p>
-{% highlight java %}
-dataStream.flatMap(new FlatMapFunction<String, String>() {
-            @Override
-            public void flatMap(String value, Collector<String> out) 
-                throws Exception {
-                for(String word: value.split(" ")){
-                    out.collect(word);
-                }
-            }
-        });
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Filter</strong></td>
-      <td>
-        <p>Evaluates a boolean function for each element and retains those for which the function returns true.
-	<br/>
-	<br/>
-        A filter that filters out zero values:
-        </p>
-{% highlight java %}
-dataStream.filter(new FilterFunction<Integer>() { 
-            @Override
-            public boolean filter(Integer value) throws Exception {
-                return value != 0;
-            }
-        });
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Reduce</strong></td>
-      <td>
-        <p>Combines a stream of elements into another stream by repeatedly combining two elements
-        into one and emits the current state after every reduction. Reduce may be applied on a full, windowed or grouped data stream.
-        <br/>
-        
-        <strong>IMPORTANT:</strong> The streaming and the batch reduce functions have different semantics. A streaming reduce on a data stream emits the current reduced value for every new element on a data stream. On a windowed data stream it works as a batch reduce: it produces at most one value per window.
-        <br/>
-	<br/>
-         A reducer that sums up the incoming stream, the result is a stream of intermediate sums:</p>
-{% highlight java %}
-dataStream.reduce(new ReduceFunction<Integer>() {
-            @Override
-            public Integer reduce(Integer value1, Integer value2) 
-            throws Exception {
-                return value1 + value2;
-            }
-        });
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Merge</strong></td>
-      <td>
-        <p>Merges two or more data streams creating a new stream containing all the elements from all the streams.</p>
-{% highlight java %}
-dataStream.merge(otherStream1, otherStream2, …)
-{% endhighlight %}
-      </td>
-    </tr>
-  </tbody>
-</table>
-
-----------
-
-The following transformations are available on data streams of Tuples:
-
-<table class="table table-bordered">
-  <thead>
-    <tr>
-      <th class="text-left" style="width: 20%">Transformation</th>
-      <th class="text-center">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-   <tr>
-      <td><strong>Project</strong></td>
-      <td>
-        <p>Selects a subset of fields from the tuples</p>
-{% highlight java %}
-DataStream<Tuple3<Integer, Double, String>> in = // [...]
-DataStream<Tuple2<String, Integer>> out = in.project(2,0);
-{% endhighlight %}
-      </td>
-    </tr>
-  </tbody>
-</table>
-
-</div>
-
-<div data-lang="scala" markdown="1">
-
-<br />
-
-
-
-<table class="table table-bordered">
-  <thead>
-    <tr>
-      <th class="text-left" style="width: 20%">Transformation</th>
-      <th class="text-center">Description</th>
-    </tr>
-  </thead>
-
-  <tbody>
-
-    <tr>
-      <td><strong>Map</strong></td>
-      <td>
-        <p>Takes one element and produces one element. A map that doubles the values of the input stream:</p>
-{% highlight scala %}
-dataStream.map{ x => x * 2 }
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>FlatMap</strong></td>
-      <td>
-        <p>Takes one element and produces zero, one, or more elements. A flatmap that splits sentences to words:</p>
-{% highlight scala %}
-data.flatMap { str => str.split(" ") }
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Filter</strong></td>
-      <td>
-        <p>Evaluates a boolean function for each element and retains those for which the function returns true.
-       	<br/>
-	<br/>
-        A filter that filters out zero values:
-        </p>
-{% highlight scala %}
-dataStream.filter{ _ != 0 }
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Reduce</strong></td>
-        <td>
-        <p>Combines a group of elements into a single element by repeatedly combining two elements
-        into one and emits the current state after every reduction. Reduce may be applied on a full, windowed or grouped data stream.
-        <br/>
-        
-        <strong>IMPORTANT:</strong> The streaming and the batch reduce functions have different semantics. A streaming reduce on a data stream emits the current reduced value for every new element on a data stream. On a windowed data stream it works as a batch reduce: it produces at most one value per window.
-        <br/>
-	<br/>
-         A reducer that sums up the incoming stream, the result is a stream of intermediate sums:</p>
-{% highlight scala %}
-dataStream.reduce{ _ + _ }
-{% endhighlight %}
-      </td>
-    </tr>
-
-    <tr>
-      <td><strong>Merge</strong></td>
-      <td>
-        <p>Merges two or more data streams creating a new stream containing all the elements from all the streams.</p>
-{% highlight scala %}
-dataStream.merge(otherStream1, otherStream2, …)
-{% endhighlight %}
-      </td>
-    </tr>
-
-  </tbody>
-
-
-</table>
-
-</div>
-
-</div>
-
-### Grouped operators
-
-Some transformations require that the elements of a `DataStream` are grouped on some key. The user can create a `GroupedDataStream` by calling the `groupBy(key)` method of a non-grouped `DataStream`. 
-Keys can be of three types: fields positions (applicable for tuple/array types), field expressions (applicable for pojo types), KeySelector instances. 
-
-Aggregation or reduce operators called on `GroupedDataStream`s produce elements on a per group basis.
-
-### Aggregations
-
-The Flink Streaming API supports different types of pre-defined aggregations `DataStreams`. The common property of these operators, just like reduce on streams, they produce the stream of intermediate aggregate values.
-
-Types of aggregations: `sum(field)`, `min(field)`, `max(field)`, `minBy(field, first)`, `maxBy(field, first)`.
-
-With `sum`, `min`, and `max` for every incoming tuple the selected field is replaced with the current aggregated value. Fields can be selected using either field positions or field expressions (similarly to grouping).
-
-With `minBy` and `maxBy` the output of the operator is the element with the current minimal or maximal value at the given field. If more components share the minimum or maximum value, the user can decide if the operator should return the first or last element. This can be set by the `first` boolean parameter.
-
-There is also an option to apply user defined aggregations with the usage of the `aggregate(…)` function of the data stream.
-
-### Window operators
-
-Flink streaming provides very flexible data-driven windowing semantics to create arbitrary windows (also referred to as discretizations or slices) of the data streams and apply reduce, map or aggregation transformations on the windows acquired. Windowing can be used for instance to create rolling aggregations of the most recent N elements, where N could be defined by Time, Count or any arbitrary user defined measure. 
-
-The user can control the size (eviction) of the windows and the frequency of transformation or aggregation calls (trigger) on them in an intuitive API. We will describe the exact semantics of these operators in the [policy based windowing](#policy-based-windowing) section.
-
-Some examples:
-
- * `dataStream.window(eviction).every(trigger).reduceWindow(…)`
- * `dataStream.window(…).every(…).mapWindow(…).flatten()`
- * `dataStream.window(…).every(…).groupBy(…).aggregate(…).getDiscretizedStream()`
-
-The core abstraction of the Windowing semantics is the `WindowedDataStream` and the `StreamWindow`. The `WindowedDataStream` is created when we first call the `window(…)` method of the DataStream and represents the windowed discretisation of the underlying stream. The user can think about it simply as a `DataStream<StreamWindow<T>>` where additional API functions are supplied to provide efficient transformations of individual windows. 
-
-Please note at this point that the `.every(…)` call belongs together with the preceding `.window(…)` call and does not define a new transformation in itself.
-
-The result of a window transformation is again a `WindowedDataStream` which can also be used to further apply other windowed computations. In this sense, window transformations define mapping from stream windows to stream windows.
-
-The user has different ways of using the a result of a window operation:
-
- * `windowedDataStream.flatten()` - streams the results element wise and returns a `DataStream<T>` where T is the type of the underlying windowed stream
- * `windowedDataStream.getDiscretizedStream()` - returns a `DataStream<StreamWindow<T>>` for applying some advanced logic on the stream windows itself, be careful here as at this point we need to materialise the full windows
- * Calling any window transformation further transforms the windows, while preserving the windowing logic
-
-The next example would create windows that hold elements of the last 5 seconds, and the user defined transformation would be executed on the windows every second (sliding the window by 1 second):
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-dataStream.window(Time.of(5, TimeUnit.SECONDS)).every(Time.of(1, TimeUnit.SECONDS));
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-dataStream.window(Time.of(5, TimeUnit.SECONDS)).every(Time.of(1, TimeUnit.SECONDS))
-{% endhighlight %}
-</div>
-</div>
-
-This approach is often referred to as policy based windowing. Different policies (count, time, etc.) can be mixed as well, for example to downsample our stream, a window that takes the latest 100 elements of the stream every minute is created as follows:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-dataStream.window(Count.of(100)).every(Time.of(1, TimeUnit.MINUTES));
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-dataStream.window(Count.of(100)).every(Time.of(1, TimeUnit.MINUTES))
-{% endhighlight %}
-</div>
-</div>
-
-The user can also omit the `every(…)` call which results in a tumbling window emptying the window after every transformation call.
-
-Several predefined policies are provided in the API, including delta-based, count-based and time-based policies. These can be accessed through the static methods provided by the `PolicyHelper` classes:
-
- * `Time.of(…)`
- * `Count.of(…)`
- * `Delta.of(…)`
-
-For detailed description of these policies please refer to the [Javadocs](http://flink.apache.org/docs/latest/api/java/).
-
-#### Policy based windowing
-The policy based windowing is a highly flexible way to specify stream discretisation also called windowing semantics. Two types of policies are used for such a specification:
-
- * `TriggerPolicy` defines when to trigger the reduce or transformation UDF on the current window and emit the result. In the API it completes a window statement such as: `window(…).every(…)`, while the triggering policy is passed within `every`. In case the user wants to use tumbling eviction policy (the window is emptied after the transformation) he can omit the `.every(…)` call and pass the trigger policy directly to the `.window(…)` call.
-
- * `EvictionPolicy` defines the length of a window as a means of a predicate for evicting tuples when they are no longer needed. In the API this can be defined by the `window(…)` operation on a stream. There are mostly the same predefined policy types provided as for trigger policies.
-
-Trigger and eviction policies work totally independently of each other. The eviction policy continuously maintains a window, into which it adds new elements and based on the eviction logic removes older elements in the order of arrival. The trigger policy on the other hand only decided at each new incoming element, whether it should trigger computation (and output results) on the currently maintained window.
-
-Several predefined policies are provided in the API, including delta-based, punctuation based, count-based and time-based policies. Policies are in general UDFs and can implement any custom behaviour.
-
-In addition to the `dataStream.window(…).every(…)` style users can specifically pass the trigger and eviction policies during the window call:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-dataStream.window(triggerPolicy, evictionPolicy);
-{% endhighlight %}
-</div>
-
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-dataStream.window(triggerPolicy, evictionPolicy)
-{% endhighlight %}
-</div>
-
-</div>
-
-By default triggers can only trigger when a new element arrives. This might not be suitable for all the use-cases with low data rates . To also provide triggering between elements so called active policies (the two interfaces controlling this special behaviour is `ActiveTriggerPolicy` and `CentralActiveTrigger`) can be used. The predefined time-based policies are already implemented in such a way and can hold as an example for user defined active policy implementations. 
-
-Time-based trigger and eviction policies can work with user defined `TimeStamp` implementations, these policies already cover most use cases.
- 
-#### Reduce on windowed data streams
-The `WindowedDataStream<T>.reduceWindow(ReduceFunction<T>)` transformation calls the user-defined `ReduceFunction` at every trigger on the records currently in the window. The user can also use the different pre-implemented streaming aggregations such as `sum, min, max, minBy` and `maxBy`.
-
-The following is an example for a window reduce that sums the elements in the last minute with 10 seconds slide interval:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-dataStream.window(Time.of(1, TimeUnit.MINUTES)).every(Time.of(10,TimeUnit.SECONDS)).sum(field);
-{% endhighlight %}
-</div>
-
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-dataStream.window(Time.of(1, TimeUnit.MINUTES)).every(Time.of(10,TimeUnit.SECONDS)).sum(field)
-{% endhighlight %}
-</div>
-
-</div>
-
-
-#### Map on windowed data streams
-The `WindowedDataStream<T>.mapWindow(WindowMapFunction<T,O>)` transformation calls  `mapWindow(…)` for each `StreamWindow` in the discretised stream providing access to all elements in the window through the iterable interface. At each function call the output `StreamWindow<O>` will consist of all the elements collected to the collector. This allows a straightforward way of mapping one stream window to another.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-windowedDataStream.mapWindow(windowMapFunction);
-{% endhighlight %}
-</div>
-
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-windowedDataStream.mapWindow(windowMapFunction)
-{% endhighlight %}
-</div>
-
-</div>
-
-#### Grouped transformations on windowed data streams
-Calling the `groupBy(…)` method on a windowed stream groups the elements by the given fields inside the stream windows. The window sizes (evictions) and slide sizes (triggers) will be calculated on the whole stream (in a global fashion), but the user defined functions will be applied on a per group basis inside the window. This means that for a call `windowedStream.groupBy(…).reduceWindow(…)` will transform each window into another window consisting of as many elements as keys in the original window, with the reduced values per key. Similarly the `mapWindow` transformation is applied per group as well.
-
-The user can also create discretisation on a per group basis calling `window(…).every(…)` on an already grouped data stream. This will apply the discretisation logic independently for each key.
-
-To highlight the differences let us look at two examples.
-
-To get the maximal value for each key on the last 100 elements (global) we use the first approach:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-dataStream.window(Count.of(100)).every(…).groupBy(groupingField).max(field);
-{% endhighlight %}
-</div>
-
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-dataStream.window(Count.of(100)).every(…).groupBy(groupingField).max(field)
-{% endhighlight %}
-</div>
-
-</div>
-
-Using this approach we took the last 100 elements, divided it into groups by key then applied the aggregation. To create fixed size windows for every key we need to reverse the order of the groupBy call. So to take the max for the last 100 elements in Each group:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-dataStream.groupBy(groupingField).window(Count.of(100)).every(…).max(field);
-{% endhighlight %}
-</div>
-
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-dataStream.groupBy(groupingField).window(Count.of(100)).every(…).max(field)
-{% endhighlight %}
-</div>
-
-</div>
-
-This will create separate windows for different keys and apply the trigger and eviction policies on a per group basis.
-
-#### Applying multiple transformations on a window
-Using the `WindowedDataStream` abstraction we can apply several transformations one after another on the discretised streams without having to re-discretise it:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-dataStream.window(Count.of(1000)).groupBy(firstKey).mapWindow(…)
-    .groupBy(secondKey).reduceWindow(…).flatten();
-{% endhighlight %}
-</div>
-
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-dataStream.window(Count.of(1000)).groupBy(firstKey).mapWindow(…)
-    .groupBy(secondKey).reduceWindow(…).flatten()
-{% endhighlight %}
-</div>
-</div>
-
-The above call would create global windows of 1000 elements group it by the first key and then apply a mapWindow transformation. The resulting windowed stream will then be grouped by the second key and further reduced. The results of the reduce transformation are then flattened.
-
-Notice that here we only defined the window size once at the beginning of the transformation. This means that anything that happens afterwards (`groupBy(firstKey).mapWindow(…).groupBy(secondKey).reduceWindow(…)`) happens inside the 1000 element windows. Of course the mapWindow might reduce the number of elements but the key idea is that each transformation still corresponds to the same 1000 elements in the original stream.
-
-#### Global vs local discretisation
-By default all window discretisation calls (`dataStream.window(…)`) define global windows meaning that a global window of count 100 will contain the last 100 elements arrived at the discretisation operator in order. In most cases (except for Time) this means that the operator doing the actual discretisation needs to have a parallelism of 1 to be able to correctly execute the discretisation logic.
-
-Sometimes it is sufficient to create local discretisations, which allows the discretiser to run in parallel and apply the given discretisation logic at every discretiser instance. To allow local discretisation use the `local()` method of the windowed data stream.
-
-For example `dataStream.window(Count.of(100)).maxBy(field)` would create global windows of 100 elements (Count discretises with parallelism of 1) and return the record with the max value by the selected field, alternatively the `dataStream.window(Count.of(100)).local().maxBy(field)` would create several count discretisers (as defined by the environment parallelism) and compute the max values accordingly.
-
-
-### Temporal database style operators
-
-While database style operators like joins (on key) and crosses are hard to define properly on data streams, a straightforward interpretation is to apply these operators on windows of the data streams. 
-
-Currently join and cross operators are supported only on time windows. We are working on alleviating this limitations in the next release.
-
-Temporal operators take the current windows of both streams and apply the join/cross logic on these window pairs.
-
-The Join transformation produces a new Tuple DataStream with two fields. Each tuple holds a joined element of the first input DataStream in the first tuple field and a matching element of the second input DataStream in the second field for the current window. The user can also supply a custom join function to control the produced elements.
-
-The following code shows a default Join transformation using field position keys:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-dataStream1.join(dataStream2)
-    .onWindow(windowing_params)
-    .where(key_in_first)
-    .equalTo(key_in_second);
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-dataStream1.join(dataStream2)
-    .onWindow(windowing_params)
-    .where(key_in_first)
-    .equalTo(key_in_second)
-{% endhighlight %}
-</div>
-</div>
-
-The Cross transformation combines two `DataStream`s into one `DataStream`. It builds all pairwise combinations of the elements of both input DataStreams in the current window, i.e., it builds a temporal Cartesian product. The user can also supply a custom cross function to control the produced elements
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-dataStream1.cross(dataStream2).onWindow(windowing_params);
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-dataStream1 cross dataStream2 onWindow (windowing_params)
-{% endhighlight %}
-</div>
-</div>
-
-
-### Co operators
-
-Co operators allow the users to jointly transform two `DataStream`s of different types providing a simple way to jointly manipulate streams with a shared state. It is designed to support joint stream transformations where merging is not appropriate due to different data types or in case the user needs explicit tracking of the origin of individual elements.
-Co operators can be applied to `ConnectedDataStream`s which represent two `DataStream`s of possibly different types. A `ConnectedDataStream` can be created by calling the `connect(otherDataStream)` method of a `DataStream`. Please note that the two connected `DataStream`s can also be merged data streams.
-
-#### Map on ConnectedDataStream
-Applies a CoMap transformation on two separate DataStreams, mapping them to a common output type. The transformation calls a `CoMapFunction.map1()` for each element of the first input and `CoMapFunction.map2()` for each element of the second input. Each CoMapFunction call returns exactly one element.
-A CoMap operator that outputs true if an Integer value is received and false if a String value is received:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-DataStream<Integer> dataStream1 = ...
-DataStream<String> dataStream2 = ...
-        
-dataStream1.connect(dataStream2)
-    .map(new CoMapFunction<Integer, String, Boolean>() {
-            
-            @Override
-            public Boolean map1(Integer value) {
-                return true;
-            }
-            
-            @Override
-            public Boolean map2(String value) {
-                return false;
-            }
-        })
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-val dataStream1 : DataStream[Int] = ...
-val dataStream2 : DataStream[String] = ...
-
-(dataStream1 connect dataStream2)
-  .map(
-    (_ : Int) => true,
-    (_ : String) => false
-  )
-{% endhighlight %}
-</div>
-</div>
-
-#### FlatMap on ConnectedDataStream
-The FlatMap operator for the `ConnectedDataStream` works similarly to CoMap, but instead of returning exactly one element after each map call the user can output arbitrarily many values using the Collector interface. 
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-DataStream<Integer> dataStream1 = ...
-DataStream<String> dataStream2 = ...
-        
-dataStream1.connect(dataStream2)
-    .flatMap(new CoFlatMapFunction<Integer, String, String>() {
-
-            @Override
-            public void flatMap1(Integer value, Collector<String> out) {
-                out.collect(value.toString());
-            }
-
-            @Override
-            public void flatMap2(String value, Collector<String> out) {
-                for (String word: value.split(" ")) {
-                  out.collect(word);
-                }
-            }
-        })
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-val dataStream1 : DataStream[Int] = ...
-val dataStream2 : DataStream[String] = ...
-
-(dataStream1 connect dataStream2)
-  .flatMap(
-    (num : Int) => List(num.toString),
-    (str : String) => str.split(" ")
-  )
-{% endhighlight %}
-</div>
-</div>
-
-#### WindowReduce on ConnectedDataStream
-The windowReduce operator applies a user defined `CoWindowFunction` to time aligned windows of the two data streams and return zero or more elements of an arbitrary type. The user can define the window and slide intervals and can also implement custom timestamps to be used for calculating windows.
-
-#### Reduce on ConnectedDataStream
-The Reduce operator for the `ConnectedDataStream` applies a simple reduce transformation on the joined data streams and then maps the reduced elements to a common output type.
-
-### Output splitting
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-Most data stream operators support directed outputs (output splitting), meaning that different output elements are sent only to specific outputs. The outputs are referenced by their name given at the point of receiving:
-
-{% highlight java %}
-SplitDataStream<Integer> split = someDataStream.split(outputSelector);
-DataStream<Integer> even = split.select("even");
-DataStream<Integer> odd = split.select("odd");
-{% endhighlight %}
-In the above example the data stream named “even” will only contain elements that are directed to the output named “even”. The user can of course further transform these new stream by for example squaring only the even elements.
-
-Data streams only receive the elements directed to selected output names. The user can also select multiple output names by `splitStream.select(“output1”, “output2”, …)`. It is common that a stream listens to all the outputs, so `split.selectAll()` provides this functionality without having to select all names.
-
-The outputs of an operator are directed by implementing a selector function (implementing the `OutputSelector` interface):
-
-{% highlight java %}
-Iterable<String> select(OUT value);
-{% endhighlight %}
-
-The data is sent to all the outputs returned in the iterable (referenced by their name). This way the direction of the outputs can be determined by the value of the data sent. 
-
-For example to split even and odd numbers:
-
-{% highlight java %}
-@Override
-Iterable<String> select(Integer value) {
-
-    List<String> outputs = new ArrayList<String>();
-
-    if (value % 2 == 0) {
-        outputs.add("even");
-    } else {
-        outputs.add("odd");
-    }
-
-    return outputs;
-}
-{% endhighlight %}
-
-Every output will be emitted to the selected outputs exactly once, even if you add the same output names more than once.
-
-The functionality provided by output splitting can also be achieved efficiently (due to operator chaining) by multiple filter operators.
-</div>
-<div data-lang="scala" markdown="1">
-
-Most data stream operators support directed outputs (output splitting), meaning that different output elements are sent only to specific outputs. The outputs are referenced by their name given at the point of receiving:
-
-{% highlight scala %}
-val split = someDataStream.split(
-  (num: Int) =>
-    (num % 2) match {
-      case 0 => List("even")
-      case 1 => List("odd")
-    }
-)
-
-val even = split select "even" 
-val odd = split select "odd"
-{% endhighlight %}
-
-In the above example the data stream named “even” will only contain elements that are directed to the output named “even”. The user can of course further transform these new stream by for example squaring only the even elements.
-
-Data streams only receive the elements directed to selected output names. The user can also select multiple output names by `splitStream.select(“output1”, “output2”, …)`. It is common that a stream listens to all the outputs, so `split.selectAll` provides this functionality without having to select all names.
-
-The outputs of an operator are directed by implementing a function that returns the output names for the value. The data is sent to all the outputs returned by the function (referenced by their name). This way the direction of the outputs can be determined by the value of the data sent.
-
-Every output will be emitted to the selected outputs exactly once, even if you add the same output names more than once.
-
-The functionality provided by output splitting can also be achieved efficiently (due to operator chaining) by multiple filter operators.
-</div>
-
-</div>
-
-### Iterations
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-The Flink Streaming API supports implementing iterative stream processing dataflows similarly to the batch Flink API. Iterative streaming programs also implement a step function and embed it into an `IterativeDataStream`.
-Unlike in the batch API the user does not define the maximum number of iterations, but at the tail of each iteration part of the output is streamed forward to the next operator and part is streamed back to the iteration head. The user controls the output of the iteration tail using [output splitting](#output-splitting) or [filters](#filter).
-To start an iterative part of the program the user defines the iteration starting point:
-
-{% highlight java %}
-IterativeDataStream<Integer> iteration = source.iterate(maxWaitTimeMillis);
-{% endhighlight %}
-
-The operator applied on the iteration starting point is the head of the iteration, where data is fed back from the iteration tail.
-
-{% highlight java %}
-DataStream<Integer> head = iteration.map(new IterationHead());
-{% endhighlight %}
-
-To close an iteration and define the iteration tail, the user calls `closeWith(iterationTail)` method of the `IterativeDataStream`. This iteration tail (the DataStream given to the `closeWith` function) will be fed back to the iteration head. A common pattern is to use [filters](#filter) to separate the output of the iteration from the feedback-stream.
-
-{% highlight java %}
-DataStream<Integer> tail = head.map(new IterationTail());
-
-iteration.closeWith(tail.filter(isFeedback));
-
-DataStream<Integer> output = tail.filter(isOutput);
-
-output.map(…).project(…);
-{% endhighlight %}
-
-In this case all values passing the `isFeedback` filter will be fed back to the iteration head, and the values passing the `isOutput` filter will produce the output of the iteration that can be transformed further (here with a `map` and a `projection`) outside the iteration.
-
-Because iterative streaming programs do not have a set number of iterations for each data element, the streaming program has no information on the end of its input. As a consequence iterative streaming programs run until the user manually stops the program. While this is acceptable under normal circumstances a method is provided to allow iterative programs to shut down automatically if no input received by the iteration head for a predefined number of milliseconds.
-To use this functionality the user needs to add the maxWaitTimeMillis parameter to the `dataStream.iterate(…)` call to control the max wait time. 
-</div>
-<div data-lang="scala" markdown="1">
-The Flink Streaming API supports implementing iterative stream processing dataflows similarly to the batch Flink API. Iterative streaming programs also implement a step function and embed it into an `IterativeDataStream`.
-Unlike in the batch API the user does not define the maximum number of iterations, but at the tail of each iteration part of the output is streamed forward to the next operator and part is streamed back to the iteration head. The user controls the output of the iteration tail by defining a step function that return two DataStreams: a feedback and an output. The first one is the output that will be fed back to the start of the iteration and the second is the output stream of the iterative part.
-
-A common pattern is to use [filters](#filter) to separate the output from the feedback-stream. In this case all values passing the `isFeedback` filter will be fed back to the iteration head, and the values passing the `isOutput` filter will produce the output of the iteration that can be transformed further (here with a `map` and a `projection`) outside the iteration.
-
-{% highlight scala %}
-val iteratedStream = someDataStream.iterate(maxWaitTime) {
-  iteration => {
-    val head = iteration.map(iterationHead)
-    val tail = head.map(iterationTail)
-    (tail.filter(isFeedback), tail.filter(isOutput))
-  }
-}.map(…).project(…)
-{% endhighlight %}
-
-Because iterative streaming programs do not have a set number of iterations for each data element, the streaming program has no information on the end of its input. As a consequence iterative streaming programs run until the user manually stops the program. While this is acceptable under normal circumstances a method is provided to allow iterative programs to shut down automatically if no input received by the iteration head for a predefined number of milliseconds.
-To use this functionality the user needs to add the maxWaitTimeMillis parameter to the `dataStream.iterate(…)` call to control the max wait time. 
-</div>
-
-</div>
-
-### Rich functions
-The [usage](programming_guide.html#rich-functions) of rich functions are essentially the same as in the batch Flink API. All transformations that take as argument a user-defined function can instead take a rich function as argument:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-dataStream.map(new RichMapFunction<Integer, String>() {
-    @Override
-    public void open(Configuration parameters) throws Exception {
-        /* initialization of function */
-    }
-
-    @Override
-    public String map(Integer value) { return value.toString(); }
-});
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-dataStream map
-  new RichMapFunction[Int, String] {
-    override def open(config: Configuration) = {
-      /* initialization of function */
-    }
-    override def map(value: Int): String = value.toString
-  }
-{% endhighlight %}
-</div>
-</div>
-
-Rich functions provide, in addition to the user-defined function (`map()`, `reduce()`, etc), the `open()` and `close()` methods for initialization and finalization.
-
-[Back to top](#top)
-
-Lambda expressions with Java 8
-------------
-
-For a more consise code one can rely on one of the main feature of Java 8, lambda expressions. The following program has similar functionality to the one provided in the [example](#example-program) section, while showcasing the usage of lambda expressions.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java8" markdown="1">
-{% highlight java %}
-public class StreamingWordCount {
-    public static void main(String[] args) throws Exception {
-        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
-
-        DataStream<String> text = env.fromElements(
-                "Who's there?",
-                "I think I hear them. Stand, ho! Who's there?");
-
-            DataStream<Tuple2<String, Integer>> counts = 
-        // normalize and split each line
-        text.map(line -> line.toLowerCase().split("\\W+"))
-        // convert splitted line in pairs (2-tuples) containing: (word,1)
-        .flatMap((String[] tokens, Collector<Tuple2<String, Integer>> out) -> {
-        // emit the pairs with non-zero-length words
-            Arrays.stream(tokens)
-                .filter(t -> t.length() > 0)
-                .forEach(t -> out.collect(new Tuple2<>(t, 1)));
-        })
-        // group by the tuple field "0" and sum up tuple field "1"
-        .groupBy(0)
-        .sum(1);
-
-        counts.print();
-
-        env.execute("Streaming WordCount");
-    }
-}
-{% endhighlight %}
-</div>
-</div>
-
-For a detailed Java 8 Guide please refer to the [Java 8 Programming Guide](java8_programming_guide.html). Operators specific to streaming, such as Operator splitting also support this usage. [Output splitting](#output-splitting) can be rewritten as follows:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java8" markdown="1">
-{% highlight java %}
-SplitDataStream<Integer> split = someDataStream
-    .split(x -> Arrays.asList(String.valueOf(x % 2)));
-{% endhighlight %}
-</div>
-</div>
-
-Operator Settings
-----------------
-
-### Parallelism
-
-Setting parallelism for operators works exactly the same way as in the batch Flink API. The user can control the number of parallel instances created for each operator by calling the `operator.setParallelism(parallelism)` method.
-
-### Buffer timeout
-
-By default data points are not transferred on the network one-by-one, which would cause unnecessary network traffic, but are buffered in the output buffers. The size of the output buffers can be set in the Flink config files. While this method is good for optimizing throughput, it can cause latency issues when the incoming stream is not fast enough.
-To tackle this issue the user can call `env.setBufferTimeout(timeoutMillis)` on the execution environment (or on individual operators) to set a maximum wait time for the buffers to fill up. After this time the buffers are flushed automatically even if they are not full. The default value for this timeout is 100 ms which should be appropriate for most use-cases. 
-
-Usage:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-LocalStreamEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();
-env.setBufferTimeout(timeoutMillis);
-
-env.genereateSequence(1,10).map(new MyMapper()).setBufferTimeout(timeoutMillis);
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-LocalStreamEnvironment env = StreamExecutionEnvironment.createLocalEnvironment
-env.setBufferTimeout(timeoutMillis)
-
-env.genereateSequence(1,10).map(myMap).setBufferTimeout(timeoutMillis)
-{% endhighlight %}
-</div>
-</div>
-
-To maximise the throughput the user can call `setBufferTimeout(-1)` which will remove the timeout and buffers will only be flushed when they are full.
-To minimise latency, set the timeout to a value close to 0 (for example 5 or 10 ms). Theoretically a buffer timeout of 0 will cause all outputs to be flushed when produced, but this setting should be avoided because it can cause severe performance degradation.
-
-
-[Back to top](#top)
-    
-Stream connectors
-----------------
-
-Connectors provide an interface for accessing data from various third party sources (message queues). Currently four connectors are natively supported, namely [Apache Kafka](https://kafka.apache.org/),  [RabbitMQ](http://www.rabbitmq.com/), [Apache Flume](https://flume.apache.org/index.html) and [Twitter Streaming API](https://dev.twitter.com/docs/streaming-apis).
-
-Typically the connector packages consist of a source and sink class (with the exception of Twitter where only a source is provided). To use these sources the user needs to pass Serialization/Deserialization schemas for the connectors for the desired types. (Or use some predefined ones)
-
-To run an application using one of these connectors usually additional third party components are required to be installed and launched, e.g. the servers for the message queues. Further instructions for these can be found in the corresponding subsections. [Docker containers](#docker-containers-for-connectors) are also provided encapsulating these services to aid users getting started with connectors.
-
-### Apache Kafka
-
-This connector provides access to data streams from [Apache Kafka](https://kafka.apache.org/).
-
-#### Installing Apache Kafka
-* Follow the instructions from [Kafka's quickstart](https://kafka.apache.org/documentation.html#quickstart) to download the code and launch a server (launching a Zookeeper and a Kafka server is required every time before starting the application).
-* On 32 bit computers [this](http://stackoverflow.com/questions/22325364/unrecognized-vm-option-usecompressedoops-when-running-kafka-from-my-ubuntu-in) problem may occur. 
-* If the Kafka and Zookeeper servers are running on a remote machine, then the `advertised.host.name` setting in the `config/server.properties` file the  must be set to the machine's IP address.
-
-#### Kafka Source
-The standard `KafkaSource` is a Kafka consumer providing an access to one topic.
-
-The following parameters have to be provided for the `KafkaSource(...)` constructor:
-
-1. Zookeeper hostname
-2. The topic name
-3. Deserialization schema
-
-Example:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-DataStream<String> stream = env
-	.addSource(new KafkaSource<String>("localhost:2181", "test", new SimpleStringSchema()))
-	.print();
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-stream = env
-    .addSource(new KafkaSource[String]("localhost:2181", "test", new SimpleStringSchema)
-    .print
-{% endhighlight %}
-</div>
-</div>
-
-#### Persistent Kafka Source
-As Kafka persists all the data, a fault tolerant Kafka source can be provided.
-
-The PersistentKafkaSource can read a topic, and if the job fails for some reason, the source will
-continue on reading from where it left off after a restart.
-For example if there are 3 partitions in the topic with offsets 31, 122, 110 read at the time of job
-failure, then at the time of restart it will continue on reading from those offsets, no matter whether these partitions have new messages.
-
-To use fault tolerant Kafka Sources, monitoring of the topology needs to be enabled at the execution environment:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
-env.enableMonitoring(5000);
-{% endhighlight %}
-</div>
-</div>
-
-Also note that Flink can only restart the topology if enough processing slots are available to restart the topology.
-So if the topology fails due to loss of a TaskManager, there must be still enough slots available afterwards.
-Flink on YARN supports automatic restart of lost YARN containers.
-
-The following arguments have to be provided for the `PersistentKafkaSource(...)` constructor:
-
-1. Zookeeper hostname
-2. The topic name
-3. Deserialization schema
-
-Example:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-stream.addSource(new PersistentKafkaSource<String>("localhost:2181", "test", new SimpleStringSchema()));
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-stream.addSource(new PersistentKafkaSource[String]("localhost:2181", "test", new SimpleStringSchema))
-{% endhighlight %}
-</div>
-</div>
-
-#### Kafka Sink
-A class providing an interface for sending data to Kafka. 
-
-The followings have to be provided for the `KafkaSink(…)` constructor in order:
-
-1. Zookeeper hostname
-2. The topic name
-3. Serialization schema
-
-Example: 
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-stream.addSink(new KafkaSink<String>("localhost:2181", "test", new SimpleStringSchema()));
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-stream.addSink(new KafkaSink[String]("localhost:2181", "test", new SimpleStringSchema))
-{% endhighlight %}
-</div>
-</div>
-
-The user can also define custom Kafka producer configuration for the KafkaSink with the constructor:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-public KafkaSink(String zookeeperAddress, String topicId, Properties producerConfig,
-      SerializationSchema<IN, byte[]> serializationSchema)
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-public KafkaSink(String zookeeperAddress, String topicId, Properties producerConfig,
-      SerializationSchema serializationSchema)
-{% endhighlight %}
-</div>
-</div>
-
-If this constructor is used, the user needs to make sure to set the broker with the "metadata.broker.list" property. Also the serializer configuration should be left default, the serialization should be set via SerializationSchema.
-
-More about Kafka can be found [here](https://kafka.apache.org/documentation.html).
-
-[Back to top](#top)
-
-### Apache Flume
-
-This connector provides access to data streams from [Apache Flume](http://flume.apache.org/).
-
-#### Installing Apache Flume
-[Download](http://flume.apache.org/download.html) Apache Flume. A configuration file is required for starting agents in Flume. A configuration file for running the example can be found [here](#config_file).
-
-#### Flume Source
-A class providing an interface for receiving data from Flume.
-
-The followings have to be provided for the `FlumeSource(…)` constructor in order:
-
-1. The hostname
-2. The port number
-3. Deserialization schema
-
-Example:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-DataStream<String> stream = env
-	.addSource(new FlumeSource<String>("localhost", 41414, new SimpleStringSchema()))
-	.print();
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-stream = env
-    .addSource(new FlumeSource[String]("localhost", 41414, new SimpleStringSchema))
-    .print
-{% endhighlight %}
-</div>
-</div>
-
-#### Flume Sink
-A class providing an interface for sending data to Flume. 
-
-The followings have to be provided for the `FlumeSink(…)` constructor in order:
-
-1. The hostname
-2. The port number
-3. Serialisation schema
-
-Example: 
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-stream.addSink(new FlumeSink<String>("localhost", 42424, new StringToByteSerializer()));
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-stream.addSink(new FlumeSink[String]("localhost", 42424, new StringToByteSerializer))
-{% endhighlight %}
-</div>
-</div>
-
-##### Configuration file<a name="config_file"></a>
-An example of a configuration file:
-
-~~~
-a1.channels = c1
-a1.sources = r1
-a1.sinks = k1
-
-a1.channels.c1.type = memory
-
-a1.sources.r1.channels = c1
-a1.sources.r1.type = avro
-a1.sources.r1.bind = localhost
-a1.sources.r1.port = 42424
-
-a1.sinks.k1.channel = c1
-a1.sinks.k1.type = avro
-a1.sinks.k1.hostname = localhost
-a1.sinks.k1.port = 41414
-~~~
-
-To run the `FlumeTopology` example the previous configuration file must located in the Flume directory and named example.conf and the agent can be started with the following command:
-
-~~~
-bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
-~~~
-
-If the agent is not started before the application starts a `FlumeSink` then the sink will retry to build the connection for 90 seconds, if unsuccessful it throws a `RuntimeException`.
-
-More on Flume can be found [here](http://flume.apache.org).
-
-[Back to top](#top)
-
-### RabbitMQ
-
-This connector provides access to data streams from [RabbitMQ](http://www.rabbitmq.com/).
-
-##### Installing RabbitMQ
-Follow the instructions from the [RabbitMQ download page](http://www.rabbitmq.com/download.html). After the installation the server automatically starts and the application connecting to RabbitMQ can be launched.
-
-#### RabbitMQ Source
-
-A class providing an interface for receiving data from RabbitMQ.
-
-The followings have to be provided for the `RMQSource(…)` constructor in order:
-
-1. The hostname
-2. The queue name
-3. Deserialization schema
-
-Example:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-DataStream<String> stream = env
-	.addSource(new RMQSource<String>("localhost", "hello", new SimpleStringSchema))
-	.print
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-stream = env
-    .addSource(new RMQSource[String]("localhost", "hello", new SimpleStringSchema))
-    .print
-{% endhighlight %}
-</div>
-</div>
-
-#### RabbitMQ Sink
-A class providing an interface for sending data to RabbitMQ. 
-
-The followings have to be provided for the `RMQSink(…)` constructor in order:
-
-1. The hostname
-2. The queue name
-3. Serialisation schema
-
-Example: 
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-stream.addSink(new RMQSink<String>("localhost", "hello", new StringToByteSerializer()));
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-stream.addSink(new RMQSink[String]("localhost", "hello", new StringToByteSerializer))
-{% endhighlight %}
-</div>
-</div>
-
-More about RabbitMQ can be found [here](http://www.rabbitmq.com/).
-
-[Back to top](#top)
-
-### Twitter Streaming API
-
-Twitter Streaming API provides opportunity to connect to the stream of tweets made available by Twitter. Flink Streaming comes with a built-in `TwitterSource` class for establishing a connection to this stream.
-
-#### Authentication
-In order to connect to Twitter stream the user has to register their program and acquire the necessary information for the authentication. The process is described below.
-
-#### Acquiring the authentication information
-First of all, a Twitter account is needed. Sign up for free at [twitter.com/signup](https://twitter.com/signup) or sign in at Twitter's [Application Management](https://apps.twitter.com/) and register the application by clicking on the "Create New App" button. Fill out a form about your program and accept the Terms and Conditions. 
-After selecting the application you the API key and API secret (called `consumerKey` and `sonsumerSecret` in `TwitterSource` respectively) is located on the "API Keys" tab. The necessary access token data (`token` and `secret`) can be acquired here. 
-Remember to keep these pieces of information a secret and do not push them to public repositories.
-
-#### Accessing the authentication information
-Create a properties file and pass its path in the constructor of `TwitterSource`. The content of the file should be similar to this:
-
-~~~bash
-#properties file for my app
-secret=***
-consumerSecret=***
-token=***-***
-consumerKey=***
-~~~
-
-#### Constructors
-The `TwitterSource` class has two constructors.
-
-1. `public TwitterSource(String authPath, int numberOfTweets);` 
-to emit finite number of tweets
-2. `public TwitterSource(String authPath);` 
-for streaming
-
-Both constructors expect a `String authPath` argument determining the location of the properties file containing the authentication information. In the first case, `numberOfTweets` determine how many tweet the source emits. 
-
-#### Usage
-In constract to other connecters the `TwitterSource` depends on no additional services. For example the following code should run gracefully:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-DataStream<String> streamSource = env.addSource(new TwitterSource("/PATH/TO/myFile.properties"));
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-streamSource = env.addSource(new TwitterSource("/PATH/TO/myFile.properties"))
-{% endhighlight %}
-</div>
-</div>
-
-The `TwitterSource` emits strings containing a JSON code. 
-To retrieve information from the JSON code you can add a FlatMap or a Map function handling JSON code. For example use an implementation `JSONParseFlatMap` abstract class among the examples. `JSONParseFlatMap` is an extension of the `FlatMapFunction` and has a
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-{% highlight java %}
-String getField(String jsonText, String field);
-{% endhighlight %}
-</div>
-<div data-lang="scala" markdown="1">
-{% highlight scala %}
-getField(jsonText : String, field : String) : String
-{% endhighlight %}
-</div>
-</div>
-
-function which can be use to acquire the value of a given field. 
-
-There are two basic types of tweets. The usual tweets contain information such as date and time of creation, id, user, language and many more details. The other type is the delete information.
-
-#### Example
-`TwitterLocal` is an example how to use `TwitterSource`. It implements a language frequency counter program. 
-
-[Back to top](#top)
-
-### Docker containers for connectors
-
-A Docker container is provided with all the required configurations for test running the connectors of Apache Flink. The servers for the message queues will be running on the docker container while the example topology can be run on the user's computer. The only exception is Flume, more can be read about this issue in the [Flume section](#flume). 
-
-#### Installing Docker
-The official Docker installation guide can be found [here](https://docs.docker.com/installation/).
-After installing Docker an image can be pulled for each connector. Containers can be started from these images where all the required configurations are set.
-
-#### Creating a jar with all the dependencies
-For the easiest set up create a jar with all the dependencies of the *flink-streaming-connectors* project.
-
-~~~bash
-cd /PATH/TO/GIT/flink/flink-staging/flink-streaming-connectors
-mvn assembly:assembly
-~~~bash
-
-This creates an assembly jar under *flink-streaming-connectors/target*. 
-
-#### RabbitMQ
-Pull the docker image:
-
-~~~bash
-sudo docker pull flinkstreaming/flink-connectors-rabbitmq 
-~~~
-
-To run the container type:
-
-~~~bash
-sudo docker run -p 127.0.0.1:5672:5672 -t -i flinkstreaming/flink-connectors-rabbitmq
-~~~
-
-Now a terminal started running from the image with all the necessary configurations to test run the RabbitMQ connector. The -p flag binds the localhost's and the Docker container's ports so RabbitMQ can communicate with the application through these.
-
-To start the RabbitMQ server:
-
-~~~bash
-sudo /etc/init.d/rabbitmq-server start
-~~~
-
-To launch the example on the host computer execute:
-
-~~~bash
-java -cp /PATH/TO/JAR-WITH-DEPENDENCIES org.apache.flink.streaming.connectors.rabbitmq.RMQTopology \
-> log.txt 2> errorlog.txt
-~~~
-
-In the example there are two connectors. One that sends messages to RabbitMQ and one that receives messages from the same queue. In the logger messages the arriving messages can be observed in the following format:
-
-~~~
-<DATE> INFO rabbitmq.RMQTopology: String: <one> arrived from RMQ 
-<DATE> INFO rabbitmq.RMQTopology: String: <two> arrived from RMQ
-<DATE> INFO rabbitmq.RMQTopology: String: <three> arrived from RMQ
-<DATE> INFO rabbitmq.RMQTopology: String: <four> arrived from RMQ
-<DATE> INFO rabbitmq.RMQTopology: String: <five> arrived from RMQ
-~~~
-
-#### Apache Kafka
-
-Pull the image:
-
-~~~bash
-sudo docker pull flinkstreaming/flink-connectors-kafka 
-~~~
-
-To run the container type:
-
-~~~bash
-sudo docker run -p 127.0.0.1:2181:2181 -p 127.0.0.1:9092:9092 -t -i \
-flinkstreaming/flink-connectors-kafka
-~~~
-
-Now a terminal started running from the image with all the necessary configurations to test run the Kafka connector. The -p flag binds the localhost's and the Docker container's ports so Kafka can communicate with the application through these.
-First start a zookeeper in the background:
-
-~~~bash
-/kafka_2.9.2-0.8.1.1/bin/zookeeper-server-start.sh /kafka_2.9.2-0.8.1.1/config/zookeeper.properties \
-> zookeeperlog.txt &
-~~~
-
-Then start the kafka server in the background:
-
-~~~bash
-/kafka_2.9.2-0.8.1.1/bin/kafka-server-start.sh /kafka_2.9.2-0.8.1.1/config/server.properties \
- > serverlog.txt 2> servererr.txt &
-~~~
-
-To launch the example on the host computer execute:
-
-~~~bash
-java -cp /PATH/TO/JAR-WITH-DEPENDENCIES org.apache.flink.streaming.connectors.kafka.KafkaTopology \
-> log.txt 2> errorlog.txt
-~~~
-
-
-In the example there are two connectors. One that sends messages to Kafka and one that receives messages from the same queue. In the logger messages the arriving messages can be observed in the following format:
-
-~~~
-<DATE> INFO kafka.KafkaTopology: String: (0) arrived from Kafka
-<DATE> INFO kafka.KafkaTopology: String: (1) arrived from Kafka
-<DATE> INFO kafka.KafkaTopology: String: (2) arrived from Kafka
-<DATE> INFO kafka.KafkaTopology: String: (3) arrived from Kafka
-<DATE> INFO kafka.KafkaTopology: String: (4) arrived from Kafka
-<DATE> INFO kafka.KafkaTopology: String: (5) arrived from Kafka
-<DATE> INFO kafka.KafkaTopology: String: (6) arrived from Kafka
-<DATE> INFO kafka.KafkaTopology: String: (7) arrived from Kafka
-<DATE> INFO kafka.KafkaTopology: String: (8) arrived from Kafka
-<DATE> INFO kafka.KafkaTopology: String: (9) arrived from Kafka
-~~~
-
-#### Apache Flume
-
-At the moment remote access for Flume connectors does not work. This example is only runnable on the same machine where the Flume server is. In this case both will be in the Docker container.
-
-Pull the image:
-
-~~~bash
-sudo docker pull flinkstreaming/flink-connectors-flume
-~~~
-
-To run the container type:
-
-~~~bash
-sudo docker run -t -i flinkstreaming/flink-connectors-flume
-~~~
-
-Now a terminal started running from the image with all the necessary configurations to test run the Flume connector. The -p flag binds the localhost's and the Docker container's ports so flume can communicate with the application through these.
-
-To have the latest version of Flink type:
-~~~bash
-cd /git/flink/
-git pull
-~~~
-
-Then build the code with:
-
-~~~bash
-cd /git/flink/flink-staging/flink-streaming/flink-streaming-connectors/
-mvn install -DskipTests
-~~~
-
-First start the server in the background:
-
-~~~bash
-/apache-flume-1.5.0-bin/bin/flume-ng agent \
---conf conf --conf-file /apache-flume-1.5.0-bin/example.conf --name a1 \
--Dflume.root.logger=INFO,console > /flumelog.txt 2> /flumeerr.txt &
-~~~
-
-Then press enter and launch the example with:
-
-~~~bash
-java -cp /PATH/TO/JAR-WITH-DEPENDENCIES org.apache.flink.streaming.connectors.flume.FlumeTopology
-~~~
-
-In the example there are to connectors. One that sends messages to Flume and one that receives messages from the same queue. In the logger messages the arriving messages can be observed in the following format:
-
-~~~
-<DATE> INFO flume.FlumeTopology: String: <one> arrived from Flume
-<DATE> INFO flume.FlumeTopology: String: <two> arrived from Flume
-<DATE> INFO flume.FlumeTopology: String: <three> arrived from Flume
-<DATE> INFO flume.FlumeTopology: String: <four> arrived from Flume
-<DATE> INFO flume.FlumeTopology: String: <five> arrived from Flume
-~~~
-
-[Back to top](#top)

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/table.md
----------------------------------------------------------------------
diff --git a/docs/table.md b/docs/table.md
deleted file mode 100644
index baf1aa9..0000000
--- a/docs/table.md
+++ /dev/null
@@ -1,130 +0,0 @@
----
-title: "Table API - Relational Queries"
-is_beta: true
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-**The Table API an experimental feature**
-
-Flink provides an API that allows specifying operations using SQL-like expressions. Instead of 
-manipulating `DataSet` or `DataStream` you work with `Table` on which relational operations can
-be performed. 
-
-The following dependency must be added to your project when using the Table API:
-
-{% highlight xml %}
-<dependency>
-  <groupId>org.apache.flink</groupId>
-  <artifactId>flink-table</artifactId>
-  <version>{{site.FLINK_VERSION_SHORT }}</version>
-</dependency>
-{% endhighlight %}
-
-## Scala Table API
- 
-The Table API can be enabled by importing `org.apache.flink.api.scala.table._`.  This enables
-implicit conversions that allow
-converting a DataSet or DataStream to a Table. This example shows how a DataSet can
-be converted, how relational queries can be specified and how a Table can be
-converted back to a DataSet:
-
-{% highlight scala %}
-import org.apache.flink.api.scala._
-import org.apache.flink.api.scala.table._ 
-
-case class WC(word: String, count: Int)
-val input = env.fromElements(WC("hello", 1), WC("hello", 1), WC("ciao", 1))
-val expr = input.toTable
-val result = expr.groupBy('word).select('word, 'count.sum as 'count).toSet[WC]
-{% endhighlight %}
-
-The expression DSL uses Scala symbols to refer to field names and we use code generation to
-transform expressions to efficient runtime code. Please note that the conversion to and from
-Tables only works when using Scala case classes or Flink POJOs. Please check out
-the [programming guide](programming_guide.html) to learn the requirements for a class to be 
-considered a POJO.
- 
-This is another example that shows how you
-can join to Tables:
-
-{% highlight scala %}
-case class MyResult(a: String, d: Int)
-
-val input1 = env.fromElements(...).toTable('a, 'b)
-val input2 = env.fromElements(...).toTable('c, 'd)
-val joined = input1.join(input2).where("b = a && d > 42").select("a, d").toSet[MyResult]
-{% endhighlight %}
-
-Notice, how a DataSet can be converted to a Table by using `as` and specifying new
-names for the fields. This can also be used to disambiguate fields before a join operation. Also,
-in this example we see that you can also use Strings to specify relational expressions.
-
-Please refer to the Scaladoc (and Javadoc) for a full list of supported operations and a
-description of the expression syntax. 
-
-## Java Table API
-
-When using Java, Tables can be converted to and from DataSet and DataStream using `TableEnvironment`.
-This example is equivalent to the above Scala Example:
-
-{% highlight java %}
-
-public class WC {
-
-  public WC(String word, int count) {
-    this.word = word; this.count = count;
-  }
-
-  public WC() {} // empty constructor to satisfy POJO requirements
-
-  public String word;
-  public int count;
-}
-
-...
-
-ExecutionEnvironment env = ExecutionEnvironment.createCollectionsEnvironment();
-TableEnvironment tableEnv = new TableEnvironment();
-
-DataSet<WC> input = env.fromElements(
-        new WC("Hello", 1),
-        new WC("Ciao", 1),
-        new WC("Hello", 1));
-
-Table table = tableEnv.toTable(input);
-
-Table filtered = table
-        .groupBy("word")
-        .select("word.count as count, word")
-        .filter("count = 2");
-
-DataSet<WC> result = tableEnv.toSet(filtered, WC.class);
-{% endhighlight %}
-
-When using Java, the embedded DSL for specifying expressions cannot be used. Only String expressions
-are supported. They support exactly the same feature set as the expression DSL.
-
-Please refer to the Javadoc for a full list of supported operations and a description of the
-expression syntax. 
-
-


[29/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/dataset_transformations.md
----------------------------------------------------------------------
diff --git a/docs/apis/dataset_transformations.md b/docs/apis/dataset_transformations.md
new file mode 100644
index 0000000..a829b1f
--- /dev/null
+++ b/docs/apis/dataset_transformations.md
@@ -0,0 +1,1689 @@
+---
+title: "DataSet Transformations"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+This document gives a deep-dive into the available transformations on DataSets. For a general introduction to the
+Flink Java API, please refer to the [Programming Guide](programming_guide.html).
+
+* This will be replaced by the TOC
+{:toc}
+
+### Map
+
+The Map transformation applies a user-defined map function on each element of a DataSet.
+It implements a one-to-one mapping, that is, exactly one element must be returned by
+the function.
+
+The following code transforms a DataSet of Integer pairs into a DataSet of Integers:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+// MapFunction that adds two integer values
+public class IntAdder implements MapFunction<Tuple2<Integer, Integer>, Integer> {
+  @Override
+  public Integer map(Tuple2<Integer, Integer> in) {
+    return in.f0 + in.f1;
+  }
+}
+
+// [...]
+DataSet<Tuple2<Integer, Integer>> intPairs = // [...]
+DataSet<Integer> intSums = intPairs.map(new IntAdder());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val intPairs: DataSet[(Int, Int)] = // [...]
+val intSums = intPairs.map { pair => pair._1 + pair._2 }
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ intSums = intPairs.map(lambda x: sum(x), INT)
+~~~
+
+</div>
+</div>
+
+### FlatMap
+
+The FlatMap transformation applies a user-defined flat-map function on each element of a DataSet.
+This variant of a map function can return arbitrary many result elements (including none) for each input element.
+
+The following code transforms a DataSet of text lines into a DataSet of words:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+// FlatMapFunction that tokenizes a String by whitespace characters and emits all String tokens.
+public class Tokenizer implements FlatMapFunction<String, String> {
+  @Override
+  public void flatMap(String value, Collector<String> out) {
+    for (String token : value.split("\\W")) {
+      out.collect(token);
+    }
+  }
+}
+
+// [...]
+DataSet<String> textLines = // [...]
+DataSet<String> words = textLines.flatMap(new Tokenizer());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val textLines: DataSet[String] = // [...]
+val words = textLines.flatMap { _.split(" ") }
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ words = lines.flat_map(lambda x,c: [line.split() for line in x], STRING)
+~~~
+
+</div>
+</div>
+
+### MapPartition
+
+MapPartition transforms a parallel partition in a single function call. The map-partition function
+gets the partition as Iterable and can produce an arbitrary number of result values. The number of elements in each partition depends on the degree-of-parallelism
+and previous operations.
+
+The following code transforms a DataSet of text lines into a DataSet of counts per partition:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+public class PartitionCounter implements MapPartitionFunction<String, Long> {
+
+  public void mapPartition(Iterable<String> values, Collector<Long> out) {
+    long c = 0;
+    for (String s : values) {
+      c++;
+    }
+    out.collect(c);
+  }
+}
+
+// [...]
+DataSet<String> textLines = // [...]
+DataSet<Long> counts = textLines.mapPartition(new PartitionCounter());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val textLines: DataSet[String] = // [...]
+// Some is required because the return value must be a Collection.
+// There is an implicit conversion from Option to a Collection.
+val counts = texLines.mapPartition { in => Some(in.size) }
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ counts = lines.map_partition(lambda x,c: [sum(1 for _ in x)], INT)
+~~~
+
+</div>
+</div>
+
+### Filter
+
+The Filter transformation applies a user-defined filter function on each element of a DataSet and retains only those elements for which the function returns `true`.
+
+The following code removes all Integers smaller than zero from a DataSet:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+// FilterFunction that filters out all Integers smaller than zero.
+public class NaturalNumberFilter implements FilterFunction<Integer> {
+  @Override
+  public boolean filter(Integer number) {
+    return number >= 0;
+  }
+}
+
+// [...]
+DataSet<Integer> intNumbers = // [...]
+DataSet<Integer> naturalNumbers = intNumbers.filter(new NaturalNumberFilter());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val intNumbers: DataSet[Int] = // [...]
+val naturalNumbers = intNumbers.filter { _ > 0 }
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ naturalNumbers = intNumbers.filter(lambda x: x > 0)
+~~~
+
+</div>
+</div>
+
+**IMPORTANT:** The system assumes that the function does not modify the elements on which the predicate is applied. Violating this assumption
+can lead to incorrect results.
+
+### Project (Tuple DataSets only) (Java/Python API Only)
+
+The Project transformation removes or moves Tuple fields of a Tuple DataSet.
+The `project(int...)` method selects Tuple fields that should be retained by their index and defines their order in the output Tuple.
+
+Projections do not require the definition of a user function.
+
+The following code shows different ways to apply a Project transformation on a DataSet:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<Tuple3<Integer, Double, String>> in = // [...]
+// converts Tuple3<Integer, Double, String> into Tuple2<String, Integer>
+DataSet<Tuple2<String, Integer>> out = in.project(2,0);
+~~~
+
+#### Projection with Type Hint
+
+Note that the Java compiler cannot infer the return type of `project` operator. This can cause a problem if you call another operator on a result of `project` operator such as:
+
+~~~java
+DataSet<Tuple5<String,String,String,String,String>> ds = ....
+DataSet<Tuple1<String>> ds2 = ds.project(0).distinct(0);
+~~~
+
+This problem can be overcome by hinting the return type of `project` operator like this:
+
+~~~java
+DataSet<Tuple1<String>> ds2 = ds.<Tuple1<String>>project(0).distinct(0);
+~~~
+
+### Transformations on Grouped DataSet
+
+The reduce operations can operate on grouped data sets. Specifying the key to
+be used for grouping can be done in many ways:
+
+- key expressions
+- a key-selector function
+- one or more field position keys (Tuple DataSet only)
+- Case Class fields (Case Classes only)
+
+Please look at the reduce examples to see how the grouping keys are specified.
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+out = in.project(2,0);
+~~~
+
+### Transformations on Grouped DataSet
+
+The reduce operations can operate on grouped data sets. Specifying the key to
+be used for grouping can be done using one or more field position keys (Tuple DataSet only).
+
+Please look at the reduce examples to see how the grouping keys are specified.
+
+</div>
+</div>
+
+### Reduce on Grouped DataSet
+
+A Reduce transformation that is applied on a grouped DataSet reduces each group to a single
+element using a user-defined reduce function.
+For each group of input elements, a reduce function successively combines pairs of elements into one
+element until only a single element for each group remains.
+
+#### Reduce on DataSet Grouped by KeySelector Function
+
+A key-selector function extracts a key value from each element of a DataSet. The extracted key
+value is used to group the DataSet.
+The following code shows how to group a POJO DataSet using a key-selector function and to reduce it
+with a reduce function.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+// some ordinary POJO
+public class WC {
+  public String word;
+  public int count;
+  // [...]
+}
+
+// ReduceFunction that sums Integer attributes of a POJO
+public class WordCounter implements ReduceFunction<WC> {
+  @Override
+  public WC reduce(WC in1, WC in2) {
+    return new WC(in1.word, in1.count + in2.count);
+  }
+}
+
+// [...]
+DataSet<WC> words = // [...]
+DataSet<WC> wordCounts = words
+                         // DataSet grouping on field "word"
+                         .groupBy("word")
+                         // apply ReduceFunction on grouped DataSet
+                         .reduce(new WordCounter());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+// some ordinary POJO
+class WC(val word: String, val count: Int) {
+  def this() {
+    this(null, -1)
+  }
+  // [...]
+}
+
+val words: DataSet[WC] = // [...]
+val wordCounts = words.groupBy { _.word } reduce {
+  (w1, w2) => new WC(w1.word, w1.count + w2.count)
+}
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+Not supported.
+~~~
+</div>
+</div>
+
+#### Reduce on DataSet Grouped by Field Position Keys (Tuple DataSets only)
+
+Field position keys specify one or more fields of a Tuple DataSet that are used as grouping keys.
+The following code shows how to use field position keys and apply a reduce function
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<Tuple3<String, Integer, Double>> tuples = // [...]
+DataSet<Tuple3<String, Integer, Double>> reducedTuples =
+                                         tuples
+                                         // group DataSet on first and second field of Tuple
+                                         .groupBy(0,1)
+                                         // apply ReduceFunction on grouped DataSet
+                                         .reduce(new MyTupleReducer());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val tuples = DataSet[(String, Int, Double)] = // [...]
+// group on the first and second Tuple field
+val reducedTuples = tuples.groupBy(0, 1).reduce { ... }
+~~~
+
+
+#### Reduce on DataSet grouped by Case Class Fields
+
+When using Case Classes you can also specify the grouping key using the names of the fields:
+
+~~~scala
+case class MyClass(val a: String, b: Int, c: Double)
+val tuples = DataSet[MyClass] = // [...]
+// group on the first and second field
+val reducedTuples = tuples.groupBy("a", "b").reduce { ... }
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ reducedTuples = tuples.group_by(0, 1).reduce( ... )
+~~~
+
+</div>
+</div>
+
+### GroupReduce on Grouped DataSet
+
+A GroupReduce transformation that is applied on a grouped DataSet calls a user-defined
+group-reduce function for each group. The difference
+between this and *Reduce* is that the user defined function gets the whole group at once.
+The function is invoked with an Iterable over all elements of a group and can return an arbitrary
+number of result elements.
+
+#### GroupReduce on DataSet Grouped by Field Position Keys (Tuple DataSets only)
+
+The following code shows how duplicate strings can be removed from a DataSet grouped by Integer.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+public class DistinctReduce
+         implements GroupReduceFunction<Tuple2<Integer, String>, Tuple2<Integer, String>> {
+
+  @Override
+  public void reduce(Iterable<Tuple2<Integer, String>> in, Collector<Tuple2<Integer, String>> out) {
+
+    Set<String> uniqStrings = new HashSet<String>();
+    Integer key = null;
+
+    // add all strings of the group to the set
+    for (Tuple2<Integer, String> t : in) {
+      key = t.f0;
+      uniqStrings.add(t.f1);
+    }
+
+    // emit all unique strings.
+    for (String s : uniqStrings) {
+      out.collect(new Tuple2<Integer, String>(key, s));
+    }
+  }
+}
+
+// [...]
+DataSet<Tuple2<Integer, String>> input = // [...]
+DataSet<Tuple2<Integer, String>> output = input
+                           .groupBy(0)            // group DataSet by the first tuple field
+                           .reduceGroup(new DistinctReduce());  // apply GroupReduceFunction
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val input: DataSet[(Int, String)] = // [...]
+val output = input.groupBy(0).reduceGroup {
+      (in, out: Collector[(Int, String)]) =>
+        in.toSet foreach (out.collect)
+    }
+~~~
+
+#### GroupReduce on DataSet Grouped by Case Class Fields
+
+Works analogous to grouping by Case Class fields in *Reduce* transformations.
+
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ class DistinctReduce(GroupReduceFunction):
+   def reduce(self, iterator, collector):
+     dic = dict()
+     for value in iterator:
+       dic[value[1]] = 1
+     for key in dic.keys():
+       collector.collect(key)
+
+ output = data.group_by(0).reduce_group(DistinctReduce(), STRING)
+~~~
+
+
+</div>
+</div>
+
+#### GroupReduce on DataSet Grouped by KeySelector Function
+
+Works analogous to key-selector functions in *Reduce* transformations.
+
+#### GroupReduce on sorted groups
+
+A group-reduce function accesses the elements of a group using an Iterable. Optionally, the Iterable can hand out the elements of a group in a specified order. In many cases this can help to reduce the complexity of a user-defined
+group-reduce function and improve its efficiency.
+
+The following code shows another example how to remove duplicate Strings in a DataSet grouped by an Integer and sorted by String.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+// GroupReduceFunction that removes consecutive identical elements
+public class DistinctReduce
+         implements GroupReduceFunction<Tuple2<Integer, String>, Tuple2<Integer, String>> {
+
+  @Override
+  public void reduce(Iterable<Tuple2<Integer, String>> in, Collector<Tuple2<Integer, String>> out) {
+    Integer key = null;
+    String comp = null;
+
+    for (Tuple2<Integer, String> t : in) {
+      key = t.f0;
+      String next = t.f1;
+
+      // check if strings are different
+      if (com == null || !next.equals(comp)) {
+        out.collect(new Tuple2<Integer, String>(key, next));
+        comp = next;
+      }
+    }
+  }
+}
+
+// [...]
+DataSet<Tuple2<Integer, String>> input = // [...]
+DataSet<Double> output = input
+                         .groupBy(0)                         // group DataSet by first field
+                         .sortGroup(1, Order.ASCENDING)      // sort groups on second tuple field
+                         .reduceGroup(new DistinctReduce());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val input: DataSet[(Int, String)] = // [...]
+val output = input.groupBy(0).sortGroup(1, Order.ASCENDING).reduceGroup {
+      (in, out: Collector[(Int, String)]) =>
+        var prev: (Int, String) = null
+        for (t <- in) {
+          if (prev == null || prev != t)
+            out.collect(t)
+        }
+    }
+
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ class DistinctReduce(GroupReduceFunction):
+   def reduce(self, iterator, collector):
+     dic = dict()
+     for value in iterator:
+       dic[value[1]] = 1
+     for key in dic.keys():
+       collector.collect(key)
+
+ output = data.group_by(0).sort_group(1, Order.ASCENDING).reduce_group(DistinctReduce(), STRING)
+~~~
+
+
+</div>
+</div>
+
+**Note:** A GroupSort often comes for free if the grouping is established using a sort-based execution strategy of an operator before the reduce operation.
+
+#### Combinable GroupReduceFunctions
+
+In contrast to a reduce function, a group-reduce function is not
+necessarily combinable. In order to make a group-reduce function
+combinable, you need to use the `RichGroupReduceFunction` variant,
+implement (override) the `combine()` method, and annotate the
+`RichGroupReduceFunction` with the `@Combinable` annotation as shown here:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+// Combinable GroupReduceFunction that computes two sums.
+// Note that we use the RichGroupReduceFunction because it defines the combine method
+@Combinable
+public class MyCombinableGroupReducer
+         extends RichGroupReduceFunction<Tuple3<String, Integer, Double>,
+                                     Tuple3<String, Integer, Double>> {
+  @Override
+  public void reduce(Iterable<Tuple3<String, Integer, Double>> in,
+                     Collector<Tuple3<String, Integer, Double>> out) {
+
+    String key = null;
+    int intSum = 0;
+    double doubleSum = 0.0;
+
+    for (Tuple3<String, Integer, Double> curr : in) {
+      key = curr.f0;
+      intSum += curr.f1;
+      doubleSum += curr.f2;
+    }
+    // emit a tuple with both sums
+    out.collect(new Tuple3<String, Integer, Double>(key, intSum, doubleSum));
+  }
+
+  @Override
+  public void combine(Iterable<Tuple3<String, Integer, Double>> in,
+                      Collector<Tuple3<String, Integer, Double>> out) {
+    // in some cases combine() calls can simply be forwarded to reduce().
+    this.reduce(in, out);
+  }
+}
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+
+// Combinable GroupReduceFunction that computes two sums.
+// Note that we use the RichGroupReduceFunction because it defines the combine method
+@Combinable
+class MyCombinableGroupReducer
+  extends RichGroupReduceFunction[(String, Int, Double), (String, Int, Double)] {}
+
+  def reduce(
+      in: java.lang.Iterable[(String, Int, Double)],
+      out: Collector[(String, Int, Double)]): Unit = {
+
+    val key: String = null
+    val intSum = 0
+    val doubleSum = 0.0
+
+    for (curr <- in) {
+      key = curr._1
+      intSum += curr._2
+      doubleSum += curr._3
+    }
+    // emit a tuple with both sums
+    out.collect(key, intSum, doubleSum);
+  }
+
+  def combine(
+      in: java.lang.Iterable[(String, Int, Double)],
+      out: Collector[(String, Int, Double)]): Unit = {
+    // in some cases combine() calls can simply be forwarded to reduce().
+    this.reduce(in, out)
+  }
+}
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ class GroupReduce(GroupReduceFunction):
+   def reduce(self, iterator, collector):
+     key, int_sum, float_sum = iterator.next()
+     for value in iterator:
+       int_sum += value[1]
+       float_sum += value[2]
+     collector.collect((key, int_sum, float_sum))
+   # in some cases combine() calls can simply be forwarded to reduce().
+   def combine(self, iterator, collector):
+     return self.reduce(iterator, collector)
+
+data.reduce_group(GroupReduce(), (STRING, INT, FLOAT), combinable=True)
+~~~
+
+</div>
+</div>
+
+### GroupCombine on a Grouped DataSet
+
+The GroupCombine transformation is the generalized form of the combine step in
+the Combinable GroupReduceFunction. It is generalized in the sense that it
+allows combining of input type `I` to an arbitrary output type `O`. In contrast,
+the combine step in the GroupReduce only allows combining from input type `I` to
+output type `I`. This is because the reduce step in the GroupReduceFunction
+expects input type `I`.
+
+In some applications, it is desirable to combine a DataSet into an intermediate
+format before performing additional transformations (e.g. to reduce data
+size). This can be achieved with a ComineGroup transformation with very little
+costs.
+
+**Note:** The GroupCombine on a Grouped DataSet is performed in memory with a
+  greedy strategy which may not process all data at once but in multiple
+  steps. It is also performed on the individual partitions without a data
+  exchange like in a GroupReduce transformation. This may lead to partial
+  results.
+
+The following example demonstrates the use of a CombineGroup transformation for
+an alternative WordCount implementation. In the implementation,
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<String> input = [..] // The words received as input
+DataSet<String> groupedInput = input.groupBy(0); // group identical words
+
+DataSet<Tuple2<String, Integer>> combinedWords = groupedInput.combineGroup(new GroupCombineFunction<String, Tuple2<String, Integer>() {
+
+    public void combine(Iterable<String> words, Collector<Tuple2<String, Integer>>) { // combine
+        int count = 0;
+        for (String word : words) {
+            count++;
+        }
+        out.collect(new Tuple2(word, count));
+    }
+});
+
+DataSet<Tuple2<String, Integer>> groupedCombinedWords = combinedWords.groupBy(0); // group by words again
+
+DataSet<Tuple2<String, Integer>> output = combinedWords.reduceGroup(new GroupReduceFunction() { // group reduce with full data exchange
+
+    public void reduce(Iterable<Tuple2<String, Integer>>, Collector<Tuple2<String, Integer>>) {
+        int count = 0;
+        for (Tuple2<String, Integer> word : words) {
+            count++;
+        }
+        out.collect(new Tuple2(word, count));
+    }
+});
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val input: DataSet[String] = [..] // The words received as input
+val groupedInput: DataSet[String] = input.groupBy(0)
+
+val combinedWords: DataSet[(String, Int)] = groupedInput.combineGroup {
+    (words, out: Collector[(String, Int)]) =>
+        var count = 0
+        for (word <- words) {
+            count++
+        }
+        out.collect(word, count)
+}
+
+val groupedCombinedWords: DataSet[(String, Int)] = combinedWords.groupBy(0)
+
+val output: DataSet[(String, Int)] = groupedInput.reduceGroup {
+    (words, out: Collector[(String, Int)]) =>
+        var count = 0
+        for ((word, Int) <- words) {
+            count++
+        }
+        out.collect(word, count)
+}
+
+~~~
+
+</div>
+</div>
+
+The above alternative WordCount implementation demonstrates how the GroupCombine
+combines words before performing the GroupReduce transformation. The above
+example is just a proof of concept. Note, how the combine step changes the type
+of the DataSet which would normally required an additional Map transformation
+before executing the GroupReduce.
+
+### Aggregate on Grouped Tuple DataSet
+
+There are some common aggregation operations that are frequently used. The Aggregate transformation provides the following build-in aggregation functions:
+
+- Sum,
+- Min, and
+- Max.
+
+The Aggregate transformation can only be applied on a Tuple DataSet and supports only field positions keys for grouping.
+
+The following code shows how to apply an Aggregation transformation on a DataSet grouped by field position keys:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<Tuple3<Integer, String, Double>> input = // [...]
+DataSet<Tuple3<Integer, String, Double>> output = input
+                                   .groupBy(1)        // group DataSet on second field
+                                   .aggregate(SUM, 0) // compute sum of the first field
+                                   .and(MIN, 2);      // compute minimum of the third field
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val input: DataSet[(Int, String, Double)] = // [...]
+val output = input.groupBy(1).aggregate(SUM, 0).and(MIN, 2)
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+Not supported.
+~~~
+
+</div>
+</div>
+
+To apply multiple aggregations on a DataSet it is necessary to use the `.and()` function after the first aggregate, that means `.aggregate(SUM, 0).and(MIN, 2)` produces the sum of field 0 and the minimum of field 2 of the original DataSet.
+In contrast to that `.aggregate(SUM, 0).aggregate(MIN, 2)` will apply an aggregation on an aggregation. In the given example it would produce the minimum of field 2 after calculating the sum of field 0 grouped by field 1.
+
+**Note:** The set of aggregation functions will be extended in the future.
+
+### Reduce on full DataSet
+
+The Reduce transformation applies a user-defined reduce function to all elements of a DataSet.
+The reduce function subsequently combines pairs of elements into one element until only a single element remains.
+
+The following code shows how to sum all elements of an Integer DataSet:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+// ReduceFunction that sums Integers
+public class IntSummer implements ReduceFunction<Integer> {
+  @Override
+  public Integer reduce(Integer num1, Integer num2) {
+    return num1 + num2;
+  }
+}
+
+// [...]
+DataSet<Integer> intNumbers = // [...]
+DataSet<Integer> sum = intNumbers.reduce(new IntSummer());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val intNumbers = env.fromElements(1,2,3)
+val sum = intNumbers.reduce (_ + _)
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ intNumbers = env.from_elements(1,2,3)
+ sum = intNumbers.reduce(lambda x,y: x + y)
+~~~
+
+</div>
+</div>
+
+Reducing a full DataSet using the Reduce transformation implies that the final Reduce operation cannot be done in parallel. However, a reduce function is automatically combinable such that a Reduce transformation does not limit scalability for most use cases.
+
+### GroupReduce on full DataSet
+
+The GroupReduce transformation applies a user-defined group-reduce function on all elements of a DataSet.
+A group-reduce can iterate over all elements of DataSet and return an arbitrary number of result elements.
+
+The following example shows how to apply a GroupReduce transformation on a full DataSet:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<Integer> input = // [...]
+// apply a (preferably combinable) GroupReduceFunction to a DataSet
+DataSet<Double> output = input.reduceGroup(new MyGroupReducer());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val input: DataSet[Int] = // [...]
+val output = input.reduceGroup(new MyGroupReducer())
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ output = data.reduce_group(MyGroupReducer(), ... )
+~~~
+
+</div>
+</div>
+
+**Note:** A GroupReduce transformation on a full DataSet cannot be done in parallel if the
+group-reduce function is not combinable. Therefore, this can be a very compute intensive operation.
+See the paragraph on "Combineable Group-Reduce Functions" above to learn how to implement a
+combinable group-reduce function.
+
+### GroupCombine on a full DataSet
+
+The GroupCombine on a full DataSet works similar to the GroupCombine on a
+grouped DataSet. The data is partitioned on all nodes and then combined in a
+greedy fashion (i.e. only data fitting into memory is combined at once).
+
+### Aggregate on full Tuple DataSet
+
+There are some common aggregation operations that are frequently used. The Aggregate transformation
+provides the following build-in aggregation functions:
+
+- Sum,
+- Min, and
+- Max.
+
+The Aggregate transformation can only be applied on a Tuple DataSet.
+
+The following code shows how to apply an Aggregation transformation on a full DataSet:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<Tuple2<Integer, Double>> input = // [...]
+DataSet<Tuple2<Integer, Double>> output = input
+                                     .aggregate(SUM, 0)    // compute sum of the first field
+                                     .and(MIN, 1);    // compute minimum of the second field
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val input: DataSet[(Int, String, Double)] = // [...]
+val output = input.aggregate(SUM, 0).and(MIN, 2)
+
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+Not supported.
+~~~
+
+</div>
+</div>
+
+**Note:** Extending the set of supported aggregation functions is on our roadmap.
+
+### Join
+
+The Join transformation joins two DataSets into one DataSet. The elements of both DataSets are joined on one or more keys which can be specified using
+
+- a kex expression
+- a key-selector function
+- one or more field position keys (Tuple DataSet only).
+- Case Class Fields
+
+There are a few different ways to perform a Join transformation which are shown in the following.
+
+#### Default Join (Join into Tuple2)
+
+The default Join transformation produces a new Tuple DataSet with two fields. Each tuple holds a joined element of the first input DataSet in the first tuple field and a matching element of the second input DataSet in the second field.
+
+The following code shows a default Join transformation using field position keys:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+public static class User { public String name; public int zip; }
+public static class Store { public Manager mgr; public int zip; }
+DataSet<User> input1 = // [...]
+DataSet<Store> input2 = // [...]
+// result dataset is typed as Tuple2
+DataSet<Tuple2<User, Store>>
+            result = input1.join(input2)
+                           .where("zip")       // key of the first input (users)
+                           .equalTo("zip");    // key of the second input (stores)
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val input1: DataSet[(Int, String)] = // [...]
+val input2: DataSet[(Double, Int)] = // [...]
+val result = input1.join(input2).where(0).equalTo(1)
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ result = input1.join(input2).where(0).equal_to(1)
+~~~
+
+</div>
+</div>
+
+#### Join with Join-Function
+
+A Join transformation can also call a user-defined join function to process joining tuples.
+A join function receives one element of the first input DataSet and one element of the second input DataSet and returns exactly one element.
+
+The following code performs a join of DataSet with custom java objects and a Tuple DataSet using key-selector functions and shows how to use a user-defined join function:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+// some POJO
+public class Rating {
+  public String name;
+  public String category;
+  public int points;
+}
+
+// Join function that joins a custom POJO with a Tuple
+public class PointWeighter
+         implements JoinFunction<Rating, Tuple2<String, Double>, Tuple2<String, Double>> {
+
+  @Override
+  public Tuple2<String, Double> join(Rating rating, Tuple2<String, Double> weight) {
+    // multiply the points and rating and construct a new output tuple
+    return new Tuple2<String, Double>(rating.name, rating.points * weight.f1);
+  }
+}
+
+DataSet<Rating> ratings = // [...]
+DataSet<Tuple2<String, Double>> weights = // [...]
+DataSet<Tuple2<String, Double>>
+            weightedRatings =
+            ratings.join(weights)
+
+                   // key of the first input
+                   .where("category")
+
+                   // key of the second input
+                   .equalTo("f0")
+
+                   // applying the JoinFunction on joining pairs
+                   .with(new PointWeighter());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+case class Rating(name: String, category: String, points: Int)
+
+val ratings: DataSet[Ratings] = // [...]
+val weights: DataSet[(String, Double)] = // [...]
+
+val weightedRatings = ratings.join(weights).where("category").equalTo(0) {
+  (rating, weight) => (rating.name, rating.points * weight._2)
+}
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ class PointWeighter(JoinFunction):
+   def join(self, rating, weight):
+     return (rating[0], rating[1] * weight[1]) 
+       if value1[3]:
+
+ weightedRatings = 
+   ratings.join(weights).where(0).equal_to(0). \
+   with(new PointWeighter(), (STRING, FLOAT));
+~~~
+
+</div>
+</div>
+
+#### Join with Flat-Join Function
+
+Analogous to Map and FlatMap, a FlatJoin behaves in the same
+way as a Join, but instead of returning one element, it can
+return (collect), zero, one, or more elements.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+public class PointWeighter
+         implements FlatJoinFunction<Rating, Tuple2<String, Double>, Tuple2<String, Double>> {
+  @Override
+  public void join(Rating rating, Tuple2<String, Double> weight,
+	  Collector<Tuple2<String, Double>> out) {
+	if (weight.f1 > 0.1) {
+		out.collect(new Tuple2<String, Double>(rating.name, rating.points * weight.f1));
+	}
+  }
+}
+
+DataSet<Tuple2<String, Double>>
+            weightedRatings =
+            ratings.join(weights) // [...]
+~~~
+
+#### Join with Projection (Java/Python Only)
+
+A Join transformation can construct result tuples using a projection as shown here:
+
+~~~java
+DataSet<Tuple3<Integer, Byte, String>> input1 = // [...]
+DataSet<Tuple2<Integer, Double>> input2 = // [...]
+DataSet<Tuple4<Integer, String, Double, Byte>
+            result =
+            input1.join(input2)
+                  // key definition on first DataSet using a field position key
+                  .where(0)
+                  // key definition of second DataSet using a field position key
+                  .equalTo(0)
+                  // select and reorder fields of matching tuples
+                  .projectFirst(0,2).projectSecond(1).projectFirst(1);
+~~~
+
+`projectFirst(int...)` and `projectSecond(int...)` select the fields of the first and second joined input that should be assembled into an output Tuple. The order of indexes defines the order of fields in the output tuple.
+The join projection works also for non-Tuple DataSets. In this case, `projectFirst()` or `projectSecond()` must be called without arguments to add a joined element to the output Tuple.
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+case class Rating(name: String, category: String, points: Int)
+
+val ratings: DataSet[Ratings] = // [...]
+val weights: DataSet[(String, Double)] = // [...]
+
+val weightedRatings = ratings.join(weights).where("category").equalTo(0) {
+  (rating, weight, out: Collector[(String, Double)] =>
+    if (weight._2 > 0.1) out.collect(left.name, left.points * right._2)
+}
+
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+#### Join with Projection (Java/Python Only)
+
+A Join transformation can construct result tuples using a projection as shown here:
+
+~~~python
+ result = input1.join(input2).where(0).equal_to(0) \ 
+  .project_first(0,2).project_second(1).project_first(1);
+~~~
+
+`project_first(int...)` and `project_second(int...)` select the fields of the first and second joined input that should be assembled into an output Tuple. The order of indexes defines the order of fields in the output tuple.
+The join projection works also for non-Tuple DataSets. In this case, `project_first()` or `project_second()` must be called without arguments to add a joined element to the output Tuple.
+
+</div>
+</div>
+
+#### Join with DataSet Size Hint
+
+In order to guide the optimizer to pick the right execution strategy, you can hint the size of a DataSet to join as shown here:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<Tuple2<Integer, String>> input1 = // [...]
+DataSet<Tuple2<Integer, String>> input2 = // [...]
+
+DataSet<Tuple2<Tuple2<Integer, String>, Tuple2<Integer, String>>>
+            result1 =
+            // hint that the second DataSet is very small
+            input1.joinWithTiny(input2)
+                  .where(0)
+                  .equalTo(0);
+
+DataSet<Tuple2<Tuple2<Integer, String>, Tuple2<Integer, String>>>
+            result2 =
+            // hint that the second DataSet is very large
+            input1.joinWithHuge(input2)
+                  .where(0)
+                  .equalTo(0);
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val input1: DataSet[(Int, String)] = // [...]
+val input2: DataSet[(Int, String)] = // [...]
+
+// hint that the second DataSet is very small
+val result1 = input1.joinWithTiny(input2).where(0).equalTo(0)
+
+// hint that the second DataSet is very large
+val result1 = input1.joinWithHuge(input2).where(0).equalTo(0)
+
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+
+ #hint that the second DataSet is very small
+ result1 = input1.join_with_tiny(input2).where(0).equal_to(0)
+
+ #hint that the second DataSet is very large
+ result1 = input1.join_with_huge(input2).where(0).equal_to(0)
+
+~~~
+
+</div>
+</div>
+
+#### Join Algorithm Hints
+
+The Flink runtime can execute joins in various ways. Each possible way outperforms the others under
+different circumstances. The system tries to pick a reasonable way automatically, but allows you
+to manually pick a strategy, in case you want to enforce a specific way of executing the join.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<SomeType> input1 = // [...]
+DataSet<AnotherType> input2 = // [...]
+
+DataSet<Tuple2<SomeType, AnotherType> result =
+      input1.join(input2, BROADCAST_HASH_FIRST)
+            .where("id").equalTo("key");
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val input1: DataSet[SomeType] = // [...]
+val input2: DataSet[AnotherType] = // [...]
+
+// hint that the second DataSet is very small
+val result1 = input1.join(input2, BROADCAST_HASH_FIRST).where("id").equalTo("key")
+
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+Not supported.
+~~~
+
+</div>
+</div>
+
+The following hints are available:
+
+* OPTIMIZER_CHOOSES: Equivalent to not giving a hint at all, leaves the choice to the system.
+
+* BROADCAST_HASH_FIRST: Broadcasts the first input and builds a hash table from it, which is
+  probed by the second input. A good strategy if the first input is very small.
+
+* BROADCAST_HASH_SECOND: Broadcasts the second input and builds a hash table from it, which is
+  probed by the first input. A good strategy if the second input is very small.
+
+* REPARTITION_HASH_FIRST: The system partitions (shuffles) each input (unless the input is already
+  partitioned) and builds a hash table from the first input. This strategy is good if the first
+  input is smaller than the second, but both inputs are still large.
+  *Note:* This is the default fallback strategy that the system uses if no size estimates can be made
+  and no pre-existing partitiongs and sort-orders can be re-used.
+
+* REPARTITION_HASH_SECOND: The system partitions (shuffles) each input (unless the input is already
+  partitioned) and builds a hash table from the second input. This strategy is good if the second
+  input is smaller than the first, but both inputs are still large.
+
+* REPARTITION_SORT_MERGE: The system partitions (shuffles) each input (unless the input is already
+  partitioned) and sorts each input (unless it is already sorted). The inputs are joined by
+  a streamed merge of the sorted inputs. This strategy is good if one or both of the inputs are
+  already sorted.
+
+
+### Cross
+
+The Cross transformation combines two DataSets into one DataSet. It builds all pairwise combinations of the elements of both input DataSets, i.e., it builds a Cartesian product.
+The Cross transformation either calls a user-defined cross function on each pair of elements or outputs a Tuple2. Both modes are shown in the following.
+
+**Note:** Cross is potentially a *very* compute-intensive operation which can challenge even large compute clusters!
+
+#### Cross with User-Defined Function
+
+A Cross transformation can call a user-defined cross function. A cross function receives one element of the first input and one element of the second input and returns exactly one result element.
+
+The following code shows how to apply a Cross transformation on two DataSets using a cross function:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+public class Coord {
+  public int id;
+  public int x;
+  public int y;
+}
+
+// CrossFunction computes the Euclidean distance between two Coord objects.
+public class EuclideanDistComputer
+         implements CrossFunction<Coord, Coord, Tuple3<Integer, Integer, Double>> {
+
+  @Override
+  public Tuple3<Integer, Integer, Double> cross(Coord c1, Coord c2) {
+    // compute Euclidean distance of coordinates
+    double dist = sqrt(pow(c1.x - c2.x, 2) + pow(c1.y - c2.y, 2));
+    return new Tuple3<Integer, Integer, Double>(c1.id, c2.id, dist);
+  }
+}
+
+DataSet<Coord> coords1 = // [...]
+DataSet<Coord> coords2 = // [...]
+DataSet<Tuple3<Integer, Integer, Double>>
+            distances =
+            coords1.cross(coords2)
+                   // apply CrossFunction
+                   .with(new EuclideanDistComputer());
+~~~
+
+#### Cross with Projection
+
+A Cross transformation can also construct result tuples using a projection as shown here:
+
+~~~java
+DataSet<Tuple3<Integer, Byte, String>> input1 = // [...]
+DataSet<Tuple2<Integer, Double>> input2 = // [...]
+DataSet<Tuple4<Integer, Byte, Integer, Double>
+            result =
+            input1.cross(input2)
+                  // select and reorder fields of matching tuples
+                  .projectSecond(0).projectFirst(1,0).projectSecond(1);
+~~~
+
+The field selection in a Cross projection works the same way as in the projection of Join results.
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+case class Coord(id: Int, x: Int, y: Int)
+
+val coords1: DataSet[Coord] = // [...]
+val coords2: DataSet[Coord] = // [...]
+
+val distances = coords1.cross(coords2) {
+  (c1, c2) =>
+    val dist = sqrt(pow(c1.x - c2.x, 2) + pow(c1.y - c2.y, 2))
+    (c1.id, c2.id, dist)
+}
+~~~
+
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ class Euclid(CrossFunction):
+   def cross(self, c1, c2):
+     return (c1[0], c2[0], sqrt(pow(c1[1] - c2.[1], 2) + pow(c1[2] - c2[2], 2)))
+
+ distances = coords1.cross(coords2).using(Euclid(), (INT,INT,FLOAT))
+~~~
+
+#### Cross with Projection
+
+A Cross transformation can also construct result tuples using a projection as shown here:
+
+~~~python
+result = input1.cross(input2).projectFirst(1,0).projectSecond(0,1);
+~~~
+
+The field selection in a Cross projection works the same way as in the projection of Join results.
+
+</div>
+</div>
+
+#### Cross with DataSet Size Hint
+
+In order to guide the optimizer to pick the right execution strategy, you can hint the size of a DataSet to cross as shown here:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<Tuple2<Integer, String>> input1 = // [...]
+DataSet<Tuple2<Integer, String>> input2 = // [...]
+
+DataSet<Tuple4<Integer, String, Integer, String>>
+            udfResult =
+                  // hint that the second DataSet is very small
+            input1.crossWithTiny(input2)
+                  // apply any Cross function (or projection)
+                  .with(new MyCrosser());
+
+DataSet<Tuple3<Integer, Integer, String>>
+            projectResult =
+                  // hint that the second DataSet is very large
+            input1.crossWithHuge(input2)
+                  // apply a projection (or any Cross function)
+                  .projectFirst(0,1).projectSecond(1);
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val input1: DataSet[(Int, String)] = // [...]
+val input2: DataSet[(Int, String)] = // [...]
+
+// hint that the second DataSet is very small
+val result1 = input1.crossWithTiny(input2)
+
+// hint that the second DataSet is very large
+val result1 = input1.crossWithHuge(input2)
+
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ #hint that the second DataSet is very small
+ result1 = input1.cross_with_tiny(input2)
+
+ #hint that the second DataSet is very large
+ result1 = input1.cross_with_huge(input2)
+
+~~~
+
+</div>
+</div>
+
+### CoGroup
+
+The CoGroup transformation jointly processes groups of two DataSets. Both DataSets are grouped on a defined key and groups of both DataSets that share the same key are handed together to a user-defined co-group function. If for a specific key only one DataSet has a group, the co-group function is called with this group and an empty group.
+A co-group function can separately iterate over the elements of both groups and return an arbitrary number of result elements.
+
+Similar to Reduce, GroupReduce, and Join, keys can be defined using the different key-selection methods.
+
+#### CoGroup on DataSets
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+The example shows how to group by Field Position Keys (Tuple DataSets only). You can do the same with Pojo-types and key expressions.
+
+~~~java
+// Some CoGroupFunction definition
+class MyCoGrouper
+         implements CoGroupFunction<Tuple2<String, Integer>, Tuple2<String, Double>, Double> {
+
+  @Override
+  public void coGroup(Iterable<Tuple2<String, Integer>> iVals,
+                      Iterable<Tuple2<String, Double>> dVals,
+                      Collector<Double> out) {
+
+    Set<Integer> ints = new HashSet<Integer>();
+
+    // add all Integer values in group to set
+    for (Tuple2<String, Integer>> val : iVals) {
+      ints.add(val.f1);
+    }
+
+    // multiply each Double value with each unique Integer values of group
+    for (Tuple2<String, Double> val : dVals) {
+      for (Integer i : ints) {
+        out.collect(val.f1 * i);
+      }
+    }
+  }
+}
+
+// [...]
+DataSet<Tuple2<String, Integer>> iVals = // [...]
+DataSet<Tuple2<String, Double>> dVals = // [...]
+DataSet<Double> output = iVals.coGroup(dVals)
+                         // group first DataSet on first tuple field
+                         .where(0)
+                         // group second DataSet on first tuple field
+                         .equalTo(0)
+                         // apply CoGroup function on each pair of groups
+                         .with(new MyCoGrouper());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val iVals: DataSet[(String, Int)] = // [...]
+val dVals: DataSet[(String, Double)] = // [...]
+
+val output = iVals.coGroup(dVals).where(0).equalTo(0) {
+  (iVals, dVals, out: Collector[Double]) =>
+    val ints = iVals map { _._2 } toSet
+
+    for (dVal <- dVals) {
+      for (i <- ints) {
+        out.collect(dVal._2 * i)
+      }
+    }
+}
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ class CoGroup(CoGroupFunction):
+   def co_group(self, ivals, dvals, collector):
+     ints = dict()
+     # add all Integer values in group to set
+     for value in ivals:
+       ints[value[1]] = 1
+     # multiply each Double value with each unique Integer values of group
+     for value in dvals:
+       for i in ints.keys():
+         collector.collect(value[1] * i)
+
+
+ output = ivals.co_group(dvals).where(0).equal_to(0).using(CoGroup(), DOUBLE)
+~~~
+
+</div>
+</div>
+
+
+### Union
+
+Produces the union of two DataSets, which have to be of the same type. A union of more than two DataSets can be implemented with multiple union calls, as shown here:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<Tuple2<String, Integer>> vals1 = // [...]
+DataSet<Tuple2<String, Integer>> vals2 = // [...]
+DataSet<Tuple2<String, Integer>> vals3 = // [...]
+DataSet<Tuple2<String, Integer>> unioned = vals1.union(vals2).union(vals3);
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val vals1: DataSet[(String, Int)] = // [...]
+val vals2: DataSet[(String, Int)] = // [...]
+val vals3: DataSet[(String, Int)] = // [...]
+
+val unioned = vals1.union(vals2).union(vals3)
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+ unioned = vals1.union(vals2).union(vals3)
+~~~
+
+</div>
+</div>
+
+### Rebalance
+Evenly rebalances the parallel partitions of a DataSet to eliminate data skew.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<String> in = // [...]
+// rebalance DataSet and apply a Map transformation.
+DataSet<Tuple2<String, String>> out = in.rebalance()
+                                        .map(new Mapper());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val in: DataSet[String] = // [...]
+// rebalance DataSet and apply a Map transformation.
+val out = in.rebalance().map { ... }
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+Not supported.
+~~~
+
+</div>
+</div>
+
+
+### Hash-Partition
+
+Hash-partitions a DataSet on a given key.
+Keys can be specified as key expressions or field position keys (see [Reduce examples](#reduce-on-grouped-dataset) for how to specify keys).
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<Tuple2<String, Integer>> in = // [...]
+// hash-partition DataSet by String value and apply a MapPartition transformation.
+DataSet<Tuple2<String, String>> out = in.partitionByHash(0)
+                                        .mapPartition(new PartitionMapper());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val in: DataSet[(String, Int)] = // [...]
+// hash-partition DataSet by String value and apply a MapPartition transformation.
+val out = in.partitionByHash(0).mapPartition { ... }
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+Not supported.
+~~~
+
+</div>
+</div>
+
+### Sort Partition
+
+Locally sorts all partitions of a DataSet on a specified field in a specified order.
+Fields can be specified as field expressions or field positions (see [Reduce examples](#reduce-on-grouped-dataset) for how to specify keys).
+Partitions can be sorted on multiple fields by chaining `sortPartition()` calls.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<Tuple2<String, Integer>> in = // [...]
+// Locally sort partitions in ascending order on the second String field and
+// in descending order on the first String field.
+// Apply a MapPartition transformation on the sorted partitions.
+DataSet<Tuple2<String, String>> out = in.sortPartition(1, Order.ASCENDING)
+                                          .sortPartition(0, Order.DESCENDING)
+                                        .mapPartition(new PartitionMapper());
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val in: DataSet[(String, Int)] = // [...]
+// Locally sort partitions in ascending order on the second String field and
+// in descending order on the first String field.
+// Apply a MapPartition transformation on the sorted partitions.
+val out = in.sortPartition(1, Order.ASCENDING)
+              .sortPartition(0, Order.DESCENDING)
+            .mapPartition { ... }
+~~~
+
+</div>
+</div>
+
+### First-n
+
+Returns the first n (arbitrary) elements of a DataSet. First-n can be applied on a regular DataSet, a grouped DataSet, or a grouped-sorted DataSet. Grouping keys can be specified as key-selector functions or field position keys (see [Reduce examples](#reduce-on-grouped-dataset) for how to specify keys).
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+DataSet<Tuple2<String, Integer>> in = // [...]
+// Return the first five (arbitrary) elements of the DataSet
+DataSet<Tuple2<String, Integer>> out1 = in.first(5);
+
+// Return the first two (arbitrary) elements of each String group
+DataSet<Tuple2<String, Integer>> out2 = in.groupBy(0)
+                                          .first(2);
+
+// Return the first three elements of each String group ordered by the Integer field
+DataSet<Tuple2<String, Integer>> out3 = in.groupBy(0)
+                                          .sortGroup(1, Order.ASCENDING)
+                                          .first(3);
+~~~
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val in: DataSet[(String, Int)] = // [...]
+// Return the first five (arbitrary) elements of the DataSet
+val out1 = in.first(5)
+
+// Return the first two (arbitrary) elements of each String group
+val out2 = in.groupBy(0).first(2)
+
+// Return the first three elements of each String group ordered by the Integer field
+val out3 = in.groupBy(0).sortGroup(1, Order.ASCENDING).first(3)
+~~~
+
+</div>
+<div data-lang="python" markdown="1">
+
+~~~python
+Not supported.
+~~~
+
+</div>
+</div>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/example_connectors.md
----------------------------------------------------------------------
diff --git a/docs/apis/example_connectors.md b/docs/apis/example_connectors.md
new file mode 100644
index 0000000..bdfa8f9
--- /dev/null
+++ b/docs/apis/example_connectors.md
@@ -0,0 +1,205 @@
+---
+title:  "Connecting to other systems"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+## Reading from filesystems.
+
+Flink has build-in support for the following file systems:
+
+| Filesystem        | Since           | Scheme  | Notes |
+| ------------- |-------------| -----| ------ |
+| Hadoop Distributed File System (HDFS)  | 0.2 | `hdfs://`| All HDFS versions are supported |
+| Amazon S3    |  0.2 | `s3://` |   |
+| MapR file system      | 0.7-incubating      |  `maprfs://` | The user has to manually place the required jar files in the `lib/` dir |
+| Tachyon   |  0.9 | `tachyon://` | Support through Hadoop file system implementation (see below) |
+
+
+
+### Using Hadoop file systems with Apache Flink
+
+Apache Flink allows users to use any file system implementing the `org.apache.hadoop.fs.FileSystem`
+interface. Hadoop ships adapters for FTP, [Hftp](http://hadoop.apache.org/docs/r1.2.1/hftp.html), and others.
+
+Flink has integrated testcases to validate the integration with [Tachyon](http://tachyon-project.org/).
+Other file systems we tested the integration is the
+[Google Cloud Storage Connector for Hadoop](https://cloud.google.com/hadoop/google-cloud-storage-connector) and [XtreemFS](http://www.xtreemfs.org/).
+
+In order to use a Hadoop file system with Flink, make sure that the `flink-conf.yaml` has set the
+`fs.hdfs.hadoopconf` property set to the Hadoop configuration directory.
+In addition to that, the Hadoop configuration (in that directory) needs to have an entry for each supported file system.
+For example for tachyon support, there must be the following entry in the `core-site.xml` file:
+
+~~~xml
+<property>
+  <name>fs.tachyon.impl</name>
+  <value>tachyon.hadoop.TFS</value>
+</property>
+~~~
+
+Also, the required classes for using the file system need to be placed in the `lib/` folder of the Flink installation (on all machines running Flink). If putting the files into the directory is not possible, Flink is also respecting the `HADOOP_CLASSPATH` environment variable to add Hadoop jar files to the classpath.
+
+
+## Connecting to other systems using Input / Output Format wrappers for Hadoop
+
+Apache Flink allows users to access many different systems as data sources or sinks.
+The system is designed for very easy extensibility. Similar to Apache Hadoop, Flink has the concept
+of so called `InputFormat`s and `OutputFormat`s.
+
+One implementation of these `InputFormat`s is the `HadoopInputFormat`. This is a wrapper that allows
+users to use all existing Hadoop input formats with Flink.
+
+This section shows some examples for connecting Flink to other systems.
+[Read more about Hadoop compatibility in Flink](hadoop_compatibility.html).
+
+## Avro support in Flink
+
+Flink has extensive build-in support for [Apache Avro](http://avro.apache.org/). This allows to easily read from Avro files with Flink.
+Also, the serialization framework of Flink is able to handle classes generated from Avro schemas.
+
+In order to read data from an Avro file, you have to specify an `AvroInputFormat`.
+
+**Example**:
+
+~~~java
+AvroInputFormat<User> users = new AvroInputFormat<User>(in, User.class);
+DataSet<User> usersDS = env.createInput(users);
+~~~
+
+Note that `User` is a POJO generated by Avro. Flink also allows to perform string-based key selection of these POJOs. For example:
+
+~~~java
+usersDS.groupBy("name")
+~~~
+
+
+Note that using the `GenericData.Record` type is possible with Flink, but not recommended. Since the record contains the full schema, its very data intensive and thus probably slow to use.
+
+Flink's POJO field selection also works with POJOs generated from Avro. However, the usage is only possible if the field types are written correctly to the generated class. If a field is of type `Object` you can not use the field as a join or grouping key.
+Specifying a field in Avro like this `{"name": "type_double_test", "type": "double"},` works fine, however specifying it as a UNION-type with only one field (`{"name": "type_double_test", "type": ["double"]},`) will generate a field of type `Object`. Note that specifying nullable types (`{"name": "type_double_test", "type": ["null", "double"]},`) is possible!
+
+
+
+### Access Microsoft Azure Table Storage
+
+_Note: This example works starting from Flink 0.6-incubating_
+
+This example is using the `HadoopInputFormat` wrapper to use an existing Hadoop input format implementation for accessing [Azure's Table Storage](https://azure.microsoft.com/en-us/documentation/articles/storage-introduction/).
+
+1. Download and compile the `azure-tables-hadoop` project. The input format developed by the project is not yet available in Maven Central, therefore, we have to build the project ourselves.
+Execute the following commands:
+
+   ~~~bash
+   git clone https://github.com/mooso/azure-tables-hadoop.git
+   cd azure-tables-hadoop
+   mvn clean install
+   ~~~
+
+2. Setup a new Flink project using the quickstarts:
+
+   ~~~bash
+   curl http://flink.apache.org/q/quickstart.sh | bash
+   ~~~
+
+3. Add the following dependencies (in the `<dependencies>` section) to your `pom.xml` file:
+
+   ~~~xml
+   <dependency>
+       <groupId>org.apache.flink</groupId>
+       <artifactId>flink-hadoop-compatibility</artifactId>
+       <version>{{site.version}}</version>
+   </dependency>
+   <dependency>
+     <groupId>com.microsoft.hadoop</groupId>
+     <artifactId>microsoft-hadoop-azure</artifactId>
+     <version>0.0.4</version>
+   </dependency>
+   ~~~
+
+   `flink-hadoop-compatibility` is a Flink package that provides the Hadoop input format wrappers.
+   `microsoft-hadoop-azure` is adding the project we've build before to our project.
+
+The project is now prepared for starting to code. We recommend to import the project into an IDE, such as Eclipse or IntelliJ. (Import as a Maven project!).
+Browse to the code of the `Job.java` file. Its an empty skeleton for a Flink job.
+
+Paste the following code into it:
+
+~~~java
+import java.util.Map;
+import org.apache.flink.api.common.functions.MapFunction;
+import org.apache.flink.api.java.DataSet;
+import org.apache.flink.api.java.ExecutionEnvironment;
+import org.apache.flink.api.java.tuple.Tuple2;
+import org.apache.flink.hadoopcompatibility.mapreduce.HadoopInputFormat;
+import org.apache.hadoop.io.Text;
+import org.apache.hadoop.mapreduce.Job;
+import com.microsoft.hadoop.azure.AzureTableConfiguration;
+import com.microsoft.hadoop.azure.AzureTableInputFormat;
+import com.microsoft.hadoop.azure.WritableEntity;
+import com.microsoft.windowsazure.storage.table.EntityProperty;
+
+public class AzureTableExample {
+
+  public static void main(String[] args) throws Exception {
+    // set up the execution environment
+    final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+    
+    // create a  AzureTableInputFormat, using a Hadoop input format wrapper
+    HadoopInputFormat<Text, WritableEntity> hdIf = new HadoopInputFormat<Text, WritableEntity>(new AzureTableInputFormat(), Text.class, WritableEntity.class, new Job());
+
+    // set the Account URI, something like: https://apacheflink.table.core.windows.net
+    hdIf.getConfiguration().set(AzureTableConfiguration.Keys.ACCOUNT_URI.getKey(), "TODO"); 
+    // set the secret storage key here
+    hdIf.getConfiguration().set(AzureTableConfiguration.Keys.STORAGE_KEY.getKey(), "TODO");
+    // set the table name here
+    hdIf.getConfiguration().set(AzureTableConfiguration.Keys.TABLE_NAME.getKey(), "TODO");
+    
+    DataSet<Tuple2<Text, WritableEntity>> input = env.createInput(hdIf);
+    // a little example how to use the data in a mapper.
+    DataSet<String> fin = input.map(new MapFunction<Tuple2<Text,WritableEntity>, String>() {
+      @Override
+      public String map(Tuple2<Text, WritableEntity> arg0) throws Exception {
+        System.err.println("--------------------------------\nKey = "+arg0.f0);
+        WritableEntity we = arg0.f1;
+
+        for(Map.Entry<String, EntityProperty> prop : we.getProperties().entrySet()) {
+          System.err.println("key="+prop.getKey() + " ; value (asString)="+prop.getValue().getValueAsString());
+        }
+
+        return arg0.f0.toString();
+      }
+    });
+
+    // emit result (this works only locally)
+    fin.print();
+
+    // execute program
+    env.execute("Azure Example");
+  }
+}
+~~~
+
+The example shows how to access an Azure table and turn data into Flink's `DataSet` (more specifically, the type of the set is `DataSet<Tuple2<Text, WritableEntity>>`). With the `DataSet`, you can apply all known transformations to the DataSet.
+
+## Access MongoDB
+
+This [GitHub repository documents how to use MongoDB with Apache Flink (starting from 0.7-incubating)](https://github.com/okkam-it/flink-mongodb-test).
+
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/examples.md
----------------------------------------------------------------------
diff --git a/docs/apis/examples.md b/docs/apis/examples.md
new file mode 100644
index 0000000..29d1e1c
--- /dev/null
+++ b/docs/apis/examples.md
@@ -0,0 +1,490 @@
+---
+title:  "Bundled Examples"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+The following example programs showcase different applications of Flink 
+from simple word counting to graph algorithms. The code samples illustrate the 
+use of [Flink's API](programming_guide.html). 
+
+The full source code of the following and more examples can be found in the __flink-java-examples__
+or __flink-scala-examples__ module.
+
+* This will be replaced by the TOC
+{:toc}
+
+## Word Count
+WordCount is the "Hello World" of Big Data processing systems. It computes the frequency of words in a text collection. The algorithm works in two steps: First, the texts are splits the text to individual words. Second, the words are grouped and counted.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+DataSet<String> text = env.readTextFile("/path/to/file"); 
+
+DataSet<Tuple2<String, Integer>> counts = 
+        // split up the lines in pairs (2-tuples) containing: (word,1)
+        text.flatMap(new Tokenizer())
+        // group by the tuple field "0" and sum up tuple field "1"
+        .groupBy(0)
+        .sum(1);
+
+counts.writeAsCsv(outputPath, "\n", " ");
+
+// User-defined functions
+public static class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
+
+    @Override
+    public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
+        // normalize and split the line
+        String[] tokens = value.toLowerCase().split("\\W+");
+        
+        // emit the pairs
+        for (String token : tokens) {
+            if (token.length() > 0) {
+                out.collect(new Tuple2<String, Integer>(token, 1));
+            }   
+        }
+    }
+}
+~~~
+
+The {% gh_link /flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/wordcount/WordCount.java  "WordCount example" %} implements the above described algorithm with input parameters: `<text input path>, <output path>`. As test data, any text file will do.
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+val env = ExecutionEnvironment.getExecutionEnvironment
+
+// get input data
+val text = env.readTextFile("/path/to/file")
+
+val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
+  .map { (_, 1) }
+  .groupBy(0)
+  .sum(1)
+
+counts.writeAsCsv(outputPath, "\n", " ")
+~~~
+
+The {% gh_link /flink-examples/flink-scala-examples/src/main/scala/org/apache/flink/examples/scala/wordcount/WordCount.scala  "WordCount example" %} implements the above described algorithm with input parameters: `<text input path>, <output path>`. As test data, any text file will do.
+
+
+</div>
+</div>
+
+## Page Rank
+
+The PageRank algorithm computes the "importance" of pages in a graph defined by links, which point from one pages to another page. It is an iterative graph algorithm, which means that it repeatedly applies the same computation. In each iteration, each page distributes its current rank over all its neighbors, and compute its new rank as a taxed sum of the ranks it received from its neighbors. The PageRank algorithm was popularized by the Google search engine which uses the importance of webpages to rank the results of search queries.
+
+In this simple example, PageRank is implemented with a [bulk iteration](iterations.html) and a fixed number of iterations.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+// read the pages and initial ranks by parsing a CSV file
+DataSet<Tuple2<Long, Double>> pagesWithRanks = env.readCsvFile(pagesInputPath)
+						   .types(Long.class, Double.class)
+
+// the links are encoded as an adjacency list: (page-id, Array(neighbor-ids))
+DataSet<Tuple2<Long, Long[]>> pageLinkLists = getLinksDataSet(env);
+
+// set iterative data set
+IterativeDataSet<Tuple2<Long, Double>> iteration = pagesWithRanks.iterate(maxIterations);
+
+DataSet<Tuple2<Long, Double>> newRanks = iteration
+        // join pages with outgoing edges and distribute rank
+        .join(pageLinkLists).where(0).equalTo(0).flatMap(new JoinVertexWithEdgesMatch())
+        // collect and sum ranks
+        .groupBy(0).sum(1)
+        // apply dampening factor
+        .map(new Dampener(DAMPENING_FACTOR, numPages));
+
+DataSet<Tuple2<Long, Double>> finalPageRanks = iteration.closeWith(
+        newRanks, 
+        newRanks.join(iteration).where(0).equalTo(0)
+        // termination condition
+        .filter(new EpsilonFilter()));
+
+finalPageRanks.writeAsCsv(outputPath, "\n", " ");
+
+// User-defined functions
+
+public static final class JoinVertexWithEdgesMatch 
+                    implements FlatJoinFunction<Tuple2<Long, Double>, Tuple2<Long, Long[]>, 
+                                            Tuple2<Long, Double>> {
+
+    @Override
+    public void join(<Tuple2<Long, Double> page, Tuple2<Long, Long[]> adj, 
+                        Collector<Tuple2<Long, Double>> out) {
+        Long[] neigbors = adj.f1;
+        double rank = page.f1;
+        double rankToDistribute = rank / ((double) neigbors.length);
+            
+        for (int i = 0; i < neigbors.length; i++) {
+            out.collect(new Tuple2<Long, Double>(neigbors[i], rankToDistribute));
+        }
+    }
+}
+
+public static final class Dampener implements MapFunction<Tuple2<Long,Double>, Tuple2<Long,Double>> {
+    private final double dampening, randomJump;
+
+    public Dampener(double dampening, double numVertices) {
+        this.dampening = dampening;
+        this.randomJump = (1 - dampening) / numVertices;
+    }
+
+    @Override
+    public Tuple2<Long, Double> map(Tuple2<Long, Double> value) {
+        value.f1 = (value.f1 * dampening) + randomJump;
+        return value;
+    }
+}
+
+public static final class EpsilonFilter 
+                implements FilterFunction<Tuple2<Tuple2<Long, Double>, Tuple2<Long, Double>>> {
+
+    @Override
+    public boolean filter(Tuple2<Tuple2<Long, Double>, Tuple2<Long, Double>> value) {
+        return Math.abs(value.f0.f1 - value.f1.f1) > EPSILON;
+    }
+}
+~~~
+
+The {% gh_link /flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/graph/PageRankBasic.java "PageRank program" %} implements the above example.
+It requires the following parameters to run: `<pages input path>, <links input path>, <output path>, <num pages>, <num iterations>`.
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+// User-defined types
+case class Link(sourceId: Long, targetId: Long)
+case class Page(pageId: Long, rank: Double)
+case class AdjacencyList(sourceId: Long, targetIds: Array[Long])
+
+// set up execution environment
+val env = ExecutionEnvironment.getExecutionEnvironment
+
+// read the pages and initial ranks by parsing a CSV file
+val pages = env.readCsvFile[Page](pagesInputPath)
+
+// the links are encoded as an adjacency list: (page-id, Array(neighbor-ids))
+val links = env.readCsvFile[Link](linksInputPath)
+
+// assign initial ranks to pages
+val pagesWithRanks = pages.map(p => Page(p, 1.0 / numPages))
+
+// build adjacency list from link input
+val adjacencyLists = links
+  // initialize lists
+  .map(e => AdjacencyList(e.sourceId, Array(e.targetId)))
+  // concatenate lists
+  .groupBy("sourceId").reduce {
+  (l1, l2) => AdjacencyList(l1.sourceId, l1.targetIds ++ l2.targetIds)
+  }
+
+// start iteration
+val finalRanks = pagesWithRanks.iterateWithTermination(maxIterations) {
+  currentRanks =>
+    val newRanks = currentRanks
+      // distribute ranks to target pages
+      .join(adjacencyLists).where("pageId").equalTo("sourceId") {
+        (page, adjacent, out: Collector[Page]) =>
+        for (targetId <- adjacent.targetIds) {
+          out.collect(Page(targetId, page.rank / adjacent.targetIds.length))
+        }
+      }
+      // collect ranks and sum them up
+      .groupBy("pageId").aggregate(SUM, "rank")
+      // apply dampening factor
+      .map { p =>
+        Page(p.pageId, (p.rank * DAMPENING_FACTOR) + ((1 - DAMPENING_FACTOR) / numPages))
+      }
+
+    // terminate if no rank update was significant
+    val termination = currentRanks.join(newRanks).where("pageId").equalTo("pageId") {
+      (current, next, out: Collector[Int]) =>
+        // check for significant update
+        if (math.abs(current.rank - next.rank) > EPSILON) out.collect(1)
+    }
+
+    (newRanks, termination)
+}
+
+val result = finalRanks
+
+// emit result
+result.writeAsCsv(outputPath, "\n", " ")
+~~~
+
+he {% gh_link /flink-examples/flink-scala-examples/src/main/scala/org/apache/flink/examples/scala/graph/PageRankBasic.scala "PageRank program" %} implements the above example.
+It requires the following parameters to run: `<pages input path>, <links input path>, <output path>, <num pages>, <num iterations>`.
+</div>
+</div>
+
+Input files are plain text files and must be formatted as follows:
+- Pages represented as an (long) ID separated by new-line characters.
+    * For example `"1\n2\n12\n42\n63\n"` gives five pages with IDs 1, 2, 12, 42, and 63.
+- Links are represented as pairs of page IDs which are separated by space characters. Links are separated by new-line characters:
+    * For example `"1 2\n2 12\n1 12\n42 63\n"` gives four (directed) links (1)->(2), (2)->(12), (1)->(12), and (42)->(63).
+
+For this simple implementation it is required that each page has at least one incoming and one outgoing link (a page can point to itself).
+
+## Connected Components
+
+The Connected Components algorithm identifies parts of a larger graph which are connected by assigning all vertices in the same connected part the same component ID. Similar to PageRank, Connected Components is an iterative algorithm. In each step, each vertex propagates its current component ID to all its neighbors. A vertex accepts the component ID from a neighbor, if it is smaller than its own component ID.
+
+This implementation uses a [delta iteration](iterations.html): Vertices that have not changed their component ID do not participate in the next step. This yields much better performance, because the later iterations typically deal only with a few outlier vertices.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+// read vertex and edge data
+DataSet<Long> vertices = getVertexDataSet(env);
+DataSet<Tuple2<Long, Long>> edges = getEdgeDataSet(env).flatMap(new UndirectEdge());
+
+// assign the initial component IDs (equal to the vertex ID)
+DataSet<Tuple2<Long, Long>> verticesWithInitialId = vertices.map(new DuplicateValue<Long>());
+        
+// open a delta iteration
+DeltaIteration<Tuple2<Long, Long>, Tuple2<Long, Long>> iteration =
+        verticesWithInitialId.iterateDelta(verticesWithInitialId, maxIterations, 0);
+
+// apply the step logic: 
+DataSet<Tuple2<Long, Long>> changes = iteration.getWorkset()
+        // join with the edges
+        .join(edges).where(0).equalTo(0).with(new NeighborWithComponentIDJoin())
+        // select the minimum neighbor component ID
+        .groupBy(0).aggregate(Aggregations.MIN, 1)
+        // update if the component ID of the candidate is smaller
+        .join(iteration.getSolutionSet()).where(0).equalTo(0)
+        .flatMap(new ComponentIdFilter());
+
+// close the delta iteration (delta and new workset are identical)
+DataSet<Tuple2<Long, Long>> result = iteration.closeWith(changes, changes);
+
+// emit result
+result.writeAsCsv(outputPath, "\n", " ");
+
+// User-defined functions
+
+public static final class DuplicateValue<T> implements MapFunction<T, Tuple2<T, T>> {
+    
+    @Override
+    public Tuple2<T, T> map(T vertex) {
+        return new Tuple2<T, T>(vertex, vertex);
+    }
+}
+
+public static final class UndirectEdge 
+                    implements FlatMapFunction<Tuple2<Long, Long>, Tuple2<Long, Long>> {
+    Tuple2<Long, Long> invertedEdge = new Tuple2<Long, Long>();
+    
+    @Override
+    public void flatMap(Tuple2<Long, Long> edge, Collector<Tuple2<Long, Long>> out) {
+        invertedEdge.f0 = edge.f1;
+        invertedEdge.f1 = edge.f0;
+        out.collect(edge);
+        out.collect(invertedEdge);
+    }
+}
+
+public static final class NeighborWithComponentIDJoin 
+                implements JoinFunction<Tuple2<Long, Long>, Tuple2<Long, Long>, Tuple2<Long, Long>> {
+
+    @Override
+    public Tuple2<Long, Long> join(Tuple2<Long, Long> vertexWithComponent, Tuple2<Long, Long> edge) {
+        return new Tuple2<Long, Long>(edge.f1, vertexWithComponent.f1);
+    }
+}
+
+public static final class ComponentIdFilter 
+                    implements FlatMapFunction<Tuple2<Tuple2<Long, Long>, Tuple2<Long, Long>>, 
+                                            Tuple2<Long, Long>> {
+
+    @Override
+    public void flatMap(Tuple2<Tuple2<Long, Long>, Tuple2<Long, Long>> value, 
+                        Collector<Tuple2<Long, Long>> out) {
+        if (value.f0.f1 < value.f1.f1) {
+            out.collect(value.f0);
+        }
+    }
+}
+~~~
+
+The {% gh_link /flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/graph/ConnectedComponents.java "ConnectedComponents program" %} implements the above example. It requires the following parameters to run: `<vertex input path>, <edge input path>, <output path> <max num iterations>`.
+
+</div>
+<div data-lang="scala" markdown="1">
+
+~~~scala
+// set up execution environment
+val env = ExecutionEnvironment.getExecutionEnvironment
+
+// read vertex and edge data
+// assign the initial components (equal to the vertex id)
+val vertices = getVerticesDataSet(env).map { id => (id, id) }
+
+// undirected edges by emitting for each input edge the input edges itself and an inverted
+// version
+val edges = getEdgesDataSet(env).flatMap { edge => Seq(edge, (edge._2, edge._1)) }
+
+// open a delta iteration
+val verticesWithComponents = vertices.iterateDelta(vertices, maxIterations, Array(0)) {
+  (s, ws) =>
+
+    // apply the step logic: join with the edges
+    val allNeighbors = ws.join(edges).where(0).equalTo(0) { (vertex, edge) =>
+      (edge._2, vertex._2)
+    }
+
+    // select the minimum neighbor
+    val minNeighbors = allNeighbors.groupBy(0).min(1)
+
+    // update if the component of the candidate is smaller
+    val updatedComponents = minNeighbors.join(s).where(0).equalTo(0) {
+      (newVertex, oldVertex, out: Collector[(Long, Long)]) =>
+        if (newVertex._2 < oldVertex._2) out.collect(newVertex)
+    }
+
+    // delta and new workset are identical
+    (updatedComponents, updatedComponents)
+}
+
+verticesWithComponents.writeAsCsv(outputPath, "\n", " ")
+    
+~~~
+
+The {% gh_link /flink-examples/flink-scala-examples/src/main/scala/org/apache/flink/examples/scala/graph/ConnectedComponents.scala "ConnectedComponents program" %} implements the above example. It requires the following parameters to run: `<vertex input path>, <edge input path>, <output path> <max num iterations>`.
+</div>
+</div>
+
+Input files are plain text files and must be formatted as follows:
+- Vertices represented as IDs and separated by new-line characters.
+    * For example `"1\n2\n12\n42\n63\n"` gives five vertices with (1), (2), (12), (42), and (63).
+- Edges are represented as pairs for vertex IDs which are separated by space characters. Edges are separated by new-line characters:
+    * For example `"1 2\n2 12\n1 12\n42 63\n"` gives four (undirected) links (1)-(2), (2)-(12), (1)-(12), and (42)-(63).
+
+## Relational Query
+
+The Relational Query example assumes two tables, one with `orders` and the other with `lineitems` as specified by the [TPC-H decision support benchmark](http://www.tpc.org/tpch/). TPC-H is a standard benchmark in the database industry. See below for instructions how to generate the input data.
+
+The example implements the following SQL query.
+
+~~~sql
+SELECT l_orderkey, o_shippriority, sum(l_extendedprice) as revenue
+    FROM orders, lineitem
+WHERE l_orderkey = o_orderkey
+    AND o_orderstatus = "F" 
+    AND YEAR(o_orderdate) > 1993
+    AND o_orderpriority LIKE "5%"
+GROUP BY l_orderkey, o_shippriority;
+~~~
+
+The Flink program, which implements the above query looks as follows.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+~~~java
+// get orders data set: (orderkey, orderstatus, orderdate, orderpriority, shippriority)
+DataSet<Tuple5<Integer, String, String, String, Integer>> orders = getOrdersDataSet(env);
+// get lineitem data set: (orderkey, extendedprice)
+DataSet<Tuple2<Integer, Double>> lineitems = getLineitemDataSet(env);
+
+// orders filtered by year: (orderkey, custkey)
+DataSet<Tuple2<Integer, Integer>> ordersFilteredByYear =
+        // filter orders
+        orders.filter(
+            new FilterFunction<Tuple5<Integer, String, String, String, Integer>>() {
+                @Override
+                public boolean filter(Tuple5<Integer, String, String, String, Integer> t) {
+                    // status filter
+                    if(!t.f1.equals(STATUS_FILTER)) {
+                        return false;
+                    // year filter
+                    } else if(Integer.parseInt(t.f2.substring(0, 4)) <= YEAR_FILTER) {
+                        return false;
+                    // order priority filter
+                    } else if(!t.f3.startsWith(OPRIO_FILTER)) {
+                        return false;
+                    }
+                    return true;
+                }
+            })
+        // project fields out that are no longer required
+        .project(0,4).types(Integer.class, Integer.class);
+
+// join orders with lineitems: (orderkey, shippriority, extendedprice)
+DataSet<Tuple3<Integer, Integer, Double>> lineitemsOfOrders = 
+        ordersFilteredByYear.joinWithHuge(lineitems)
+                            .where(0).equalTo(0)
+                            .projectFirst(0,1).projectSecond(1)
+                            .types(Integer.class, Integer.class, Double.class);
+
+// extendedprice sums: (orderkey, shippriority, sum(extendedprice))
+DataSet<Tuple3<Integer, Integer, Double>> priceSums = 
+        // group by order and sum extendedprice
+        lineitemsOfOrders.groupBy(0,1).aggregate(Aggregations.SUM, 2);
+
+// emit result
+priceSums.writeAsCsv(outputPath);
+~~~
+
+The {% gh_link /flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/relational/RelationalQuery.java "Relational Query program" %} implements the above query. It requires the following parameters to run: `<orders input path>, <lineitem input path>, <output path>`.
+
+</div>
+<div data-lang="scala" markdown="1">
+Coming soon...
+
+The {% gh_link /flink-examples/flink-scala-examples/src/main/scala/org/apache/flink/examples/scala/relational/RelationalQuery.scala "Relational Query program" %} implements the above query. It requires the following parameters to run: `<orders input path>, <lineitem input path>, <output path>`.
+
+</div>
+</div>
+
+The orders and lineitem files can be generated using the [TPC-H benchmark](http://www.tpc.org/tpch/) suite's data generator tool (DBGEN). 
+Take the following steps to generate arbitrary large input files for the provided Flink programs:
+
+1.  Download and unpack DBGEN
+2.  Make a copy of *makefile.suite* called *Makefile* and perform the following changes:
+
+~~~bash
+DATABASE = DB2
+MACHINE  = LINUX
+WORKLOAD = TPCH
+CC       = gcc
+~~~
+
+1.  Build DBGEN using *make*
+2.  Generate lineitem and orders relations using dbgen. A scale factor
+    (-s) of 1 results in a generated data set with about 1 GB size.
+
+~~~bash
+./dbgen -T o -s 1
+~~~

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/fig/LICENSE.txt
----------------------------------------------------------------------
diff --git a/docs/apis/fig/LICENSE.txt b/docs/apis/fig/LICENSE.txt
new file mode 100644
index 0000000..35b8673
--- /dev/null
+++ b/docs/apis/fig/LICENSE.txt
@@ -0,0 +1,17 @@
+All image files in the folder and its subfolders are
+licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/fig/iterations_delta_iterate_operator.png
----------------------------------------------------------------------
diff --git a/docs/apis/fig/iterations_delta_iterate_operator.png b/docs/apis/fig/iterations_delta_iterate_operator.png
new file mode 100644
index 0000000..470485a
Binary files /dev/null and b/docs/apis/fig/iterations_delta_iterate_operator.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/fig/iterations_delta_iterate_operator_example.png
----------------------------------------------------------------------
diff --git a/docs/apis/fig/iterations_delta_iterate_operator_example.png b/docs/apis/fig/iterations_delta_iterate_operator_example.png
new file mode 100644
index 0000000..15f2b54
Binary files /dev/null and b/docs/apis/fig/iterations_delta_iterate_operator_example.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/fig/iterations_iterate_operator.png
----------------------------------------------------------------------
diff --git a/docs/apis/fig/iterations_iterate_operator.png b/docs/apis/fig/iterations_iterate_operator.png
new file mode 100644
index 0000000..aaf4158
Binary files /dev/null and b/docs/apis/fig/iterations_iterate_operator.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/fig/iterations_iterate_operator_example.png
----------------------------------------------------------------------
diff --git a/docs/apis/fig/iterations_iterate_operator_example.png b/docs/apis/fig/iterations_iterate_operator_example.png
new file mode 100644
index 0000000..be4841c
Binary files /dev/null and b/docs/apis/fig/iterations_iterate_operator_example.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/fig/iterations_supersteps.png
----------------------------------------------------------------------
diff --git a/docs/apis/fig/iterations_supersteps.png b/docs/apis/fig/iterations_supersteps.png
new file mode 100644
index 0000000..331dbc7
Binary files /dev/null and b/docs/apis/fig/iterations_supersteps.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/fig/plan_visualizer.png
----------------------------------------------------------------------
diff --git a/docs/apis/fig/plan_visualizer.png b/docs/apis/fig/plan_visualizer.png
new file mode 100644
index 0000000..85b8c55
Binary files /dev/null and b/docs/apis/fig/plan_visualizer.png differ


[08/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/iterations.md
----------------------------------------------------------------------
diff --git a/docs/iterations.md b/docs/iterations.md
deleted file mode 100644
index 246fb8d..0000000
--- a/docs/iterations.md
+++ /dev/null
@@ -1,208 +0,0 @@
----
-title:  "Iterations"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-Iterative algorithms occur in many domains of data analysis, such as *machine learning* or *graph analysis*. Such algorithms are crucial in order to realize the promise of Big Data to extract meaningful information out of your data. With increasing interest to run these kinds of algorithms on very large data sets, there is a need to execute iterations in a massively parallel fashion.
-
-Flink programs implement iterative algorithms by defining a **step function** and embedding it into a special iteration operator. There are two  variants of this operator: **Iterate** and **Delta Iterate**. Both operators repeatedly invoke the step function on the current iteration state until a certain termination condition is reached.
-
-Here, we provide background on both operator variants and outline their usage. The [programming guide](programming_guide.html) explain how to implement the operators in both Scala and Java. We also provide a **vertex-centric graph processing API** called [Spargel](spargel_guide.html).
-
-The following table provides an overview of both operators:
-
-
-<table class="table table-striped table-hover table-bordered">
-	<thead>
-		<th></th>
-		<th class="text-center">Iterate</th>
-		<th class="text-center">Delta Iterate</th>
-	</thead>
-	<tr>
-		<td class="text-center" width="20%"><strong>Iteration Input</strong></td>
-		<td class="text-center" width="40%"><strong>Partial Solution</strong></td>
-		<td class="text-center" width="40%"><strong>Workset</strong> and <strong>Solution Set</strong></td>
-	</tr>
-	<tr>
-		<td class="text-center"><strong>Step Function</strong></td>
-		<td colspan="2" class="text-center">Arbitrary Data Flows</td>
-	</tr>
-	<tr>
-		<td class="text-center"><strong>State Update</strong></td>
-		<td class="text-center">Next <strong>partial solution</strong></td>
-		<td>
-			<ul>
-				<li>Next workset</li>
-				<li><strong>Changes to solution set</strong></li>
-			</ul>
-		</td>
-	</tr>
-	<tr>
-		<td class="text-center"><strong>Iteration Result</strong></td>
-		<td class="text-center">Last partial solution</td>
-		<td class="text-center">Solution set state after last iteration</td>
-	</tr>
-	<tr>
-		<td class="text-center"><strong>Termination</strong></td>
-		<td>
-			<ul>
-				<li><strong>Maximum number of iterations</strong> (default)</li>
-				<li>Custom aggregator convergence</li>
-			</ul>
-		</td>
-		<td>
-			<ul>
-				<li><strong>Maximum number of iterations or empty workset</strong> (default)</li>
-				<li>Custom aggregator convergence</li>
-			</ul>
-		</td>
-	</tr>
-</table>
-
-Iterate Operator
-----------------
-
-The **iterate operator** covers the *simple form of iterations*: in each iteration, the **step function** consumes the **entire input** (the *result of the previous iteration*, or the *initial data set*), and computes the **next version of the partial solution** (e.g. `map`, `reduce`, `join`, etc.).
-
-<p class="text-center">
-    <img alt="Iterate Operator" width="60%" src="img/iterations_iterate_operator.png" />
-</p>
-
-  1. **Iteration Input**: Initial input for the *first iteration* from a *data source* or *previous operators*.
-  2. **Step Function**: The step function will be executed in each iteration. It is an arbitrary data flow consisting of operators like `map`, `reduce`, `join`, etc. and depends on your specific task at hand.
-  3. **Next Partial Solution**: In each iteration, the output of the step function will be fed back into the *next iteration*.
-  4. **Iteration Result**: Output of the *last iteration* is written to a *data sink* or used as input to the *following operators*.
-
-There are multiple options to specify **termination conditions** for an iteration:
-
-  - **Maximum number of iterations**: Without any further conditions, the iteration will be executed this many times.
-  - **Custom aggregator convergence**: Iterations allow to specify *custom aggregators* and *convergence criteria* like sum aggregate the number of emitted records (aggregator) and terminate if this number is zero (convergence criterion).
-
-You can also think about the iterate operator in pseudo-code:
-
-~~~java
-IterationState state = getInitialState();
-
-while (!terminationCriterion()) {
-	state = step(state);
-}
-
-setFinalState(state);
-~~~
-
-<div class="panel panel-default">
-	<div class="panel-body">
-	See the <strong><a href="programming_guide.html">Programming Guide</a> </strong> for details and code examples.</div>
-</div>
-
-### Example: Incrementing Numbers
-
-In the following example, we **iteratively incremenet a set numbers**:
-
-<p class="text-center">
-    <img alt="Iterate Operator Example" width="60%" src="img/iterations_iterate_operator_example.png" />
-</p>
-
-  1. **Iteration Input**: The inital input is read from a data source and consists of five single-field records (integers `1` to `5`).
-  2. **Step function**: The step function is a single `map` operator, which increments the integer field from `i` to `i+1`. It will be applied to every record of the input.
-  3. **Next Partial Solution**: The output of the step function will be the output of the map operator, i.e. records with incremented integers.
-  4. **Iteration Result**: After ten iterations, the initial numbers will have been incremented ten times, resulting in integers `11` to `15`.
-
-~~~
-// 1st           2nd                       10th
-map(1) -> 2      map(2) -> 3      ...      map(10) -> 11
-map(2) -> 3      map(3) -> 4      ...      map(11) -> 12
-map(3) -> 4      map(4) -> 5      ...      map(12) -> 13
-map(4) -> 5      map(5) -> 6      ...      map(13) -> 14
-map(5) -> 6      map(6) -> 7      ...      map(14) -> 15
-~~~
-
-Note that **1**, **2**, and **4** can be arbitrary data flows.
-
-
-Delta Iterate Operator
-----------------------
-
-The **delta iterate operator** covers the case of **incremental iterations**. Incremental iterations **selectively modify elements** of their **solution** and evolve the solution rather than fully recompute it.
-
-Where applicable, this leads to **more efficient algorithms**, because not every element in the solution set changes in each iteration. This allows to **focus on the hot parts** of the solution and leave the **cold parts untouched**. Frequently, the majority of the solution cools down comparatively fast and the later iterations operate only on a small subset of the data.
-
-<p class="text-center">
-    <img alt="Delta Iterate Operator" width="60%" src="img/iterations_delta_iterate_operator.png" />
-</p>
-
-  1. **Iteration Input**: The initial workset and solution set are read from *data sources* or *previous operators* as input to the first iteration.
-  2. **Step Function**: The step function will be executed in each iteration. It is an arbitrary data flow consisting of operators like `map`, `reduce`, `join`, etc. and depends on your specific task at hand.
-  3. **Next Workset/Update Solution Set**: The *next workset* drives the iterative computation and will be fed back into the *next iteration*. Furthermore, the solution set will be updated and implicitly forwarded (it is not required to be rebuild). Both data sets can be updated by different operators of the step function.
-  4. **Iteration Result**: After the *last iteration*, the *solution set* is written to a *data sink* or used as input to the *following operators*.
-
-The default **termination condition** for delta iterations is specified by the **empty workset convergence criterion** and a **maximum number of iterations**. The iteration will terminate when a produced *next workset* is empty or when the maximum number of iterations is reached. It is also possible to specify a **custom aggregator** and **convergence criterion**.
-
-You can also think about the iterate operator in pseudo-code:
-
-~~~java
-IterationState workset = getInitialState();
-IterationState solution = getInitialSolution();
-
-while (!terminationCriterion()) {
-	(delta, workset) = step(workset, solution);
-
-	solution.update(delta)
-}
-
-setFinalState(solution);
-~~~
-
-<div class="panel panel-default">
-	<div class="panel-body">
-	See the <strong><a href="programming_guide.html">programming guide</a></strong> for details and code examples.</div>
-</div>
-
-### Example: Propagate Minimum in Graph
-
-In the following example, every vertex has an **ID** and a **coloring**. Each vertex will propagate its vertex ID to neighboring vertices. The **goal** is to *assign the minimum ID to every vertex in a subgraph*. If a received ID is smaller then the current one, it changes to the color of the vertex with the received ID. One application of this can be found in *community analysis* or *connected components* computation.
-
-<p class="text-center">
-    <img alt="Delta Iterate Operator Example" width="100%" src="img/iterations_delta_iterate_operator_example.png" />
-</p>
-
-The **intial input** is set as **both workset and solution set.** In the above figure, the colors visualize the **evolution of the solution set**. With each iteration, the color of the minimum ID is spreading in the respective subgraph. At the same time, the amount of work (exchanged and compared vertex IDs) decreases with each iteration. This corresponds to the **decreasing size of the workset**, which goes from all seven vertices to zero after three iterations, at which time the iteration terminates. The **important observation** is that *the lower subgraph converges before the upper half* does and the delta iteration is able to capture this with the workset abstraction.
-
-In the upper subgraph **ID 1** (*orange*) is the **minimum ID**. In the **first iteration**, it will get propagated to vertex 2, which will subsequently change its color to orange. Vertices 3 and 4 will receive **ID 2** (in *yellow*) as their current minimum ID and change to yellow. Because the color of *vertex 1* didn't change in the first iteration, it can be skipped it in the next workset.
-
-In the lower subgraph **ID 5** (*cyan*) is the **minimum ID**. All vertices of the lower subgraph will receive it in the first iteration. Again, we can skip the unchanged vertices (*vertex 5*) for the next workset.
-
-In the **2nd iteration**, the workset size has already decreased from seven to five elements (vertices 2, 3, 4, 6, and 7). These are part of the iteration and further propagate their current minimum IDs. After this iteration, the lower subgraph has already converged (**cold part** of the graph), as it has no elements in the workset, whereas the upper half needs a further iteration (**hot part** of the graph) for the two remaining workset elements (vertices 3 and 4).
-
-The iteration **terminates**, when the workset is empty after the **3rd iteration**.
-
-<a href="#supersteps"></a>
-
-Superstep Synchronization
--------------------------
-
-We referred to each execution of the step function of an iteration operator as *a single iteration*. In parallel setups, **multiple instances of the step function are evaluated in parallel** on different partitions of the iteration state. In many settings, one evaluation of the step function on all parallel instances forms a so called **superstep**, which is also the granularity of synchronization. Therefore, *all* parallel tasks of an iteration need to complete the superstep, before a next superstep will be initialized. **Termination criteria** will also be evaluated at superstep barriers.
-
-<p class="text-center">
-    <img alt="Supersteps" width="50%" src="img/iterations_supersteps.png" />
-</p>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/java8_programming_guide.md
----------------------------------------------------------------------
diff --git a/docs/java8_programming_guide.md b/docs/java8_programming_guide.md
deleted file mode 100644
index 4fee0b7..0000000
--- a/docs/java8_programming_guide.md
+++ /dev/null
@@ -1,191 +0,0 @@
----
-title: "Java 8 Programming Guide"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-Java 8 introduces several new language features designed for faster and clearer coding. With the most important feature, 
-the so-called "Lambda Expressions", Java 8 opens the door to functional programming. Lambda Expressions allow for implementing and 
-passing functions in a straightforward way without having to declare additional (anonymous) classes.
-
-The newest version of Flink supports the usage of Lambda Expressions for all operators of the Java API.
-This document shows how to use Lambda Expressions and describes current limitations. For a general introduction to the
-Flink API, please refer to the [Programming Guide](programming_guide.html)
-
-
-### Examples
-
-The following example illustrates how to implement a simple, inline `map()` function that squares its input using a Lambda Expression. 
-The types of input `i` and output parameters of the `map()` function need not to be declared as they are inferred by the Java 8 compiler.
-
-~~~java
-env.fromElements(1, 2, 3)
-// returns the squared i
-.map(i -> i*i)
-.print();
-~~~
-
-The next two examples show different implementations of a function that uses a `Collector` for output. 
-Functions, such as `flatMap()`, require a output type (in this case `String`) to be defined for the `Collector` in order to be type-safe. 
-If the `Collector` type can not be inferred from the surrounding context, it need to be declared in the Lambda Expression's parameter list manually. 
-Otherwise the output will be treated as type `Object` which can lead to undesired behaviour.
-
-~~~java
-DataSet<String> input = env.fromElements(1, 2, 3);
-
-// collector type must be declared
-input.flatMap((Integer number, Collector<String> out) -> {
-    for(int i = 0; i < number; i++) {
-        out.collect("a");
-    }
-})
-// returns "a", "a", "aa", "a", "aa" , "aaa"
-.print();
-~~~
-
-~~~java
-DataSet<String> input = env.fromElements(1, 2, 3);
-
-// collector type must not be declared, it is inferred from the type of the dataset
-DataSet<String> manyALetters = input.flatMap((number, out) -> {	
-    for(int i = 0; i < number; i++) {
-        out.collect("a");
-    }
-});
-
-// returns "a", "a", "aa", "a", "aa" , "aaa"
-manyALetters.print();
-~~~
-
-The following code demonstrates a word count which makes extensive use of Lambda Expressions.
-
-~~~java
-DataSet<String> input = env.fromElements("Please count", "the words", "but not this");
-		
-// filter out strings that contain "not"
-input.filter(line -> !line.contains("not"))
-// split each line by space
-.map(line -> line.split(" "))
-// emit a pair <word,1> for each array element
-.flatMap((String[] wordArray, Collector<Tuple2<String, Integer>> out) 
-    -> Arrays.stream(wordArray).forEach(t -> out.collect(new Tuple2<>(t, 1)))
-    )
-// group and sum up
-.groupBy(0).sum(1)
-// print
-.print();
-~~~
-
-### Compiler Limitations
-Currently, Flink only supports jobs containing Lambda Expressions completely if they are **compiled with the Eclipse JDT compiler contained in Eclipse Luna 4.4.2 (and above)**. 
-
-Only the Eclipse JDT compiler preserves the generic type information necessary to use the entire Lambda Expressions feature type-safely. 
-Other compilers such as the OpenJDK's and Oracle JDK's `javac` throw away all generic parameters related to Lambda Expressions. This means that types such as `Tuple2<String,Integer` or `Collector<String>` declared as a Lambda function input or output parameter will be pruned to `Tuple2` or `Collector` in the compiled `.class` files, which is too little information for the Flink Compiler. 
-
-How to compile a Flink job that contains Lambda Expressions with the JDT compiler will be covered in the next section. 
-
-However, it is possible to implement functions such as `map()` or `filter()` with Lambda Expressions in Java 8 compilers other than the Eclipse JDT compiler as long as the function has no `Collector`s or `Iterable`s *and* only if the function handles unparameterized types such as `Integer`, `Long`, `String`, `MyOwnClass` (types without Generics!).
-
-#### Compile Flink jobs with the Eclipse JDT compiler and Maven
-
-If you are using the Eclipse IDE, you can run and debug your Flink code within the IDE without any problems after some configuration steps. The Eclipse IDE by default compiles its Java sources with the Eclipse JDT compiler. The next section describes how to configure the Eclipse IDE.
-
-If you are using a different IDE such as IntelliJ IDEA or you want to package your Jar-File with Maven to run your job on a cluster, you need to modify your project's `pom.xml` file and build your program with Maven. The [quickstart](setup_quickstart.html) contains preconfigured Maven projects which can be used for new projects or as a reference. Uncomment the mentioned lines in your generated quickstart `pom.xml` file if you want to use Java 8 with Lambda Expressions. 
-
-Alternatively, you can manually insert the following lines to your Maven `pom.xml` file. Maven will then use the Eclipse JDT compiler for compilation.
-
-~~~xml
-<!-- put these lines under "project/build/pluginManagement/plugins" of your pom.xml -->
-
-<plugin>
-    <!-- Use compiler plugin with tycho as the adapter to the JDT compiler. -->
-    <artifactId>maven-compiler-plugin</artifactId>
-    <configuration>
-        <source>1.8</source>
-        <target>1.8</target>
-        <compilerId>jdt</compilerId>
-    </configuration>
-    <dependencies>
-        <!-- This dependency provides the implementation of compiler "jdt": -->
-        <dependency>
-            <groupId>org.eclipse.tycho</groupId>
-            <artifactId>tycho-compiler-jdt</artifactId>
-            <version>0.21.0</version>
-        </dependency>
-    </dependencies>
-</plugin>
-~~~
-
-If you are using Eclipse for development, the m2e plugin might complain about the inserted lines above and marks your `pom.xml` as invalid. If so, insert the following lines to your `pom.xml`.
-
-~~~xml
-<!-- put these lines under "project/build/pluginManagement/plugins/plugin[groupId="org.eclipse.m2e", artifactId="lifecycle-mapping"]/configuration/lifecycleMappingMetadata/pluginExecutions" of your pom.xml -->
-
-<pluginExecution>
-    <pluginExecutionFilter>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <versionRange>[3.1,)</versionRange>
-        <goals>
-            <goal>testCompile</goal>
-            <goal>compile</goal> 
-        </goals>
-    </pluginExecutionFilter>
-    <action>
-        <ignore></ignore>
-    </action>
-</pluginExecution>
-~~~
-
-#### Run and debug Flink jobs within the Eclipse IDE
-
-First of all, make sure you are running a current version of Eclipse IDE (4.4.2 or later). Also make sure that you have a Java 8 Runtime Environment (JRE) installed in Eclipse IDE (`Window` -> `Preferences` -> `Java` -> `Installed JREs`).
-
-Create/Import your Eclipse project. 
-
-If you are using Maven, you also need to change the Java version in your `pom.xml` for the `maven-compiler-plugin`. Otherwise right click the `JRE System Library` section of your project and open the `Properties` window in order to switch to a Java 8 JRE (or above) that supports Lambda Expressions.
-
-The Eclipse JDT compiler needs a special compiler flag in order to store type information in `.class` files. Open the JDT configuration file at `{project directoy}/.settings/org.eclipse.jdt.core.prefs` with your favorite text editor and add the following line:
-
-~~~
-org.eclipse.jdt.core.compiler.codegen.lambda.genericSignature=generate
-~~~
-
-If not already done, also modify the Java versions of the following properties to `1.8` (or above):
-
-~~~
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.source=1.8
-~~~
-
-After you have saved the file, perform a complete project refresh in Eclipse IDE. 
-
-If you are using Maven, right click your Eclipse project and select `Maven` -> `Update Project...`.
-
-You have configured everything correctly, if the following Flink program runs without exceptions:
-
-~~~java
-final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-env.fromElements(1, 2, 3).map((in) -> new Tuple1<String>(" " + in)).print();
-env.execute();
-~~~

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/java_api_quickstart.md
----------------------------------------------------------------------
diff --git a/docs/java_api_quickstart.md b/docs/java_api_quickstart.md
deleted file mode 100644
index 6c0f958..0000000
--- a/docs/java_api_quickstart.md
+++ /dev/null
@@ -1,151 +0,0 @@
----
-title: "Quickstart: Java API"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-Start working on your Flink Java program in a few simple steps.
-
-
-## Requirements
-
-The only requirements are working __Maven 3.0.4__ (or higher) and __Java 6.x__ (or higher) installations.
-
-## Create Project
-
-Use one of the following commands to __create a project__:
-
-<ul class="nav nav-tabs" style="border-bottom: none;">
-    <li class="active"><a href="#quickstart-script" data-toggle="tab">Run the <strong>quickstart script</strong></a></li>
-    <li><a href="#maven-archetype" data-toggle="tab">Use <strong>Maven archetypes</strong></a></li>
-</ul>
-<div class="tab-content">
-    <div class="tab-pane active" id="quickstart-script">
-    {% highlight bash %}
-    $ curl http://flink.apache.org/q/quickstart.sh | bash
-    {% endhighlight %}
-    </div>
-    <div class="tab-pane" id="maven-archetype">
-    {% highlight bash %}
-    $ mvn archetype:generate                             \
-      -DarchetypeGroupId=org.apache.flink              \
-      -DarchetypeArtifactId=flink-quickstart-java            \
-      -DarchetypeVersion={{site.FLINK_VERSION_SHORT}}
-    {% endhighlight %}
-        This allows you to <strong>name your newly created project</strong>. It will interactively ask you for the groupId, artifactId, and package name.
-    </div>
-</div>
-
-## Inspect Project
-
-There will be a new directory in your working directory. If you've used the _curl_ approach, the directory is called `quickstart`. Otherwise, it has the name of your artifactId.
-
-The sample project is a __Maven project__, which contains two classes. _Job_ is a basic skeleton program and _WordCountJob_ a working example. Please note that the _main_ method of both classes allow you to start Flink in a development/testing mode.
-
-We recommend to __import this project into your IDE__ to develop and test it. If you use Eclipse, the [m2e plugin](http://www.eclipse.org/m2e/) allows to [import Maven projects](http://books.sonatype.com/m2eclipse-book/reference/creating-sect-importing-projects.html#fig-creating-import). Some Eclipse bundles include that plugin by default, other require you to install it manually. The IntelliJ IDE also supports Maven projects out of the box.
-
-
-A note to Mac OS X users: The default JVM heapsize for Java is too small for Flink. You have to manually increase it. Choose "Run Configurations" -> Arguments and write into the "VM Arguments" box: "-Xmx800m" in Eclipse.
-
-## Build Project
-
-If you want to __build your project__, go to your project directory and issue the`mvn clean install -Pbuild-jar` command. You will __find a jar__ that runs on every Flink cluster in __target/your-artifact-id-1.0-SNAPSHOT.jar__. There is also a fat-jar,  __target/your-artifact-id-1.0-SNAPSHOT-flink-fat-jar.jar__. This
-also contains all dependencies that get added to the maven project.
-
-## Next Steps
-
-Write your application!
-
-The quickstart project contains a WordCount implementation, the "Hello World" of Big Data processing systems. The goal of WordCount is to determine the frequencies of words in a text, e.g., how often do the terms "the" or "house" occurs in all Wikipedia texts.
-
-__Sample Input__:
-
-~~~bash
-big data is big
-~~~
-
-__Sample Output__:
-
-~~~bash
-big 2
-data 1
-is 1
-~~~
-
-The following code shows the WordCount implementation from the Quickstart which processes some text lines with two operators (FlatMap and Reduce), and writes the prints the resulting words and counts to std-out.
-
-~~~java
-public class WordCount {
-  
-  public static void main(String[] args) throws Exception {
-    
-    // set up the execution environment
-    final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-    
-    // get input data
-    DataSet<String> text = env.fromElements(
-        "To be, or not to be,--that is the question:--",
-        "Whether 'tis nobler in the mind to suffer",
-        "The slings and arrows of outrageous fortune",
-        "Or to take arms against a sea of troubles,"
-        );
-    
-    DataSet<Tuple2<String, Integer>> counts = 
-        // split up the lines in pairs (2-tuples) containing: (word,1)
-        text.flatMap(new LineSplitter())
-        // group by the tuple field "0" and sum up tuple field "1"
-        .groupBy(0)
-        .aggregate(Aggregations.SUM, 1);
-
-    // emit result
-    counts.print();
-    
-    // execute program
-    env.execute("WordCount Example");
-  }
-}
-~~~
-
-The operations are defined by specialized classes, here the LineSplitter class.
-
-~~~java
-public class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
-
-  @Override
-  public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
-    // normalize and split the line into words
-    String[] tokens = value.toLowerCase().split("\\W+");
-    
-    // emit the pairs
-    for (String token : tokens) {
-      if (token.length() > 0) {
-        out.collect(new Tuple2<String, Integer>(token, 1));
-      }
-    }
-  }
-}
-~~~
-
-{% gh_link /flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/wordcount/WordCount.java "Check GitHub" %} for the full example code.
-
-For a complete overview over our API, have a look at the [Programming Guide](programming_guide.html) and [further example programs](examples.html). If you have any trouble, ask on our [Mailing List](http://mail-archives.apache.org/mod_mbox/flink-dev/). We are happy to provide help.
-

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/js/bootstrap.min.js
----------------------------------------------------------------------
diff --git a/docs/js/bootstrap.min.js b/docs/js/bootstrap.min.js
deleted file mode 100644
index b04a0e8..0000000
--- a/docs/js/bootstrap.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.
 Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).re
 moveAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-in
 dicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .p
 rev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.h
 asClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.a
 ttr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transition
 ing)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collap
 se")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in
 ")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;f.toggleClass("op
 en").trigger("shown.bs.dropdown",h),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=" li:not(.divider):visible a",i=f.find("[role=menu]"+h+", [role=listbox]"+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on(
 "keydown.bs.dropdown.data-api",e+", [role=menu], [role=listbox]",f.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidde
 n",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.o
 n("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.
 $backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());c.is("a")&&b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",functi
 on(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector
 ?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="o
 ut",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this,d=this.tip();this.setContent(),this.options.animation&&d.addClass("fade");var e="function"==typeof this.options.placement?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,f=/\s?auto?\s?/i,g=f.test(e);g&&(e=e.replace(f,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(e),this.options.container?d.appendTo(this.options.container):d.insertAfter(this.$element);var h=this.getPosition(),i=d[0].offsetWidth,j=d[0].offsetHeight;if(g){var k=this.$element.parent(),l=e,m=document.documentElement.scrollTop||document.body.scrollTop,n="body"==this.options.container?window.innerWidth:k.outerWidth(),o="body"==this.options.container?window.innerHei
 ght:k.outerHeight(),p="body"==this.options.container?0:k.offset().left;e="bottom"==e&&h.top+h.height+j-m>o?"top":"top"==e&&h.top-m-j<0?"bottom":"right"==e&&h.right+i>n?"left":"left"==e&&h.left-i<p?"right":e,d.removeClass(l).addClass(e)}var q=this.getCalculatedOffset(e,h,i,j);this.applyPlacement(q,e),this.hoverState=null;var r=function(){c.$element.trigger("shown.bs."+c.type)};a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,r).emulateTransitionEnd(150):r()}},b.prototype.applyPlacement=function(b,c){var d,e=this.tip(),f=e[0].offsetWidth,g=e[0].offsetHeight,h=parseInt(e.css("margin-top"),10),i=parseInt(e.css("margin-left"),10);isNaN(h)&&(h=0),isNaN(i)&&(i=0),b.top=b.top+h,b.left=b.left+i,a.offset.setOffset(e[0],a.extend({using:function(a){e.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),e.addClass("in");var j=e[0].offsetWidth,k=e[0].offsetHeight;if("top"==c&&k!=g&&(d=!0,b.top=b.top+g-k),/bottom|top/.test(c)){var l=0;b.left<0&&(l=-2*b.left,b
 .left=0,e.offset(b),j=e[0].offsetWidth,k=e[0].offsetHeight),this.replaceArrow(l-f+j,j,"left")}else this.replaceArrow(k-g,k,"top");d&&e.offset(b)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.
 hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enabl
 e=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content
 :"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.
 $tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.fi
 nd(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li"
 ).addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this
 .activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DE
 FAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));va
 r i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetT
 op),b.affix(c)})})}(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/js/codetabs.js
----------------------------------------------------------------------
diff --git a/docs/js/codetabs.js b/docs/js/codetabs.js
deleted file mode 100644
index 878aa32..0000000
--- a/docs/js/codetabs.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Note: This file is originally from the Apache Spark project. */
-
-/* Custom JavaScript code in the MarkDown docs */
-
-// Enable language-specific code tabs
-function codeTabs() {
-  var counter = 0;
-  var langImages = {
-    "scala": "img/scala-sm.png",
-    "python": "img/python-sm.png",
-    "java": "img/java-sm.png"
-  };
-  $("div.codetabs").each(function() {
-    $(this).addClass("tab-content");
-
-    // Insert the tab bar
-    var tabBar = $('<ul class="nav nav-tabs" data-tabs="tabs"></ul>');
-    $(this).before(tabBar);
-
-    // Add each code sample to the tab bar:
-    var codeSamples = $(this).children("div");
-    codeSamples.each(function() {
-      $(this).addClass("tab-pane");
-      var lang = $(this).data("lang");
-      var image = $(this).data("image");
-      var notabs = $(this).data("notabs");
-      var capitalizedLang = lang.substr(0, 1).toUpperCase() + lang.substr(1);
-      var id = "tab_" + lang + "_" + counter;
-      $(this).attr("id", id);
-      if (image != null && langImages[lang]) {
-        var buttonLabel = "<img src='" +langImages[lang] + "' alt='" + capitalizedLang + "' />";
-      } else if (notabs == null) {
-        var buttonLabel = "<b>" + capitalizedLang + "</b>";
-      } else {
-        var buttonLabel = ""
-      }
-      tabBar.append(
-        '<li><a class="tab_' + lang + '" href="#' + id + '">' + buttonLabel + '</a></li>'
-      );
-    });
-
-    codeSamples.first().addClass("active");
-    tabBar.children("li").first().addClass("active");
-    counter++;
-  });
-  $("ul.nav-tabs a").click(function (e) {
-    // Toggling a tab should switch all tabs corresponding to the same language
-    // while retaining the scroll position
-    e.preventDefault();
-    var scrollOffset = $(this).offset().top - $(document).scrollTop();
-    $("." + $(this).attr('class')).tab('show');
-    $(document).scrollTop($(this).offset().top - scrollOffset);
-  });
-}
-
-function makeCollapsable(elt, accordionClass, accordionBodyId, title) {
-  $(elt).addClass("accordion-inner");
-  $(elt).wrap('<div class="accordion ' + accordionClass + '"></div>')
-  $(elt).wrap('<div class="accordion-group"></div>')
-  $(elt).wrap('<div id="' + accordionBodyId + '" class="accordion-body collapse"></div>')
-  $(elt).parent().before(
-    '<div class="accordion-heading">' +
-      '<a class="accordion-toggle" data-toggle="collapse" href="#' + accordionBodyId + '">' +
-             title +
-      '</a>' +
-    '</div>'
-  );
-}
-
-// Enable "view solution" sections (for exercises)
-function viewSolution() {
-  var counter = 0
-  $("div.solution").each(function() {
-    var id = "solution_" + counter
-    makeCollapsable(this, "", id,
-      '<i class="icon-ok-sign" style="text-decoration: none; color: #0088cc">' +
-      '</i>' + "View Solution");
-    counter++;
-  });
-}
-
-// A script to fix internal hash links because we have an overlapping top bar.
-// Based on https://github.com/twitter/bootstrap/issues/193#issuecomment-2281510
-function maybeScrollToHash() {
-  console.log("HERE");
-  if (window.location.hash && $(window.location.hash).length) {
-    console.log("HERE2", $(window.location.hash), $(window.location.hash).offset().top);
-    var newTop = $(window.location.hash).offset().top - 57;
-    $(window).scrollTop(newTop);
-  }
-}
-
-$(function() {
-  codeTabs();
-  viewSolution();
-
-  $(window).bind('hashchange', function() {
-    maybeScrollToHash();
-  });
-
-  // Scroll now too in case we had opened the page on a hash, but wait a bit because some browsers
-  // will try to do *their* initial scroll after running the onReady handler.
-  $(window).load(function() { setTimeout(function() { maybeScrollToHash(); }, 25); }); 
-});

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/fig/LICENSE.txt
----------------------------------------------------------------------
diff --git a/docs/libs/fig/LICENSE.txt b/docs/libs/fig/LICENSE.txt
new file mode 100644
index 0000000..35b8673
--- /dev/null
+++ b/docs/libs/fig/LICENSE.txt
@@ -0,0 +1,17 @@
+All image files in the folder and its subfolders are
+licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/fig/gelly-example-graph.png
----------------------------------------------------------------------
diff --git a/docs/libs/fig/gelly-example-graph.png b/docs/libs/fig/gelly-example-graph.png
new file mode 100644
index 0000000..abef960
Binary files /dev/null and b/docs/libs/fig/gelly-example-graph.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/fig/gelly-filter.png
----------------------------------------------------------------------
diff --git a/docs/libs/fig/gelly-filter.png b/docs/libs/fig/gelly-filter.png
new file mode 100644
index 0000000..cb09744
Binary files /dev/null and b/docs/libs/fig/gelly-filter.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/fig/gelly-reduceOnEdges.png
----------------------------------------------------------------------
diff --git a/docs/libs/fig/gelly-reduceOnEdges.png b/docs/libs/fig/gelly-reduceOnEdges.png
new file mode 100644
index 0000000..ffb674d
Binary files /dev/null and b/docs/libs/fig/gelly-reduceOnEdges.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/fig/gelly-reduceOnNeighbors.png
----------------------------------------------------------------------
diff --git a/docs/libs/fig/gelly-reduceOnNeighbors.png b/docs/libs/fig/gelly-reduceOnNeighbors.png
new file mode 100644
index 0000000..63137b8
Binary files /dev/null and b/docs/libs/fig/gelly-reduceOnNeighbors.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/fig/gelly-union.png
----------------------------------------------------------------------
diff --git a/docs/libs/fig/gelly-union.png b/docs/libs/fig/gelly-union.png
new file mode 100644
index 0000000..b00f831
Binary files /dev/null and b/docs/libs/fig/gelly-union.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/fig/spargel_example.png
----------------------------------------------------------------------
diff --git a/docs/libs/fig/spargel_example.png b/docs/libs/fig/spargel_example.png
new file mode 100644
index 0000000..21d20f8
Binary files /dev/null and b/docs/libs/fig/spargel_example.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/fig/spargel_example_input.png
----------------------------------------------------------------------
diff --git a/docs/libs/fig/spargel_example_input.png b/docs/libs/fig/spargel_example_input.png
new file mode 100644
index 0000000..01ead46
Binary files /dev/null and b/docs/libs/fig/spargel_example_input.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/gelly_guide.md
----------------------------------------------------------------------
diff --git a/docs/libs/gelly_guide.md b/docs/libs/gelly_guide.md
new file mode 100644
index 0000000..21bc335
--- /dev/null
+++ b/docs/libs/gelly_guide.md
@@ -0,0 +1,484 @@
+---
+title: "Gelly: Flink Graph API"
+is_beta: true
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<a href="#top"></a>
+
+Gelly is a Java Graph API for Flink. It contains a set of methods and utilities which aim to simplify the development of graph analysis applications in Flink. In Gelly, graphs can be transformed and modified using high-level functions similar to the ones provided by the batch processing API. Gelly provides methods to create, transform and modify graphs, as well as a library of graph algorithms.
+
+* This will be replaced by the TOC
+{:toc}
+
+Using Gelly
+-----------
+
+Gelly is currently part of the *staging* Maven project. All relevant classes are located in the *org.apache.flink.graph* package.
+
+Add the following dependency to your `pom.xml` to use Gelly.
+
+~~~xml
+<dependency>
+    <groupId>org.apache.flink</groupId>
+    <artifactId>flink-gelly</artifactId>
+    <version>{{site.version}}</version>
+</dependency>
+~~~
+
+The remaining sections provide a description of available methods and present several examples of how to use Gelly and how to mix it with the Flink Java API. After reading this guide, you might also want to check the {% gh_link /flink-staging/flink-gelly/src/main/java/org/apache/flink/graph/example/ "Gelly examples" %}.
+
+Graph Representation
+-----------
+
+In Gelly, a `Graph` is represented by a `DataSet` of vertices and a `DataSet` of edges.
+
+The `Graph` nodes are represented by the `Vertex` type. A `Vertex` is defined by a unique ID and a value. `Vertex` IDs should implement the `Comparable` interface. Vertices without value can be represented by setting the value type to `NullValue`.
+
+{% highlight java %}
+// create a new vertex with a Long ID and a String value
+Vertex<Long, String> v = new Vertex<Long, String>(1L, "foo");
+
+// create a new vertex with a Long ID and no value
+Vertex<Long, NullValue> v = new Vertex<Long, NullValue>(1L, NullValue.getInstance());
+{% endhighlight %}
+
+The graph edges are represented by the `Edge` type. An `Edge` is defined by a source ID (the ID of the source `Vertex`), a target ID (the ID of the target `Vertex`) and an optional value. The source and target IDs should be of the same type as the `Vertex` IDs. Edges with no value have a `NullValue` value type.
+
+{% highlight java %}
+Edge<Long, Double> e = new Edge<Long, Double>(1L, 2L, 0.5);
+
+// reverse the source and target of this edge
+Edge<Long, Double> reversed = e.reverse();
+
+Double weight = e.getValue(); // weight = 0.5
+{% endhighlight %}
+
+[Back to top](#top)
+
+Graph Creation
+-----------
+
+You can create a `Graph` in the following ways:
+
+* from a `DataSet` of edges and an optional `DataSet` of vertices:
+
+{% highlight java %}
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+DataSet<Vertex<String, Long>> vertices = ...
+
+DataSet<Edge<String, Double>> edges = ...
+
+Graph<String, Long, Double> graph = Graph.fromDataSet(vertices, edges, env);
+{% endhighlight %}
+
+* from a `DataSet` of `Tuple3` and an optional `DataSet` of `Tuple2`. In this case, Gelly will convert each `Tuple3` to an `Edge`, where the first field will be the source ID, the second field will be the target ID and the third field will be the edge value. Equivalently, each `Tuple2` will be converted to a `Vertex`, where the first field will be the vertex ID and the second field will be the vertex value:
+
+{% highlight java %}
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+DataSet<Tuple2<String, Long>> vertexTuples = env.readCsvFile("path/to/vertex/input");
+
+DataSet<Tuple3<String, String, Double>> edgeTuples = env.readCsvFile("path/to/edge/input");
+
+Graph<String, Long, Double> graph = Graph.fromTupleDataSet(vertexTuples, edgeTuples, env);
+{% endhighlight %}
+
+* from a `Collection` of edges and an optional `Collection` of vertices:
+
+{% highlight java %}
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+List<Vertex<Long, Long>> vertexList = new ArrayList...
+
+List<Edge<Long, String>> edgeList = new ArrayList...
+
+Graph<Long, Long, String> graph = Graph.fromCollection(vertexList, edgeList, env);
+{% endhighlight %}
+
+If no vertex input is provided during Graph creation, Gelly will automatically produce the `Vertex` `DataSet` from the edge input. In this case, the created vertices will have no values. Alternatively, you can provide a `MapFunction` as an argument to the creation method, in order to initialize the `Vertex` values:
+
+{% highlight java %}
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+// initialize the vertex value to be equal to the vertex ID
+Graph<Long, Long, String> graph = Graph.fromCollection(edges, 
+				new MapFunction<Long, Long>() {
+					public Long map(Long value) { 
+						return value; 
+					} 
+				}, env);
+{% endhighlight %}
+
+[Back to top](#top)
+
+Graph Properties
+------------
+
+Gelly includes the following methods for retrieving various Graph properties and metrics:
+
+{% highlight java %}
+// get the Vertex DataSet
+DataSet<Vertex<K, VV>> getVertices()
+
+// get the Edge DataSet
+DataSet<Edge<K, EV>> getEdges()
+
+// get the IDs of the vertices as a DataSet
+DataSet<K> getVertexIds()
+
+// get the source-target pairs of the edge IDs as a DataSet
+DataSet<Tuple2<K, K>> getEdgeIds() 
+
+// get a DataSet of <vertex ID, in-degree> pairs for all vertices
+DataSet<Tuple2<K, Long>> inDegrees() 
+
+// get a DataSet of <vertex ID, out-degree> pairs for all vertices
+DataSet<Tuple2<K, Long>> outDegrees()
+
+// get a DataSet of <vertex ID, degree> pairs for all vertices, where degree is the sum of in- and out- degrees
+DataSet<Tuple2<K, Long>> getDegrees()
+
+// get the number of vertices
+long numberOfVertices()
+
+// get the number of edges
+long numberOfEdges()
+
+// get a DataSet of Triplets<srcVertex, trgVertex, edge>
+DataSet<Triplet<K, VV, EV>> getTriplets()
+
+{% endhighlight %}
+
+[Back to top](#top)
+
+Graph Transformations
+-----------------
+
+* <strong>Map</strong>: Gelly provides specialized methods for applying a map transformation on the vertex values or edge values. `mapVertices` and `mapEdges` return a new `Graph`, where the IDs of the vertices (or edges) remain unchanged, while the values are transformed according to the provided user-defined map function. The map functions also allow changing the type of the vertex or edge values.
+
+{% highlight java %}
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+Graph<Long, Long, Long> graph = Graph.fromDataSet(vertices, edges, env);
+
+// increment each vertex value by one
+Graph<Long, Long, Long> updatedGraph = graph.mapVertices(
+				new MapFunction<Vertex<Long, Long>, Long>() {
+					public Long map(Vertex<Long, Long> value) {
+						return value.getValue() + 1;
+					}
+				});
+{% endhighlight %}
+
+* <strong>Filter</strong>: A filter transformation applies a user-defined filter function on the vertices or edges of the `Graph`. `filterOnEdges` will create a sub-graph of the original graph, keeping only the edges that satisfy the provided predicate. Note that the vertex dataset will not be modified. Respectively, `filterOnVertices` applies a filter on the vertices of the graph. Edges whose source and/or target do not satisfy the vertex predicate are removed from the resulting edge dataset. The `subgraph` method can be used to apply a filter function to the vertices and the edges at the same time.
+
+{% highlight java %}
+Graph<Long, Long, Long> graph = ...
+
+graph.subgraph(
+		new FilterFunction<Vertex<Long, Long>>() {
+			   	public boolean filter(Vertex<Long, Long> vertex) {
+					// keep only vertices with positive values
+					return (vertex.getValue() > 0);
+			   }
+		   },
+		new FilterFunction<Edge<Long, Long>>() {
+				public boolean filter(Edge<Long, Long> edge) {
+					// keep only edges with negative values
+					return (edge.getValue() < 0);
+				}
+		})
+{% endhighlight %}
+
+<p class="text-center">
+    <img alt="Filter Transformations" width="80%" src="fig/gelly-filter.png"/>
+</p>
+
+* <strong>Join</strong>: Gelly provides specialized methods for joining the vertex and edge datasets with other input datasets. `joinWithVertices` joins the vertices with a `Tuple2` input data set. The join is performed using the vertex ID and the first field of the `Tuple2` input as the join keys. The method returns a new `Graph` where the vertex values have been updated according to a provided user-defined map function.
+Similarly, an input dataset can be joined with the edges, using one of three methods. `joinWithEdges` expects an input `DataSet` of `Tuple3` and joins on the composite key of both source and target vertex IDs. `joinWithEdgesOnSource` expects a `DataSet` of `Tuple2` and joins on the source key of the edges and the first attribute of the input dataset and `joinWithEdgesOnTarget` expects a `DataSet` of `Tuple2` and joins on the target key of the edges and the first attribute of the input dataset. All three methods apply a map function on the edge and the input data set values.
+Note that if the input dataset contains a key multiple times, all Gelly join methods will only consider the first value encountered.
+
+{% highlight java %}
+Graph<Long, Double, Double> network = ...
+
+DataSet<Tuple2<Long, Long>> vertexOutDegrees = network.outDegrees();
+
+// assign the transition probabilities as the edge weights
+Graph<Long, Double, Double> networkWithWeights = network.joinWithEdgesOnSource(vertexOutDegrees,
+				new MapFunction<Tuple2<Double, Long>, Double>() {
+					public Double map(Tuple2<Double, Long> value) {
+						return value.f0 / value.f1;
+					}
+				});
+{% endhighlight %}
+
+* <strong>Reverse</strong>: the `reverse()` method returns a new `Graph` where the direction of all edges has been reversed.
+
+* <strong>Undirected</strong>: In Gelly, a `Graph` is always directed. Undirected graphs can be represented by adding all opposite-direction edges to a graph. For this purpose, Gelly provides the `getUndirected()` method.
+
+* <strong>Union</strong>: Gelly's `union()` method performs a union on the vertex and edges sets of the input graphs. Duplicate vertices are removed from the resulting `Graph`, while if duplicate edges exists, these will be maintained.
+
+<p class="text-center">
+    <img alt="Union Transformation" width="50%" src="fig/gelly-union.png"/>
+</p>
+
+[Back to top](#top)
+
+Graph Mutations
+-----------
+
+Gelly includes the following methods for adding and removing vertices and edges from an input `Graph`:
+
+{% highlight java %}
+// adds a Vertex and the given edges to the Graph. If the Vertex already exists, it will not be added again, but the given edges will.
+Graph<K, VV, EV> addVertex(final Vertex<K, VV> vertex, List<Edge<K, EV>> edges)
+
+// adds an Edge to the Graph. If the source and target vertices do not exist in the graph, they will also be added.
+Graph<K, VV, EV> addEdge(Vertex<K, VV> source, Vertex<K, VV> target, EV edgeValue)
+
+// removes the given Vertex and its edges from the Graph.
+Graph<K, VV, EV> removeVertex(Vertex<K, VV> vertex)
+
+// removes *all* edges that match the given Edge from the Graph.
+Graph<K, VV, EV> removeEdge(Edge<K, EV> edge)
+{% endhighlight %}
+
+Neighborhood Methods
+-----------
+
+Neighborhood methods allow vertices to perform an aggregation on their first-hop neighborhood.
+
+`reduceOnEdges()` can be used to compute an aggregation on the neighboring edges of a vertex, while `reduceOnNeighbors()` has access on both the neighboring edges and vertices. The neighborhood scope is defined by the `EdgeDirection` parameter, which takes the values `IN`, `OUT` or `ALL`. `IN` will gather all in-coming edges (neighbors) of a vertex, `OUT` will gather all out-going edges (neighbors), while `ALL` will gather all edges (neighbors).
+
+For example, assume that you want to select the minimum weight of all out-edges for each vertex in the following graph:
+
+<p class="text-center">
+    <img alt="reduceOnEdges Example" width="50%" src="fig/gelly-example-graph.png"/>
+</p>
+
+The following code will collect the out-edges for each vertex and apply the `SelectMinWeight()` user-defined function on each of the resulting neighborhoods:
+
+{% highlight java %}
+Graph<Long, Long, Double> graph = ...
+
+DataSet<Tuple2<Long, Double>> minWeights = graph.reduceOnEdges(
+				new SelectMinWeight(), EdgeDirection.OUT);
+
+// user-defined function to select the minimum weight
+static final class SelectMinWeight implements EdgesFunction<Long, Double, Tuple2<Long, Double>> {
+
+    public Tuple2<Long, Double> iterateEdges(Iterable<Tuple2<Long, Edge<Long, Double>>> edges) {
+
+        long minWeight = Double.MAX_VALUE;
+        long vertexId = -1;
+
+        for (Tuple2<Long, Edge<Long, Double>> edge: edges) {
+            if (edge.f1.getValue() < weight) {
+            weight = edge.f1.getValue();
+            vertexId = edge.f0;
+        }
+        return new Tuple2<Long, Double>(vertexId, minWeight);
+    }
+}
+{% endhighlight %}
+
+<p class="text-center">
+    <img alt="reduceOnEdges Example" width="50%" src="fig/gelly-reduceOnEdges.png"/>
+</p>
+
+Similarly, assume that you would like to compute the sum of the values of all in-coming neighbors, for every vertex. The following code will collect the in-coming neighbors for each vertex and apply the `SumValues()` user-defined function on each neighborhood:
+
+{% highlight java %}
+Graph<Long, Long, Double> graph = ...
+
+DataSet<Tuple2<Long, Long>> verticesWithSum = graph.reduceOnNeighbors(
+				new SumValues(), EdgeDirection.IN);
+
+// user-defined function to sum the neighbor values
+static final class SumValues implements NeighborsFunction<Long, Long, Double, Tuple2<Long, Long>> {
+		
+	public Tuple2<Long, Long> iterateNeighbors(Iterable<Tuple3<Long, Edge<Long, Double>, 
+		Vertex<Long, Long>>> neighbors) {
+		
+		long sum = 0;
+		long vertexId = -1;
+
+		for (Tuple3<Long, Edge<Long, Double>, Vertex<Long, Long>> neighbor : neighbors) {
+			vertexId = neighbor.f0;
+			sum += neighbor.f2.getValue();
+		}
+		return new Tuple2<Long, Long>(vertexId, sum);
+	}
+}
+{% endhighlight %}
+
+<p class="text-center">
+    <img alt="reduseOnNeighbors Example" width="70%" src="fig/gelly-reduceOnNeighbors.png"/>
+</p>
+
+When the aggregation computation does not require access to the vertex value (for which the aggregation is performed), it is advised to use the more efficient `EdgesFunction` and `NeighborsFunction` for the user-defined functions. When access to the vertex value is required, one should use `EdgesFunctionWithVertexValue` and `NeighborsFunctionWithVertexValue` instead. 
+
+[Back to top](#top)
+
+Vertex-centric Iterations
+-----------
+
+Gelly wraps Flink's [Spargel API](spargel_guide.html) to provide methods for vertex-centric iterations.
+Like in Spargel, the user only needs to implement two functions: a `VertexUpdateFunction`, which defines how a vertex will update its value
+based on the received messages and a `MessagingFunction`, which allows a vertex to send out messages for the next superstep.
+These functions and the maximum number of iterations to run are given as parameters to Gelly's `runVertexCentricIteration`.
+This method will execute the vertex-centric iteration on the input Graph and return a new Graph, with updated vertex values:
+
+{% highlight java %}
+Graph<Long, Double, Double> graph = ...
+
+// run Single-Source-Shortest-Paths vertex-centric iteration
+Graph<Long, Double, Double> result = 
+			graph.runVertexCentricIteration(
+			new VertexDistanceUpdater(), new MinDistanceMessenger(), maxIterations);
+
+// user-defined functions
+public static final class VertexDistanceUpdater {...}
+public static final class MinDistanceMessenger {...}
+
+{% endhighlight %}
+
+### Configuring a Vertex-Centric Iteration
+A vertex-centric iteration can be configured using an `IterationConfiguration` object.
+Currently, the following parameters can be specified:
+
+* <strong>Name</strong>: The name for the vertex-centric iteration. The name is displayed in logs and messages 
+and can be specified using the `setName()` method.
+
+* <strong>Parallelism</strong>: The parallelism for the iteration. It can be set using the `setParallelism()` method.	
+
+* <strong>Solution set in unmanaged memory</strong>: Defines whether the solution set is kept in managed memory (Flink's internal way of keeping objects in serialized form) or as a simple object map. By default, the solution set runs in managed memory. This property can be set using the `setSolutionSetUnmanagedMemory()` method.
+
+* <strong>Aggregators</strong>: Iteration aggregators can be registered using the `registerAggregator()` method. An iteration aggregator combines
+all aggregates globally once per superstep and makes them available in the next superstep. Registered aggregators can be accessed inside the user-defined `VertexUpdateFunction` and `MessagingFunction`.
+
+* <strong>Broadcast Variables</strong>: DataSets can be added as [Broadcast Variables](programming_guide.html#broadcast-variables) to the `VertexUpdateFunction` and `MessagingFunction`, using the `addBroadcastSetForUpdateFunction()` and `addBroadcastSetForMessagingFunction()` methods, respectively.
+
+{% highlight java %}
+
+Graph<Long, Double, Double> graph = ...
+
+// configure the iteration
+IterationConfiguration parameters = new IterationConfiguration();
+
+// set the iteration name
+parameters.setName("Gelly Iteration");
+
+// set the parallelism
+parameters.setParallelism(16);
+
+// register an aggregator
+parameters.registerAggregator("sumAggregator", new LongSumAggregator());
+
+// run the vertex-centric iteration, also passing the configuration parameters
+Graph<Long, Double, Double> result = 
+			graph.runVertexCentricIteration(
+			new VertexUpdater(), new Messenger(), maxIterations, parameters);
+
+// user-defined functions
+public static final class VertexUpdater extends VertexUpdateFunction {
+
+	LongSumAggregator aggregator = new LongSumAggregator();
+
+	public void preSuperstep() {
+	
+		// retrieve the Aggregator
+		aggregator = getIterationAggregator("sumAggregator");
+	}
+
+
+	public void updateVertex(Long vertexKey, Long vertexValue, MessageIterator inMessages) {
+		
+		//do some computation
+		Long partialValue = ...
+
+		// aggregate the partial value
+		aggregator.aggregate(partialValue);
+
+		// update the vertex value
+		setNewVertexValue(...);
+	}
+}
+
+public static final class Messenger extends MessagingFunction {...}
+
+{% endhighlight %}
+
+[Back to top](#top)
+
+Graph Validation
+-----------
+
+Gelly provides a simple utility for performing validation checks on input graphs. Depending on the application context, a graph may or may not be valid according to certain criteria. For example, a user might need to validate whether their graph contains duplicate edges or whether its structure is bipartite. In order to validate a graph, one can define a custom `GraphValidator` and implement its `validate()` method. `InvalidVertexIdsValidator` is Gelly's pre-defined validator. It checks that the edge set contains valid vertex IDs, i.e. that all edge IDs
+also exist in the vertex IDs set.
+
+{% highlight java %}
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+// create a list of vertices with IDs = {1, 2, 3, 4, 5}
+List<Vertex<Long, Long>> vertices = ...
+
+// create a list of edges with IDs = {(1, 2) (1, 3), (2, 4), (5, 6)}
+List<Edge<Long, Long>> edges = ...
+
+Graph<Long, Long, Long> graph = Graph.fromCollection(vertices, edges, env);
+
+// will return false: 6 is an invalid ID
+graph.validate(new InvalidVertexIdsValidator<Long, Long, Long>()); 
+
+{% endhighlight %}
+
+[Back to top](#top)
+
+Library Methods
+-----------
+Gelly has a growing collection of graph algorithms for easily analyzing large-scale Graphs. So far, the following library methods are implemented:
+
+* PageRank
+* Single-Source Shortest Paths
+* Label Propagation
+* Simple Community Detection
+
+Gelly's library methods can be used by simply calling the `run()` method on the input graph:
+
+{% highlight java %}
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+Graph<Long, Long, NullValue> graph = ...
+
+// run Label Propagation for 30 iterations to detect communities on the input graph
+DataSet<Vertex<Long, Long>> verticesWithCommunity = graph.run(
+				new LabelPropagation<Long>(30)).getVertices();
+
+// print the result
+verticesWithCommunity.print();
+
+env.execute();
+{% endhighlight %}
+
+[Back to top](#top)
+
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/index.md
----------------------------------------------------------------------
diff --git a/docs/libs/index.md b/docs/libs/index.md
new file mode 100644
index 0000000..cf5f846
--- /dev/null
+++ b/docs/libs/index.md
@@ -0,0 +1,21 @@
+---
+title: "Libraries"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
\ No newline at end of file


[26/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/python.md
----------------------------------------------------------------------
diff --git a/docs/apis/python.md b/docs/apis/python.md
new file mode 100644
index 0000000..5bea544
--- /dev/null
+++ b/docs/apis/python.md
@@ -0,0 +1,606 @@
+---
+title: "Python Programming Guide"
+is_beta: true
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<a href="#top"></a>
+
+Analysis programs in Flink are regular programs that implement transformations on data sets
+(e.g., filtering, mapping, joining, grouping). The data sets are initially created from certain
+sources (e.g., by reading files, or from collections). Results are returned via sinks, which may for
+example write the data to (distributed) files, or to standard output (for example the command line
+terminal). Flink programs run in a variety of contexts, standalone, or embedded in other programs.
+The execution can happen in a local JVM, or on clusters of many machines.
+
+In order to create your own Flink program, we encourage you to start with the
+[program skeleton](#program-skeleton) and gradually add your own
+[transformations](#transformations). The remaining sections act as references for additional
+operations and advanced features.
+
+* This will be replaced by the TOC
+{:toc}
+
+Example Program
+---------------
+
+The following program is a complete, working example of WordCount. You can copy &amp; paste the code
+to run it locally.
+
+{% highlight python %}
+from flink.plan.Environment import get_environment
+from flink.plan.Constants import INT, STRING
+from flink.functions.GroupReduceFunction import GroupReduceFunction
+
+class Adder(GroupReduceFunction):
+  def reduce(self, iterator, collector):
+    count, word = iterator.next()
+    count += sum([x[0] for x in iterator])
+    collector.collect((count, word))
+
+if __name__ == "__main__":
+  env = get_environment()
+  data = env.from_elements("Who's there?",
+   "I think I hear them. Stand, ho! Who's there?")
+  
+  data \
+    .flat_map(lambda x, c: [(1, word) for word in x.lower().split()], (INT, STRING)) \
+    .group_by(1) \
+    .reduce_group(Adder(), (INT, STRING), combinable=True) \
+    .output()
+  
+  env.execute(local=True)
+{% endhighlight %}
+
+[Back to top](#top)
+
+Program Skeleton
+----------------
+
+As we already saw in the example, Flink programs look like regular python
+programs with a `if __name__ == "__main__":` block. Each program consists of the same basic parts:
+
+1. Obtain an `Environment`,
+2. Load/create the initial data,
+3. Specify transformations on this data,
+4. Specify where to put the results of your computations, and
+5. Execute your program.
+
+We will now give an overview of each of those steps but please refer to the respective sections for
+more details. 
+
+
+The `Environment` is the basis for all Flink programs. You can
+obtain one using these static methods on class `Environment`:
+
+{% highlight python %}
+get_environment()
+{% endhighlight %}
+
+For specifying data sources the execution environment has several methods
+to read from files. To just read a text file as a sequence of lines, you can use:
+
+{% highlight python %}
+env = get_environment()
+text = env.read_text("file:///path/to/file")
+{% endhighlight %}
+
+This will give you a DataSet on which you can then apply transformations. For
+more information on data sources and input formats, please refer to
+[Data Sources](#data-sources).
+
+Once you have a DataSet you can apply transformations to create a new
+DataSet which you can then write to a file, transform again, or
+combine with other DataSets. You apply transformations by calling
+methods on DataSet with your own custom transformation function. For example,
+a map transformation looks like this:
+
+{% highlight python %}
+data.map(lambda x: x*2, INT)
+{% endhighlight %}
+
+This will create a new DataSet by doubling every value in the original DataSet. 
+For more information and a list of all the transformations,
+please refer to [Transformations](#transformations).
+
+Once you have a DataSet that needs to be written to disk you can call one
+of these methods on DataSet:
+
+{% highlight python %}
+data.write_text("<file-path>", WriteMode=Constants.NO_OVERWRITE)
+write_csv("<file-path>", WriteMode=Constants.NO_OVERWRITE, line_delimiter='\n', field_delimiter=',')
+output()
+{% endhighlight %}
+
+The last method is only useful for developing/debugging on a local machine,
+it will output the contents of the DataSet to standard output. (Note that in
+a cluster, the result goes to the standard out stream of the cluster nodes and ends
+up in the *.out* files of the workers).
+The first two do as the name suggests. 
+Please refer to [Data Sinks](#data-sinks) for more information on writing to files.
+
+Once you specified the complete program you need to call `execute` on
+the `Environment`. This will either execute on your local machine or submit your program 
+for execution on a cluster, depending on how Flink was started. You can force
+a local execution by using `execute(local=True)`.
+
+[Back to top](#top)
+
+Project setup
+---------------
+
+Apart from setting up Flink, no additional work is required. The python package can be found in the /resource folder of your Flink distribution. The flink package, along with the plan and optional packages are automatically distributed among the cluster via HDFS when running a job.
+
+The Python API was tested on Linux systems that have Python 2.7 or 3.4 installed.
+
+[Back to top](#top)
+
+Lazy Evaluation
+---------------
+
+All Flink programs are executed lazily: When the program's main method is executed, the data loading
+and transformations do not happen directly. Rather, each operation is created and added to the
+program's plan. The operations are actually executed when one of the `execute()` methods is invoked
+on the Environment object. Whether the program is executed locally or on a cluster depends
+on the environment of the program.
+
+The lazy evaluation lets you construct sophisticated programs that Flink executes as one
+holistically planned unit.
+
+[Back to top](#top)
+
+
+Transformations
+---------------
+
+Data transformations transform one or more DataSets into a new DataSet. Programs can combine
+multiple transformations into sophisticated assemblies.
+
+This section gives a brief overview of the available transformations. The [transformations
+documentation](dataset_transformations.html) has a full description of all transformations with
+examples.
+
+<br />
+
+<table class="table table-bordered">
+  <thead>
+    <tr>
+      <th class="text-left" style="width: 20%">Transformation</th>
+      <th class="text-center">Description</th>
+    </tr>
+  </thead>
+
+  <tbody>
+    <tr>
+      <td><strong>Map</strong></td>
+      <td>
+        <p>Takes one element and produces one element.</p>
+{% highlight python %}
+data.map(lambda x: x * 2, INT)
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>FlatMap</strong></td>
+      <td>
+        <p>Takes one element and produces zero, one, or more elements. </p>
+{% highlight python %}
+data.flat_map(
+  lambda x,c: [(1,word) for word in line.lower().split() for line in x],
+  (INT, STRING))
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>MapPartition</strong></td>
+      <td>
+        <p>Transforms a parallel partition in a single function call. The function get the partition
+        as an `Iterator` and can produce an arbitrary number of result values. The number of
+        elements in each partition depends on the degree-of-parallelism and previous operations.</p>
+{% highlight python %}
+data.map_partition(lambda x,c: [value * 2 for value in x], INT)
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Filter</strong></td>
+      <td>
+        <p>Evaluates a boolean function for each element and retains those for which the function
+        returns true.</p>
+{% highlight python %}
+data.filter(lambda x: x > 1000)
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Reduce</strong></td>
+      <td>
+        <p>Combines a group of elements into a single element by repeatedly combining two elements
+        into one. Reduce may be applied on a full data set, or on a grouped data set.</p>
+{% highlight python %}
+data.reduce(lambda x,y : x + y)
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>ReduceGroup</strong></td>
+      <td>
+        <p>Combines a group of elements into one or more elements. ReduceGroup may be applied on a
+        full data set, or on a grouped data set.</p>
+{% highlight python %}
+class Adder(GroupReduceFunction):
+  def reduce(self, iterator, collector):
+    count, word = iterator.next()
+    count += sum([x[0] for x in iterator)      
+    collector.collect((count, word))
+
+data.reduce_group(Adder(), (INT, STRING))
+{% endhighlight %}
+      </td>
+    </tr>
+
+    </tr>
+      <td><strong>Join</strong></td>
+      <td>
+        Joins two data sets by creating all pairs of elements that are equal on their keys.
+        Optionally uses a JoinFunction to turn the pair of elements into a single element. 
+        See <a href="#specifying-keys">keys</a> on how to define join keys.
+{% highlight python %}
+# In this case tuple fields are used as keys. 
+# "0" is the join field on the first tuple
+# "1" is the join field on the second tuple.
+result = input1.join(input2).where(0).equal_to(1)
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>CoGroup</strong></td>
+      <td>
+        <p>The two-dimensional variant of the reduce operation. Groups each input on one or more
+        fields and then joins the groups. The transformation function is called per pair of groups.
+        See <a href="#specifying-keys">keys</a> on how to define coGroup keys.</p>
+{% highlight python %}
+data1.co_group(data2).where(0).equal_to(1)
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Cross</strong></td>
+      <td>
+        <p>Builds the Cartesian product (cross product) of two inputs, creating all pairs of
+        elements. Optionally uses a CrossFunction to turn the pair of elements into a single
+        element.</p>
+{% highlight python %}
+result = data1.cross(data2)
+{% endhighlight %}
+      </td>
+    </tr>
+    <tr>
+      <td><strong>Union</strong></td>
+      <td>
+        <p>Produces the union of two data sets.</p>
+{% highlight python %}
+data.union(data2)
+{% endhighlight %}
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+[Back to Top](#top)
+
+
+Specifying Keys
+-------------
+
+Some transformations (like Join or CoGroup) require that a key is defined on
+its argument DataSets, and other transformations (Reduce, GroupReduce) allow that the DataSet is grouped on a key before they are
+applied.
+
+A DataSet is grouped as
+{% highlight python %}
+reduced = data \
+  .group_by(<define key here>) \
+  .reduce_group(<do something>)
+{% endhighlight %}
+
+The data model of Flink is not based on key-value pairs. Therefore,
+you do not need to physically pack the data set types into keys and
+values. Keys are "virtual": they are defined as functions over the
+actual data to guide the grouping operator.
+
+### Define keys for Tuples
+{:.no_toc}
+
+The simplest case is grouping a data set of Tuples on one or more
+fields of the Tuple:
+{% highlight python %}
+reduced = data \
+  .group_by(0) \
+  .reduce_group(<do something>)
+{% endhighlight %}
+
+The data set is grouped on the first field of the tuples. 
+The group-reduce function will thus receive groups of tuples with
+the same value in the first field.
+
+{% highlight python %}
+grouped = data \
+  .group_by(0,1) \
+  .reduce(/*do something*/)
+{% endhighlight %}
+
+The data set is grouped on the composite key consisting of the first and the
+second fields, therefore the reduce function will receive groups
+with the same value for both fields.
+
+A note on nested Tuples: If you have a DataSet with a nested tuple
+specifying `group_by(<index of tuple>)` will cause the system to use the full tuple as a key.
+
+[Back to top](#top)
+
+
+Passing Functions to Flink
+--------------------------
+
+Certain operations require user-defined functions, whereas all of them accept lambda functions and rich functions as arguments.
+
+{% highlight python %}
+data.filter(lambda x: x > 5)
+{% endhighlight %}
+
+{% highlight python %}
+class Filter(FilterFunction):
+    def filter(self, value):
+        return value > 5
+
+data.filter(Filter())
+{% endhighlight %}
+
+Rich functions allow the use of imported functions, provide access to broadcast-variables, 
+can be parameterized using __init__(), and are the go-to-option for complex functions.
+They are also the only way to define an optional `combine` function for a reduce operation.
+
+Lambda functions allow the easy insertion of one-liners. Note that a lambda function has to return
+an iterable, if the operation can return multiple values. (All functions receiving a collector argument)
+
+Flink requires type information at the time when it prepares the program for execution 
+(when the main method of the program is called). This is done by passing an exemplary 
+object that has the desired type. This holds also for tuples.
+
+{% highlight python %}
+(INT, STRING)
+{% endhighlight %}
+
+Would denote a tuple containing an int and a string. Note that for Operations that work strictly on tuples (like cross), no braces are required.
+
+There are a few Constants defined in flink.plan.Constants that allow this in a more readable fashion.
+
+[Back to top](#top)
+
+Data Types
+----------
+
+Flink's Python API currently only supports primitive python types (int, float, bool, string) and byte arrays.
+
+#### Tuples/Lists
+
+You can use the tuples (or lists) for composite types. Python tuples are mapped to the Flink Tuple type, that contain 
+a fix number of fields of various types (up to 25). Every field of a tuple can be a primitive type - including further tuples, resulting in nested tuples.
+
+{% highlight python %}
+word_counts = env.from_elements(("hello", 1), ("world",2))
+
+counts = word_counts.map(lambda x: x[1], INT)
+{% endhighlight %}
+
+When working with operators that require a Key for grouping or matching records,
+Tuples let you simply specify the positions of the fields to be used as key. You can specify more
+than one position to use composite keys (see [Section Data Transformations](#transformations)).
+
+{% highlight python %}
+wordCounts \
+    .group_by(0) \
+    .reduce(MyReduceFunction())
+{% endhighlight %}
+
+[Back to top](#top)
+
+Data Sources
+------------
+
+Data sources create the initial data sets, such as from files or from collections.
+
+File-based:
+
+- `read_text(path)` - Reads files line wise and returns them as Strings.
+- `read_csv(path, type)` - Parses files of comma (or another char) delimited fields.
+  Returns a DataSet of tuples. Supports the basic java types and their Value counterparts as field
+  types.
+
+Collection-based:
+
+- `from_elements(*args)` - Creates a data set from a Seq. All elements
+
+**Examples**
+
+{% highlight python %}
+env  = get_environment
+
+# read text file from local files system
+localLiens = env.read_text("file:#/path/to/my/textfile")
+
+ read text file from a HDFS running at nnHost:nnPort
+hdfsLines = env.read_text("hdfs://nnHost:nnPort/path/to/my/textfile")
+
+ read a CSV file with three fields
+csvInput = env.read_csv("hdfs:///the/CSV/file", (INT, STRING, DOUBLE))
+
+ create a set from some given elements
+values = env.from_elements("Foo", "bar", "foobar", "fubar")
+{% endhighlight %}
+
+[Back to top](#top)
+
+Data Sinks
+----------
+
+Data sinks consume DataSets and are used to store or return them:
+
+- `write_text()` - Writes elements line-wise as Strings. The Strings are
+  obtained by calling the *str()* method of each element.
+- `write_csv(...)` - Writes tuples as comma-separated value files. Row and field
+  delimiters are configurable. The value for each field comes from the *str()* method of the objects.
+- `output()` - Prints the *str()* value of each element on the
+  standard out.
+
+A DataSet can be input to multiple operations. Programs can write or print a data set and at the
+same time run additional transformations on them.
+
+**Examples**
+
+Standard data sink methods:
+
+{% highlight scala %}
+ write DataSet to a file on the local file system
+textData.write_text("file:///my/result/on/localFS")
+
+ write DataSet to a file on a HDFS with a namenode running at nnHost:nnPort
+textData.write_text("hdfs://nnHost:nnPort/my/result/on/localFS")
+
+ write DataSet to a file and overwrite the file if it exists
+textData.write_text("file:///my/result/on/localFS", WriteMode.OVERWRITE)
+
+ tuples as lines with pipe as the separator "a|b|c"
+values.write_csv("file:///path/to/the/result/file", line_delimiter="\n", field_delimiter="|")
+
+ this writes tuples in the text formatting "(a, b, c)", rather than as CSV lines
+values.write_text("file:///path/to/the/result/file")
+{% endhighlight %}
+
+[Back to top](#top)
+
+Broadcast Variables
+-------------------
+
+Broadcast variables allow you to make a data set available to all parallel instances of an
+operation, in addition to the regular input of the operation. This is useful for auxiliary data
+sets, or data-dependent parameterization. The data set will then be accessible at the operator as a
+Collection.
+
+- **Broadcast**: broadcast sets are registered by name via `with_broadcast_set(DataSet, String)`
+- **Access**: accessible via `self.context.get_broadcast_variable(String)` at the target operator
+
+{% highlight python %}
+class MapperBcv(MapFunction):
+    def map(self, value):
+        factor = self.context.get_broadcast_variable("bcv")[0][0]
+        return value * factor
+
+# 1. The DataSet to be broadcasted
+toBroadcast = env.from_elements(1, 2, 3) 
+data = env.from_elements("a", "b")
+
+# 2. Broadcast the DataSet
+data.map(MapperBcv(), INT).with_broadcast_set("bcv", toBroadcast) 
+{% endhighlight %}
+
+Make sure that the names (`bcv` in the previous example) match when registering and
+accessing broadcasted data sets.
+
+**Note**: As the content of broadcast variables is kept in-memory on each node, it should not become
+too large. For simpler things like scalar values you can simply parameterize the rich function.
+
+[Back to top](#top)
+
+Parallel Execution
+------------------
+
+This section describes how the parallel execution of programs can be configured in Flink. A Flink
+program consists of multiple tasks (operators, data sources, and sinks). A task is split into
+several parallel instances for execution and each parallel instance processes a subset of the task's
+input data. The number of parallel instances of a task is called its *parallelism* or *degree of
+parallelism (DOP)*.
+
+The degree of parallelism of a task can be specified in Flink on different levels.
+
+### Execution Environment Level
+
+Flink programs are executed in the context of an [execution environmentt](#program-skeleton). An
+execution environment defines a default parallelism for all operators, data sources, and data sinks
+it executes. Execution environment parallelism can be overwritten by explicitly configuring the
+parallelism of an operator.
+
+The default parallelism of an execution environment can be specified by calling the
+`set_degree_of_parallelism()` method. To execute all operators, data sources, and data sinks of the
+[WordCount](#example-program) example program with a parallelism of `3`, set the default parallelism of the
+execution environment as follows:
+
+{% highlight python %}
+env = get_environment()
+env.set_degree_of_parallelism(3)
+
+text.flat_map(lambda x,c: x.lower().split(), (INT, STRING)) \
+    .group_by(1) \
+    .reduce_group(Adder(), (INT, STRING), combinable=True) \
+    .output()
+
+env.execute()
+{% endhighlight %}
+
+### System Level
+
+A system-wide default parallelism for all execution environments can be defined by setting the
+`parallelization.degree.default` property in `./conf/flink-conf.yaml`. See the
+[Configuration](config.html) documentation for details.
+
+[Back to top](#top)
+
+Executing Plans
+---------------
+
+To run the plan with Flink, go to your Flink distribution, and run the pyflink.sh script from the /bin folder. 
+use pyflink2.sh for python 2.7, and pyflink3.sh for python 3.4. The script containing the plan has to be passed 
+as the first argument, followed by a number of additional python packages, and finally, separated by - additional 
+arguments that will be fed to the script. 
+
+{% highlight python %}
+./bin/pyflink<2/3>.sh <Script>[ <pathToPackage1>[ <pathToPackageX]][ - <param1>[ <paramX>]]
+{% endhighlight %}
+
+[Back to top](#top)
+
+Debugging
+---------------
+
+If you are running Flink programs locally, you can debug your program following this guide.
+First you have to enable debugging by setting the debug switch in the `env.execute(debug=True)` call. After
+submitting your program, open the jobmanager log file, and look for a line that says 
+`Waiting for external Process : <taskname>. Run python /tmp/flink/executor.py <port>` Now open `/tmp/flink` in your python
+IDE and run the `executor.py <port>`.
+
+[Back to top](#top)


[03/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup/config.md
----------------------------------------------------------------------
diff --git a/docs/setup/config.md b/docs/setup/config.md
new file mode 100644
index 0000000..a48c6d7
--- /dev/null
+++ b/docs/setup/config.md
@@ -0,0 +1,385 @@
+---
+title:  "Configuration"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+## Overview
+
+The default configuration parameters allow Flink to run out-of-the-box
+in single node setups.
+
+This page lists the most common options that are typically needed to set
+up a well performing (distributed) installation. In addition a full
+list of all available configuration parameters is listed here.
+
+All configuration is done in `conf/flink-conf.yaml`, which is expected to be
+a flat collection of [YAML key value pairs](http://www.yaml.org/spec/1.2/spec.html)
+with format `key: value`.
+
+The system and run scripts parse the config at startup time. Changes to the configuration
+file require restarting the Flink JobManager and TaskManagers.
+
+The configuration files for the TaskManagers can be different, Flink does not assume 
+uniform machines in the cluster.
+
+* This will be replaced by the TOC
+{:toc}
+
+
+## Common Options
+
+- `env.java.home`: The path to the Java installation to use (DEFAULT: system's
+default Java installation, if found). Needs to be specified if the startup
+scipts fail to automatically resolve the java home directory. Can be specified
+to point to a specific java installation or version. If this option is not
+specified, the startup scripts also evaluate the `$JAVA_HOME` environment variable.
+
+- `jobmanager.rpc.address`: The IP address of the JobManager, which is the
+master/coordinator of the distributed system (DEFAULT: localhost).
+
+- `jobmanager.rpc.port`: The port number of the JobManager (DEFAULT: 6123).
+
+- `jobmanager.heap.mb`: JVM heap size (in megabytes) for the JobManager. You may have to increase the heap size for the JobManager if you are running
+very large applications (with many operators), or if you are keeping a long history of them.
+
+- `taskmanager.heap.mb`: JVM heap size (in megabytes) for the TaskManagers,
+which are the parallel workers of the system. In
+contrast to Hadoop, Flink runs operators (e.g., join, aggregate) and
+user-defined functions (e.g., Map, Reduce, CoGroup) inside the TaskManager
+(including sorting/hashing/caching), so this value should be as
+large as possible. If the cluster is exclusively running Flink,
+the total amount of available memory per machine minus some memory for the 
+operating system (maybe 1-2 GB) is a good value.
+On YARN setups, this value is automatically configured to the size of 
+the TaskManager's YARN container, minus a certain tolerance value.
+
+- `taskmanager.numberOfTaskSlots`: The number of parallel operator or
+user function instances that a single TaskManager can run (DEFAULT: 1).
+If this value is larger than 1, a single TaskManager takes multiple instances of
+a function or operator. That way, the TaskManager can utilize multiple CPU cores,
+but at the same time, the available memory is divided between the different
+operator or function instances.
+This value is typically proportional to the number of physical CPU cores that
+the TaskManager's machine has (e.g., equal to the number of cores, or half the
+number of cores). [More about task slots](config.html#configuring-taskmanager-processing-slots).
+
+- `parallelism.default`: The default parallelism to use for programs that have
+no parallelism specified. (DEFAULT: 1). For setups that have no concurrent jobs
+running, setting this value to NumTaskManagers * NumSlotsPerTaskManager will
+cause the system to use all available execution resources for the program's
+execution. **Note**: The default parallelism can be overwriten for an entire
+job by calling `setParallelism(int parallelism)` on the `ExecutionEnvironment`
+or by passing `-p <parallelism>` to the Flink Command-line frontend. It can be
+overwritten for single transformations by calling `setParallelism(int
+parallelism)` on an operator. See the [programming
+guide](programming_guide.html#parallel-execution) for more information about the
+parallelism.
+
+- `fs.hdfs.hadoopconf`: The absolute path to the Hadoop File System's (HDFS)
+configuration directory (OPTIONAL VALUE).
+Specifying this value allows programs to reference HDFS files using short URIs
+(`hdfs:///path/to/files`, without including the address and port of the NameNode
+in the file URI). Without this option, HDFS files can be accessed, but require
+fully qualified URIs like `hdfs://address:port/path/to/files`.
+This option also causes file writers to pick up the HDFS's default values for block sizes
+and replication factors. Flink will look for the "core-site.xml" and
+"hdfs-site.xml" files in teh specified directory.
+
+
+## Advanced Options
+
+- `taskmanager.tmp.dirs`: The directory for temporary files, or a list of
+directories separated by the systems directory delimiter (for example ':'
+(colon) on Linux/Unix). If multiple directories are specified, then the temporary
+files will be distributed across the directories in a round-robin fashion. The
+I/O manager component will spawn one reading and one writing thread per
+directory. A directory may be listed multiple times to have the I/O manager use
+multiple threads for it (for example if it is physically stored on a very fast
+disc or RAID) (DEFAULT: The system's tmp dir).
+
+- `jobmanager.web.port`: Port of the JobManager's web interface (DEFAULT: 8081).
+
+- `fs.overwrite-files`: Specifies whether file output writers should overwrite
+existing files by default. Set to *true* to overwrite by default, *false* otherwise.
+(DEFAULT: false)
+
+- `fs.output.always-create-directory`: File writers running with a parallelism
+larger than one create a directory for the output file path and put the different
+result files (one per parallel writer task) into that directory. If this option
+is set to *true*, writers with a parallelism of 1 will also create a directory
+and place a single result file into it. If the option is set to *false*, the
+writer will directly create the file directly at the output path, without
+creating a containing directory. (DEFAULT: false)
+
+- `taskmanager.network.numberOfBuffers`: The number of buffers available to the
+network stack. This number determines how many streaming data exchange channels
+a TaskManager can have at the same time and how well buffered the channels are.
+If a job is rejected or you get a warning that the system has not enough buffers
+available, increase this value (DEFAULT: 2048).
+
+- `taskmanager.memory.size`: The amount of memory (in megabytes) that the task
+manager reserves on the JVM's heap space for sorting, hash tables, and caching
+of intermediate results. If unspecified (-1), the memory manager will take a fixed
+ratio of the heap memory available to the JVM, as specified by
+`taskmanager.memory.fraction`. (DEFAULT: -1)
+
+- `taskmanager.memory.fraction`: The relative amount of memory that the task
+manager reserves for sorting, hash tables, and caching of intermediate results.
+For example, a value of 0.8 means that TaskManagers reserve 80% of the
+JVM's heap space for internal data buffers, leaving 20% of the JVM's heap space
+free for objects created by user-defined functions. (DEFAULT: 0.7)
+This parameter is only evaluated, if `taskmanager.memory.size` is not set.
+
+
+## Full Reference
+
+### HDFS
+
+These parameters configure the default HDFS used by Flink. Setups that do not
+specify a HDFS configuration have to specify the full path to 
+HDFS files (`hdfs://address:port/path/to/files`) Files will also be written
+with default HDFS parameters (block size, replication factor).
+
+- `fs.hdfs.hadoopconf`: The absolute path to the Hadoop configuration directory.
+The system will look for the "core-site.xml" and "hdfs-site.xml" files in that
+directory (DEFAULT: null).
+- `fs.hdfs.hdfsdefault`: The absolute path of Hadoop's own configuration file
+"hdfs-default.xml" (DEFAULT: null).
+- `fs.hdfs.hdfssite`: The absolute path of Hadoop's own configuration file
+"hdfs-site.xml" (DEFAULT: null).
+
+### JobManager &amp; TaskManager
+
+The following parameters configure Flink's JobManager and TaskManagers.
+
+- `jobmanager.rpc.address`: The IP address of the JobManager, which is the
+master/coordinator of the distributed system (DEFAULT: localhost).
+- `jobmanager.rpc.port`: The port number of the JobManager (DEFAULT: 6123).
+- `taskmanager.rpc.port`: The task manager's IPC port (DEFAULT: 6122).
+- `taskmanager.data.port`: The task manager's port used for data exchange
+operations (DEFAULT: 6121).
+- `jobmanager.heap.mb`: JVM heap size (in megabytes) for the JobManager
+(DEFAULT: 256).
+- `taskmanager.heap.mb`: JVM heap size (in megabytes) for the TaskManagers,
+which are the parallel workers of the system. In
+contrast to Hadoop, Flink runs operators (e.g., join, aggregate) and
+user-defined functions (e.g., Map, Reduce, CoGroup) inside the TaskManager
+(including sorting/hashing/caching), so this value should be as
+large as possible (DEFAULT: 512). On YARN setups, this value is automatically
+configured to the size of the TaskManager's YARN container, minus a
+certain tolerance value.
+- `taskmanager.numberOfTaskSlots`: The number of parallel operator or
+user function instances that a single TaskManager can run (DEFAULT: 1).
+If this value is larger than 1, a single TaskManager takes multiple instances of
+a function or operator. That way, the TaskManager can utilize multiple CPU cores,
+but at the same time, the available memory is divided between the different
+operator or function instances.
+This value is typically proportional to the number of physical CPU cores that
+the TaskManager's machine has (e.g., equal to the number of cores, or half the
+number of cores).
+- `taskmanager.tmp.dirs`: The directory for temporary files, or a list of
+directories separated by the systems directory delimiter (for example ':'
+(colon) on Linux/Unix). If multiple directories are specified, then the temporary
+files will be distributed across the directories in a round robin fashion. The
+I/O manager component will spawn one reading and one writing thread per
+directory. A directory may be listed multiple times to have the I/O manager use
+multiple threads for it (for example if it is physically stored on a very fast
+disc or RAID) (DEFAULT: The system's tmp dir).
+- `taskmanager.network.numberOfBuffers`: The number of buffers available to the
+network stack. This number determines how many streaming data exchange channels
+a TaskManager can have at the same time and how well buffered the channels are.
+If a job is rejected or you get a warning that the system has not enough buffers
+available, increase this value (DEFAULT: 2048).
+- `taskmanager.network.bufferSizeInBytes`: The size of the network buffers, in
+bytes (DEFAULT: 32768 (= 32 KiBytes)).
+- `taskmanager.memory.size`: The amount of memory (in megabytes) that the task
+manager reserves on the JVM's heap space for sorting, hash tables, and caching
+of intermediate results. If unspecified (-1), the memory manager will take a fixed
+ratio of the heap memory available to the JVM, as specified by
+`taskmanager.memory.fraction`. (DEFAULT: -1)
+- `taskmanager.memory.fraction`: The relative amount of memory that the task
+manager reserves for sorting, hash tables, and caching of intermediate results.
+For example, a value of 0.8 means that TaskManagers reserve 80% of the
+JVM's heap space for internal data buffers, leaving 20% of the JVM's heap space
+free for objects created by user-defined functions. (DEFAULT: 0.7)
+This parameter is only evaluated, if `taskmanager.memory.size` is not set.
+- `jobclient.polling.interval`: The interval (in seconds) in which the client
+polls the JobManager for the status of its job (DEFAULT: 2).
+- `taskmanager.runtime.max-fan`: The maximal fan-in for external merge joins and
+fan-out for spilling hash tables. Limits the number of file handles per operator,
+but may cause intermediate merging/partitioning, if set too small (DEFAULT: 128).
+- `taskmanager.runtime.sort-spilling-threshold`: A sort operation starts spilling
+when this fraction of its memory budget is full (DEFAULT: 0.8).
+- `taskmanager.heartbeat-interval`: The interval in which the TaskManager sends
+heartbeats to the JobManager.
+- `jobmanager.max-heartbeat-delay-before-failure.msecs`: The maximum time that a
+TaskManager hearbeat may be missing before the TaskManager is considered failed.
+
+### Distributed Coordination (via Akka)
+
+- `akka.ask.timeout`: Timeout used for all futures and blocking Akka calls. If Flink fails due to timeouts then you should try to increase this value. Timeouts can be caused by slow machines or a congested network. The timeout value requires a time-unit specifier (ms/s/min/h/d) (DEFAULT: **100 s**).
+- `akka.lookup.timeout`: Timeout used for the lookup of the JobManager. The timeout value has to contain a time-unit specifier (ms/s/min/h/d) (DEFAULT: **10 s**).
+- `akka.framesize`: Maximum size of messages which are sent between the JobManager and the TaskManagers. If Flink fails because messages exceed this limit, then you should increase it. The message size requires a size-unit specifier (DEFAULT: **10485760b**).
+- `akka.watch.heartbeat.interval`: Heartbeat interval for Akka's DeathWatch mechanism to detect dead TaskManagers. If TaskManagers are wrongly marked dead because of lost or delayed heartbeat messages, then you should increase this value. A thorough description of Akka's DeathWatch can be found [here](http://doc.akka.io/docs/akka/snapshot/scala/remoting.html#failure-detector) (DEFAULT: **akka.ask.timeout/10**).
+- `akka.watch.heartbeat.pause`: Acceptable heartbeat pause for Akka's DeathWatch mechanism. A low value does not allow a irregular heartbeat. A thorough description of Akka's DeathWatch can be found [here](http://doc.akka.io/docs/akka/snapshot/scala/remoting.html#failure-detector) (DEFAULT: **akka.ask.timeout**).
+- `akka.watch.threshold`: Threshold for the DeathWatch failure detector. A low value is prone to false positives whereas a high value increases the time to detect a dead TaskManager. A thorough description of Akka's DeathWatch can be found [here](http://doc.akka.io/docs/akka/snapshot/scala/remoting.html#failure-detector) (DEFAULT: **12**).
+- `akka.transport.heartbeat.interval`: Heartbeat interval for Akka's transport failure detector. Since Flink uses TCP, the detector is not necessary. Therefore, the detector is disabled by setting the interval to a very high value. In case you should need the transport failure detector, set the interval to some reasonable value. The interval value requires a time-unit specifier (ms/s/min/h/d) (DEFAULT: **1000 s**).
+- `akka.transport.heartbeat.pause`: Acceptable heartbeat pause for Akka's transport failure detector. Since Flink uses TCP, the detector is not necessary. Therefore, the detector is disabled by setting the pause to a very high value. In case you should need the transport failure detector, set the pause to some reasonable value. The pause value requires a time-unit specifier (ms/s/min/h/d) (DEFAULT: **6000 s**).
+- `akka.transport.threshold`: Threshold for the transport failure detector. Since Flink uses TCP, the detector is not necessary and, thus, the threshold is set to a high value (DEFAULT: **300**).
+- `akka.tcp.timeout`: Timeout for all outbound connections. If you should experience problems with connecting to a TaskManager due to a slow network, you should increase this value (DEFAULT: **akka.ask.timeout**).
+- `akka.throughput`: Number of messages that are processed in a batch before returning the thread to the pool. Low values denote a fair scheduling whereas high values can increase the performance at the cost of unfairness (DEFAULT: **15**).
+- `akka.log.lifecycle.events`: Turns on the Akka's remote logging of events. Set this value to 'on' in case of debugging (DEFAULT: **off**).
+- `akka.startup-timeout`: Timeout after which the startup of a remote component is considered being failed (DEFAULT: **akka.ask.timeout**).
+
+### JobManager Web Frontend
+
+- `jobmanager.web.port`: Port of the JobManager's web interface that displays
+status of running jobs and execution time breakdowns of finished jobs
+(DEFAULT: 8081). Setting this value to `-1` disables the web frontend.
+- `jobmanager.web.history`: The number of latest jobs that the JobManager's web
+front-end in its history (DEFAULT: 5).
+
+### Webclient
+
+These parameters configure the web interface that can be used to submit jobs and
+review the compiler's execution plans.
+
+- `webclient.port`: The port of the webclient server (DEFAULT: 8080).
+- `webclient.tempdir`: The temp directory for the web server. Used for example
+for caching file fragments during file-uploads (DEFAULT: The system's temp
+directory).
+- `webclient.uploaddir`: The directory into which the web server will store
+uploaded programs (DEFAULT: ${webclient.tempdir}/webclient-jobs/).
+- `webclient.plandump`: The directory into which the web server will dump
+temporary JSON files describing the execution plans
+(DEFAULT: ${webclient.tempdir}/webclient-plans/).
+
+### File Systems
+
+The parameters define the behavior of tasks that create result files.
+
+- `fs.overwrite-files`: Specifies whether file output writers should overwrite
+existing files by default. Set to *true* to overwrite by default, *false* otherwise.
+(DEFAULT: false)
+- `fs.output.always-create-directory`: File writers running with a parallelism
+larger than one create a directory for the output file path and put the different
+result files (one per parallel writer task) into that directory. If this option
+is set to *true*, writers with a parallelism of 1 will also create a directory
+and place a single result file into it. If the option is set to *false*, the
+writer will directly create the file directly at the output path, without
+creating a containing directory. (DEFAULT: false)
+
+### Compiler/Optimizer
+
+- `compiler.delimited-informat.max-line-samples`: The maximum number of line
+samples taken by the compiler for delimited inputs. The samples are used to
+estimate the number of records. This value can be overridden for a specific
+input with the input format's parameters (DEFAULT: 10).
+- `compiler.delimited-informat.min-line-samples`: The minimum number of line
+samples taken by the compiler for delimited inputs. The samples are used to
+estimate the number of records. This value can be overridden for a specific
+input with the input format's parameters (DEFAULT: 2).
+- `compiler.delimited-informat.max-sample-len`: The maximal length of a line
+sample that the compiler takes for delimited inputs. If the length of a single
+sample exceeds this value (possible because of misconfiguration of the parser),
+the sampling aborts. This value can be overridden for a specific input with the
+input format's parameters (DEFAULT: 2097152 (= 2 MiBytes)).
+
+## YARN
+
+Please note that all ports used by Flink in a YARN session are offsetted by the YARN application ID
+to avoid duplicate port allocations when running multiple YARN sessions in parallel. 
+
+So if `yarn.am.rpc.port` is configured to `10245` and the session's application ID is `application_1406629969999_0002`, then the actual port being used is 10245 + 2 = 10247
+
+- `yarn.heap-cutoff-ratio`: Percentage of heap space to remove from containers started by YARN.
+
+
+## Background
+
+### Configuring the Network Buffers
+
+Network buffers are a critical resource for the communication layers. They are
+used to buffer records before transmission over a network, and to buffer
+incoming data before dissecting it into records and handing them to the
+application. A sufficient number of network buffers is critical to achieve a
+good throughput.
+
+In general, configure the task manager to have enough buffers that each logical
+network connection on you expect to be open at the same time has a dedicated
+buffer. A logical network connection exists for each point-to-point exchange of
+data over the network, which typically happens at repartitioning- or
+broadcasting steps. In those, each parallel task inside the TaskManager has to
+be able to talk to all other parallel tasks. Hence, the required number of
+buffers on a task manager is *total-degree-of-parallelism* (number of targets)
+\* *intra-node-parallelism* (number of sources in one task manager) \* *n*.
+Here, *n* is a constant that defines how many repartitioning-/broadcasting steps
+you expect to be active at the same time.
+
+Since the *intra-node-parallelism* is typically the number of cores, and more
+than 4 repartitioning or broadcasting channels are rarely active in parallel, it
+frequently boils down to *\#cores\^2\^* \* *\#machines* \* 4. To support for
+example a cluster of 20 8-core machines, you should use roughly 5000 network
+buffers for optimal throughput.
+
+Each network buffer has by default a size of 32 KiBytes. In the above example, the
+system would allocate roughly 300 MiBytes for network buffers.
+
+The number and size of network buffers can be configured with the following
+parameters:
+
+- `taskmanager.network.numberOfBuffers`, and
+- `taskmanager.network.bufferSizeInBytes`.
+
+### Configuring Temporary I/O Directories
+
+Although Flink aims to process as much data in main memory as possible,
+it is not uncommon that more data needs to be processed than memory is
+available. Flink's runtime is designed to write temporary data to disk
+to handle these situations.
+
+The `taskmanager.tmp.dirs` parameter specifies a list of directories into which
+Flink writes temporary files. The paths of the directories need to be
+separated by ':' (colon character). Flink will concurrently write (or
+read) one temporary file to (from) each configured directory. This way,
+temporary I/O can be evenly distributed over multiple independent I/O devices
+such as hard disks to improve performance. To leverage fast I/O devices (e.g.,
+SSD, RAID, NAS), it is possible to specify a directory multiple times.
+
+If the `taskmanager.tmp.dirs` parameter is not explicitly specified,
+Flink writes temporary data to the temporary directory of the operating
+system, such as */tmp* in Linux systems.
+
+
+### Configuring TaskManager processing slots
+
+Flink executes a program in parallel by splitting it into subtasks and scheduling these subtasks to processing slots.
+
+Each Flink TaskManager provides processing slots in the cluster. The number of slots
+is typically proportional to the number of available CPU cores __of each__ TaskManager.
+As a general recommendation, the number of available CPU cores is a good default for 
+`taskmanager.numberOfTaskSlots`.
+
+When starting a Flink application, users can supply the default number of slots to use for that job.
+The command line value therefore is called `-p` (for parallelism). In addition, it is possible
+to [set the number of slots in the programming APIs](programming_guide.html#parallel-execution) for 
+the whole application and individual operators.
+
+<img src="img/slots_parallelism.svg" class="img-responsive" />
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup/fig/FlinkOnYarn.svg
----------------------------------------------------------------------
diff --git a/docs/setup/fig/FlinkOnYarn.svg b/docs/setup/fig/FlinkOnYarn.svg
new file mode 100644
index 0000000..3eddf50
--- /dev/null
+++ b/docs/setup/fig/FlinkOnYarn.svg
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill-opacity="1" color-rendering="auto" color-interpolation="auto" stroke="black" text-rendering="auto" stroke-linecap="square" width="877" stroke-miterlimit="10" stroke-opacity="1" shape-rendering="auto" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" height="397" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12" stroke-dashoffset="0" image-rendering="auto">
+  <!--Generated by ySVG 2.5-->
+  <defs id="genericDefs"/>
+  <g>
+    <defs id="defs1">
+      <linearGradient x1="336.5" gradientUnits="userSpaceOnUse" x2="506.5" y1="386.5" y2="426.5" id="linearGradient1" spreadMethod="reflect">
+        <stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
+        <stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
+      </linearGradient>
+      <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1">
+        <path d="M0 0 L877 0 L877 397 L0 397 L0 0 Z"/>
+      </clipPath>
+      <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2">
+        <path d="M77 45 L954 45 L954 442 L77 442 L77 45 Z"/>
+      </clipPath>
+    </defs>
+    <g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="translate(-77,-45)" stroke="white">
+      <rect x="77" width="877" height="397" y="45" clip-path="url(#clipPath2)" stroke="none"/>
+    </g>
+    <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)">
+      <rect x="92" y="209" clip-path="url(#clipPath2)" width="119" rx="4" ry="4" height="117" stroke="none"/>
+    </g>
+    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
+      <text x="107.9238" xml:space="preserve" y="226.1387" clip-path="url(#clipPath2)" stroke="none">"Master" Node</text>
+      <rect x="92" y="209" clip-path="url(#clipPath2)" fill="none" width="119" rx="4" ry="4" height="117"/>
+    </g>
+    <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)">
+      <rect x="369" y="60" clip-path="url(#clipPath2)" width="105" rx="4" ry="4" height="117" stroke="none"/>
+    </g>
+    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
+      <text x="375.498" xml:space="preserve" y="115.6699" clip-path="url(#clipPath2)" stroke="none">YARN Resource</text>
+      <text x="395.4492" xml:space="preserve" y="129.6387" clip-path="url(#clipPath2)" stroke="none">Manager</text>
+      <rect x="369" y="60" clip-path="url(#clipPath2)" fill="none" width="105" rx="4" ry="4" height="117"/>
+    </g>
+    <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)">
+      <rect x="369" y="212" clip-path="url(#clipPath2)" width="105" rx="4" ry="4" height="117" stroke="none"/>
+    </g>
+    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
+      <text x="373.8457" xml:space="preserve" y="229.1387" clip-path="url(#clipPath2)" stroke="none">YARN Container</text>
+      <rect x="369" y="212" clip-path="url(#clipPath2)" fill="none" width="105" rx="4" ry="4" height="117"/>
+    </g>
+    <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)">
+      <rect x="614" y="212" clip-path="url(#clipPath2)" width="105" rx="4" ry="4" height="117" stroke="none"/>
+    </g>
+    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
+      <text x="618.8457" xml:space="preserve" y="229.1387" clip-path="url(#clipPath2)" stroke="none">YARN Container</text>
+      <rect x="614" y="212" clip-path="url(#clipPath2)" fill="none" width="105" rx="4" ry="4" height="117"/>
+    </g>
+    <g fill="url(#linearGradient1)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="url(#linearGradient1)">
+      <path d="M336.5 394.5 C341.6 386.5 501.4 386.5 506.5 394.5 L506.5 418.5 C501.4 426.5 341.6 426.5 336.5 418.5 Z" clip-path="url(#clipPath2)" stroke="none"/>
+    </g>
+    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
+      <path fill="none" d="M336.5 394.5 C341.6 386.5 501.4 386.5 506.5 394.5 L506.5 418.5 C501.4 426.5 341.6 426.5 336.5 418.5 Z" clip-path="url(#clipPath2)"/>
+      <path fill="none" d="M506.5 394.5 C501.4 402.5 341.6 402.5 336.5 394.5" clip-path="url(#clipPath2)"/>
+      <text x="405.1084" xml:space="preserve" y="410.6543" font-family="sans-serif" clip-path="url(#clipPath2)" stroke="none">HDFS</text>
+    </g>
+    <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)">
+      <rect x="791" y="212" clip-path="url(#clipPath2)" width="105" rx="4" ry="4" height="117" stroke="none"/>
+    </g>
+    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
+      <text x="795.8457" xml:space="preserve" y="229.1387" clip-path="url(#clipPath2)" stroke="none">YARN Container</text>
+      <rect x="791" y="212" clip-path="url(#clipPath2)" fill="none" width="105" rx="4" ry="4" height="117"/>
+    </g>
+    <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)">
+      <rect x="99" width="105" height="30" y="242.5" clip-path="url(#clipPath2)" stroke="none"/>
+    </g>
+    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
+      <text x="137.4375" xml:space="preserve" y="254.6699" clip-path="url(#clipPath2)" stroke="none">Flink</text>
+      <text x="115.7959" xml:space="preserve" y="268.6387" clip-path="url(#clipPath2)" stroke="none">YARN Client</text>
+      <rect fill="none" x="99" width="105" height="30" y="242.5" clip-path="url(#clipPath2)"/>
+    </g>
+    <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)">
+      <rect x="375" width="93" height="30" y="252.5" clip-path="url(#clipPath2)" stroke="none"/>
+    </g>
+    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
+      <text x="407.4375" xml:space="preserve" y="264.6699" clip-path="url(#clipPath2)" stroke="none">Flink</text>
+      <text x="385.9512" xml:space="preserve" y="278.6387" clip-path="url(#clipPath2)" stroke="none">JobManager</text>
+      <rect fill="none" x="375" width="93" height="30" y="252.5" clip-path="url(#clipPath2)"/>
+    </g>
+    <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)">
+      <rect x="375" width="93" height="30" y="282.5" clip-path="url(#clipPath2)" stroke="none"/>
+    </g>
+    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
+      <text x="389.5371" xml:space="preserve" y="294.6699" clip-path="url(#clipPath2)" stroke="none">YARN App.</text>
+      <text x="401.0098" xml:space="preserve" y="308.6387" clip-path="url(#clipPath2)" stroke="none">Master</text>
+      <rect fill="none" x="375" width="93" height="30" y="282.5" clip-path="url(#clipPath2)"/>
+    </g>
+    <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)">
+      <rect x="620" width="93" height="30" y="255.5" clip-path="url(#clipPath2)" stroke="none"/>
+    </g>
+    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
+      <text x="652.4375" xml:space="preserve" y="267.6699" clip-path="url(#clipPath2)" stroke="none">Flink</text>
+      <text x="626.2578" xml:space="preserve" y="281.6387" clip-path="url(#clipPath2)" stroke="none">TaskManager</text>
+      <rect fill="none" x="620" width="93" height="30" y="255.5" clip-path="url(#clipPath2)"/>
+    </g>
+    <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)">
+      <rect x="797" width="93" height="30" y="255.5" clip-path="url(#clipPath2)" stroke="none"/>
+    </g>
+    <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt">
+      <text x="829.4375" xml:space="preserve" y="267.6699" clip-path="url(#clipPath2)" stroke="none">Flink</text>
+      <text x="803.2578" xml:space="preserve" y="281.6387" clip-path="url(#clipPath2)" stroke="none">TaskManager</text>
+      <rect fill="none" x="797" width="93" height="30" y="255.5" clip-path="url(#clipPath2)"/>
+      <text x="917.1621" xml:space="preserve" y="274.6543" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">...</text>
+      <path fill="none" d="M210.991 234.6698 L361.997 151.3369" clip-path="url(#clipPath2)"/>
+      <path d="M369.0012 147.4715 L356.079 148.8919 L361.1215 151.82 L360.9107 157.6472 Z" clip-path="url(#clipPath2)" stroke="none"/>
+      <text x="157.7557" xml:space="preserve" y="141.7122" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">2. Register resources </text>
+      <text x="150.4286" xml:space="preserve" y="155.681" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">and request AppMaster </text>
+      <text x="199.911" xml:space="preserve" y="169.6497" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">container</text>
+      <path fill="none" d="M421.5 177.0215 L421.5 204.0303" clip-path="url(#clipPath2)"/>
+      <path d="M421.5 212.0303 L426.5 200.0303 L421.5 203.0303 L416.5 200.0303 Z" clip-path="url(#clipPath2)" stroke="none"/>
+      <text x="452.5664" xml:space="preserve" y="198.6543" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">3. Allocate AppMaster Container</text>
+      <path fill="none" d="M473.9872 270.5 L606.0008 270.5" clip-path="url(#clipPath2)"/>
+      <path d="M614.0008 270.5 L602.0008 265.5 L605.0008 270.5 L602.0008 275.5 Z" clip-path="url(#clipPath2)" stroke="none"/>
+      <text x="481.2285" xml:space="preserve" y="304.6543" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">4. Allocate Worker</text>
+      <path fill="none" d="M210.991 298.1268 L380.3388 385.3096" clip-path="url(#clipPath2)"/>
+      <path d="M387.4516 388.9714 L379.071 379.0333 L379.4497 384.8519 L374.4938 387.9242 Z" clip-path="url(#clipPath2)" stroke="none"/>
+      <text x="207.4763" xml:space="preserve" y="355.1486" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">1. Store Uberjar</text>
+      <text x="201.4939" xml:space="preserve" y="369.1174" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">and configuration</text>
+      <path fill="none" d="M421.5 388.4707 L421.5 336.9957" clip-path="url(#clipPath2)" stroke="gray"/>
+      <path fill="gray" d="M421.5 328.9957 L416.5 340.9957 L421.5 337.9957 L426.5 340.9957 Z" clip-path="url(#clipPath2)" stroke="none"/>
+      <path fill="none" d="M453.1718 388.9189 L606.9806 303.5393" clip-path="url(#clipPath2)" stroke="gray"/>
+      <path fill="gray" d="M613.9752 299.6566 L601.0566 301.109 L606.1063 304.0247 L605.91 309.8523 Z" clip-path="url(#clipPath2)" stroke="none"/>
+      <path fill="none" d="M719.0037 270.5 L783.0085 270.5" clip-path="url(#clipPath2)"/>
+      <path d="M791.0085 270.5 L779.0085 265.5 L782.0085 270.5 L779.0085 275.5 Z" clip-path="url(#clipPath2)" stroke="none"/>
+      <path fill="none" d="M473.6061 389.7075 L783.3726 289.8775" clip-path="url(#clipPath2)" stroke="gray"/>
+      <path fill="gray" d="M790.987 287.4236 L778.0318 286.3455 L782.4208 290.1843 L781.0992 295.8634 Z" clip-path="url(#clipPath2)" stroke="none"/>
+      <text x="542.0724" xml:space="preserve" y="392.1359" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">Always Bootstrap containers with</text>
+      <text x="593.1105" xml:space="preserve" y="406.1046" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">Uberjar and config</text>
+    </g>
+  </g>
+</svg>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup/fig/LICENSE.txt
----------------------------------------------------------------------
diff --git a/docs/setup/fig/LICENSE.txt b/docs/setup/fig/LICENSE.txt
new file mode 100644
index 0000000..35b8673
--- /dev/null
+++ b/docs/setup/fig/LICENSE.txt
@@ -0,0 +1,17 @@
+All image files in the folder and its subfolders are
+licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup/fig/flink_on_tez_translation.png
----------------------------------------------------------------------
diff --git a/docs/setup/fig/flink_on_tez_translation.png b/docs/setup/fig/flink_on_tez_translation.png
new file mode 100644
index 0000000..88fa4d5
Binary files /dev/null and b/docs/setup/fig/flink_on_tez_translation.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup/fig/flink_tez_vertex.png
----------------------------------------------------------------------
diff --git a/docs/setup/fig/flink_tez_vertex.png b/docs/setup/fig/flink_tez_vertex.png
new file mode 100644
index 0000000..b469862
Binary files /dev/null and b/docs/setup/fig/flink_tez_vertex.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup/flink_on_tez.md
----------------------------------------------------------------------
diff --git a/docs/setup/flink_on_tez.md b/docs/setup/flink_on_tez.md
new file mode 100644
index 0000000..f68c2a1
--- /dev/null
+++ b/docs/setup/flink_on_tez.md
@@ -0,0 +1,290 @@
+---
+title: "Running Flink on YARN leveraging Tez"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<a href="#top"></a>
+
+You can run Flink using Tez as an execution environment. Flink on Tez 
+is currently included in *flink-staging* in alpha. All classes are
+located in the *org.apache.flink.tez* package.
+
+* This will be replaced by the TOC
+{:toc}
+
+## Why Flink on Tez
+
+[Apache Tez](tez.apache.org) is a scalable data processing
+platform. Tez provides an API for specifying a directed acyclic
+graph (DAG), and functionality for placing the DAG vertices in YARN
+containers, as well as data shuffling.  In Flink's architecture,
+Tez is at about the same level as Flink's network stack. While Flink's
+network stack focuses heavily on low latency in order to support 
+pipelining, data streaming, and iterative algorithms, Tez
+focuses on scalability and elastic resource usage.
+
+Thus, by replacing Flink's network stack with Tez, users can get scalability
+and elastic resource usage in shared clusters while retaining Flink's 
+APIs, optimizer, and runtime algorithms (local sorts, hash tables, etc).
+
+Flink programs can run almost unmodified using Tez as an execution
+environment. Tez supports local execution (e.g., for debugging), and 
+remote execution on YARN.
+
+
+## Local execution
+
+The `LocalTezEnvironment` can be used run programs using the local
+mode provided by Tez. This example shows how WordCount can be run using the Tez local mode.
+It is identical to a normal Flink WordCount, except that the `LocalTezEnvironment` is used.
+To run in local Tez mode, you can simply run a Flink on Tez program
+from your IDE (e.g., right click and run).
+  
+{% highlight java %}
+public class WordCountExample {
+    public static void main(String[] args) throws Exception {
+        final LocalTezEnvironment env = LocalTezEnvironment.create();
+
+        DataSet<String> text = env.fromElements(
+            "Who's there?",
+            "I think I hear them. Stand, ho! Who's there?");
+
+        DataSet<Tuple2<String, Integer>> wordCounts = text
+            .flatMap(new LineSplitter())
+            .groupBy(0)
+            .sum(1);
+
+        wordCounts.print();
+
+        env.execute("Word Count Example");
+    }
+
+    public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
+        @Override
+        public void flatMap(String line, Collector<Tuple2<String, Integer>> out) {
+            for (String word : line.split(" ")) {
+                out.collect(new Tuple2<String, Integer>(word, 1));
+            }
+        }
+    }
+}
+{% endhighlight %}
+
+## YARN execution
+
+### Setup
+
+- Install Tez on your Hadoop 2 cluster following the instructions from the
+  [Apache Tez website](http://tez.apache.org/install.html). If you are able to run 
+  the examples that ship with Tez, then Tez has been successfully installed.
+  
+- Currently, you need to build Flink yourself to obtain Flink on Tez
+  (the reason is a Hadoop version compatibility: Tez releases artifacts
+  on Maven central with a Hadoop 2.6.0 dependency). Build Flink
+  using `mvn -DskipTests clean package -Pinclude-tez -Dhadoop.version=X.X.X -Dtez.version=X.X.X`.
+  Make sure that the Hadoop version matches the version that Tez uses.
+  Obtain the jar file contained in the Flink distribution under
+  `flink-staging/flink-tez/target/flink-tez-x.y.z-flink-fat-jar.jar` 
+  and upload it to some directory in HDFS. E.g., to upload the file
+  to the directory `/apps`, execute
+  {% highlight bash %}
+  $ hadoop fs -put /path/to/flink-tez-x.y.z-flink-fat-jar.jar /apps
+  {% endhighlight %}  
+ 
+- Edit the tez-site.xml configuration file, adding an entry that points to the
+  location of the file. E.g., assuming that the file is in the directory `/apps/`, 
+  add the following entry to tez-site.xml:
+    {% highlight xml %}
+<property>
+  <name>tez.aux.uris</name>
+  <value>${fs.default.name}/apps/flink-tez-x.y.z-flink-fat-jar.jar</value>
+</property>
+    {% endhighlight %}  
+    
+- At this point, you should be able to run the pre-packaged examples, e.g., run WordCount:
+  {% highlight bash %}
+  $ hadoop jar /path/to/flink-tez-x.y.z-flink-fat-jar.jar wc hdfs:/path/to/text hdfs:/path/to/output
+  {% endhighlight %}  
+
+
+### Packaging your program
+
+Application packaging is currently a bit different than in Flink standalone mode.
+  Flink programs that run on Tez need to be packaged in a "fat jar"
+  file that contain the Flink client. This jar can then be executed via the `hadoop jar` command.
+  An easy way to do that is to use the provided `flink-tez-quickstart` maven archetype.
+  Create a new project as
+  
+  {% highlight bash %}
+  $ mvn archetype:generate                             \
+    -DarchetypeGroupId=org.apache.flink              \
+    -DarchetypeArtifactId=flink-tez-quickstart           \
+    -DarchetypeVersion={{site.version}}
+  {% endhighlight %}
+  
+  and specify the group id, artifact id, version, and package of your project. For example,
+  let us assume the following options: `org.myorganization`, `flink-on-tez`, `0.1`, and `org.myorganization`.
+  You should see the following output on your terminal:
+  
+  {% highlight bash %}
+  $ mvn archetype:generate -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-tez-quickstart
+  [INFO] Scanning for projects...
+  [INFO]
+  [INFO] ------------------------------------------------------------------------
+  [INFO] Building Maven Stub Project (No POM) 1
+  [INFO] ------------------------------------------------------------------------
+  [INFO]
+  [INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) > generate-sources @ standalone-pom >>>
+  [INFO]
+  [INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) < generate-sources @ standalone-pom <<<
+  [INFO]
+  [INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
+  [INFO] Generating project in Interactive mode
+  [INFO] Archetype [org.apache.flink:flink-tez-quickstart:0.9-SNAPSHOT] found in catalog local
+  Define value for property 'groupId': : org.myorganization
+  Define value for property 'artifactId': : flink-on-tez
+  Define value for property 'version':  1.0-SNAPSHOT: : 0.1
+  Define value for property 'package':  org.myorganization: :
+  Confirm properties configuration:
+  groupId: org.myorganization
+  artifactId: flink-on-tez
+  version: 0.1
+  package: org.myorganization
+   Y: : Y
+  [INFO] ----------------------------------------------------------------------------
+  [INFO] Using following parameters for creating project from Archetype: flink-tez-quickstart:0.9-SNAPSHOT
+  [INFO] ----------------------------------------------------------------------------
+  [INFO] Parameter: groupId, Value: org.myorganization
+  [INFO] Parameter: artifactId, Value: flink-on-tez
+  [INFO] Parameter: version, Value: 0.1
+  [INFO] Parameter: package, Value: org.myorganization
+  [INFO] Parameter: packageInPathFormat, Value: org/myorganization
+  [INFO] Parameter: package, Value: org.myorganization
+  [INFO] Parameter: version, Value: 0.1
+  [INFO] Parameter: groupId, Value: org.myorganization
+  [INFO] Parameter: artifactId, Value: flink-on-tez
+  [INFO] project created from Archetype in dir: /Users/kostas/Dropbox/flink-tez-quickstart-test/flink-on-tez
+  [INFO] ------------------------------------------------------------------------
+  [INFO] BUILD SUCCESS
+  [INFO] ------------------------------------------------------------------------
+  [INFO] Total time: 44.130 s
+  [INFO] Finished at: 2015-02-26T17:59:45+01:00
+  [INFO] Final Memory: 15M/309M
+  [INFO] ------------------------------------------------------------------------
+  {% endhighlight %}
+  
+  The project contains an example called `YarnJob.java` that provides the skeleton 
+  for a Flink-on-Tez job. Program execution is currently done using Hadoop's `ProgramDriver`, 
+  see the `Driver.java` class for an example. Create the fat jar using 
+  `mvn -DskipTests clean package`. The resulting jar will be located in the `target/` directory. 
+  You can now execute a job as follows:
+  
+  {% highlight bash %}
+$ mvn -DskipTests clean package
+$ hadoop jar flink-on-tez/target/flink-on-tez-0.1-flink-fat-jar.jar yarnjob [command-line parameters]
+  {% endhighlight %}
+  
+  Flink programs that run on YARN using Tez as an execution engine need to use the `RemoteTezEnvironment` and 
+  register the class that contains the `main` method with that environment:
+  {% highlight java %}
+  public class WordCountExample {
+      public static void main(String[] args) throws Exception {
+          final RemoteTezEnvironment env = RemoteTezEnvironment.create();
+  
+          DataSet<String> text = env.fromElements(
+              "Who's there?",
+              "I think I hear them. Stand, ho! Who's there?");
+  
+          DataSet<Tuple2<String, Integer>> wordCounts = text
+              .flatMap(new LineSplitter())
+              .groupBy(0)
+              .sum(1);
+  
+          wordCounts.print();
+      
+          env.registerMainClass(WordCountExample.class);
+          env.execute("Word Count Example");
+      }
+  
+      public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
+          @Override
+          public void flatMap(String line, Collector<Tuple2<String, Integer>> out) {
+              for (String word : line.split(" ")) {
+                  out.collect(new Tuple2<String, Integer>(word, 1));
+              }
+          }
+      }
+  }
+  {% endhighlight %}
+
+
+## How it works
+
+Flink on Tez reuses the Flink APIs, the Flink optimizer,
+and the Flink local runtime, including Flink's hash table and sort implementations. Tez
+replaces Flink's network stack and control plan, and is responsible for scheduling and
+network shuffles.
+
+The figure below shows how a Flink program passes through the Flink stack and generates
+a Tez DAG (instead of a JobGraph that would be created using normal Flink execution).
+
+<div style="text-align: center;">
+<img src="fig/flink_on_tez_translation.png" alt="Translation of a Flink program to a Tez DAG." height="600px" vspace="20px" style="text-align: center;"/>
+</div>
+
+All local processing, including memory management, sorting, and hashing is performed by
+Flink as usual. Local processing is encapsulated in Tez vertices, as seen in the figure
+below. Tez vertices are connected by edges. Tez is currently based on a key-value data
+model. In the current implementation, the elements that are processed by Flink operators
+are wrapped inside Tez values, and the Tez key field is used to indicate the index of the target task
+that the elements are destined to.
+
+<div style="text-align: center;">
+<img src="fig/flink_tez_vertex.png" alt="Encapsulation of Flink runtime inside Tez vertices." height="200px" vspace="20px" style="text-align: center;"/>
+</div>
+
+## Limitations
+
+Currently, Flink on Tez does not support all features of the Flink API. We are working
+to enable all of the missing features listed below. In the meantime, if your project depends on these features, we suggest
+to use [Flink on YARN]({{site.baseurl}}/yarn_setup.html) or [Flink standalone]({{site.baseurl}}/setup_quickstart.html).
+
+The following features are currently missing.
+
+- Dedicated client: jobs need to be submitted via Hadoop's command-line client
+
+- Self-joins: currently binary operators that receive the same input are not supported due to 
+  [TEZ-1190](https://issues.apache.org/jira/browse/TEZ-1190).
+
+- Iterative programs are currently not supported.
+
+- Broadcast variables are currently not supported.
+
+- Accummulators and counters are currently not supported.
+
+- Performance: The current implementation has not been heavily tested for performance, and misses several optimizations,
+  including task chaining.
+
+- Streaming API: Streaming programs will not currently compile to Tez DAGs.
+
+- Scala API: The current implementation has only been tested with the Java API.
+
+
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup/gce_setup.md
----------------------------------------------------------------------
diff --git a/docs/setup/gce_setup.md b/docs/setup/gce_setup.md
new file mode 100644
index 0000000..c7316ef
--- /dev/null
+++ b/docs/setup/gce_setup.md
@@ -0,0 +1,89 @@
+---
+title:  "Google Compute Engine Setup"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+
+This documentation provides instructions on how to setup Flink fully
+automatically with Hadoop 1 or Hadoop 2 on top of a
+[Google Compute Engine](https://cloud.google.com/compute/) cluster. This is made
+possible by Google's [bdutil](https://cloud.google.com/hadoop/bdutil) which
+starts a cluster and deploys Flink with Hadoop. To get started, just follow the
+steps below.
+
+* This will be replaced by the TOC
+{:toc}
+
+# Prerequisites
+
+## Install Google Cloud SDK
+
+Please follow the instructions on how to setup the
+[Google Cloud SDK](https://cloud.google.com/sdk/).
+
+## Install bdutil
+
+At the moment, there is no bdutil release yet which includes the Flink
+extension. However, you can get the latest version of bdutil with Flink support
+from [GitHub](https://github.com/GoogleCloudPlatform/bdutil):
+
+    git clone https://github.com/GoogleCloudPlatform/bdutil.git
+
+After you have downloaded the source, change into the newly created `bdutil`
+directory and continue with the next steps.
+
+# Deploying Flink on Google Compute Engine
+
+## Set up a bucket
+
+If you have not done so, create a bucket for the bdutil config and
+staging files. A new bucket can be created with gsutil:
+
+    gsutil mb gs://<bucket_name>
+
+
+## Adapt the bdutil config
+
+To deploy Flink with bdutil, adapt at least the following variables in
+bdutil_env.sh.
+
+    CONFIGBUCKET="<bucket_name>"
+    PROJECT="<compute_engine_project_name>"
+    NUM_WORKERS=<number_of_workers>
+
+## Adapt the Flink config
+
+bdutil's Flink extension handles the configuration for you. You may additionally
+adjust configuration variables in `extensions/flink/flink_env.sh`. If you want
+to make further configuration, please take a look at
+[configuring Flink](config.md). You will have to restart Flink after changing
+its configuration using `bin/stop-cluster` and `bin/start-cluster`.
+
+## Bring up a cluster with Flink
+
+To bring up the Flink cluster on Google Compute Engine, execute:
+
+    ./bdutil -e extensions/flink/flink_env.sh deploy
+
+## Run a Flink example job:
+
+    ./bdutil shell
+    cd /home/hadoop/flink-install/bin
+    ./flink run ../examples/flink-java-examples-*-WordCount.jar gs://dataflow-samples/shakespeare/othello.txt gs://<bucket_name>/output

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup/index.md
----------------------------------------------------------------------
diff --git a/docs/setup/index.md b/docs/setup/index.md
new file mode 100644
index 0000000..57341ec
--- /dev/null
+++ b/docs/setup/index.md
@@ -0,0 +1,21 @@
+---
+title: "Setup"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup/local_setup.md
----------------------------------------------------------------------
diff --git a/docs/setup/local_setup.md b/docs/setup/local_setup.md
new file mode 100644
index 0000000..00e9abf
--- /dev/null
+++ b/docs/setup/local_setup.md
@@ -0,0 +1,138 @@
+---
+title:  "Local Setup"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+This documentation is intended to provide instructions on how to run Flink locally on a single machine.
+
+* This will be replaced by the TOC
+{:toc}
+
+## Download
+
+Go to the [downloads page]({{ site.download_url}}) and get the ready to run package. If you want to interact with Hadoop (e.g. HDFS or HBase), make sure to pick the Flink package **matching your Hadoop version**. When in doubt or you plan to just work with the local file system pick the package for Hadoop 1.2.x.
+
+## Requirements
+
+Flink runs on **Linux**, **Mac OS X** and **Windows**. The only requirement for a local setup is **Java 1.6.x** or higher. The following manual assumes a *UNIX-like environment*, for Windows see [Flink on Windows](#flink-on-windows).
+
+You can check the correct installation of Java by issuing the following command:
+
+~~~bash
+java -version
+~~~
+
+The command should output something comparable to the following:
+
+~~~bash
+java version "1.6.0_22"
+Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
+Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)
+~~~
+
+## Configuration
+
+**For local mode Flink is ready to go out of the box and you don't need to change the default configuration.**
+
+The out of the box configuration will use your default Java installation. You can manually set the environment variable `JAVA_HOME` or the configuration key `env.java.home` in `conf/flink-conf.yaml` if you want to manually override the Java runtime to use. Consult the [configuration page](config.html) for further details about configuring Flink.
+
+## Starting Flink
+
+**You are now ready to start Flink.** Unpack the downloaded archive and change to the newly created `flink` directory. There you can start Flink in local mode:
+
+~~~bash
+$ tar xzf flink-*.tgz
+$ cd flink
+$ bin/start-local.sh
+Starting job manager
+~~~
+
+You can check that the system is running by checking the log files in the `logs` directory:
+
+~~~bash
+$ tail log/flink-*-jobmanager-*.log
+INFO ... - Initializing memory manager with 409 megabytes of memory
+INFO ... - Trying to load org.apache.flinknephele.jobmanager.scheduler.local.LocalScheduler as scheduler
+INFO ... - Setting up web info server, using web-root directory ...
+INFO ... - Web info server will display information about nephele job-manager on localhost, port 8081.
+INFO ... - Starting web info server for JobManager on port 8081
+~~~
+
+The JobManager will also start a web frontend on port 8081, which you can check with your browser at `http://localhost:8081`.
+
+## Flink on Windows
+
+If you want to run Flink on Windows you need to download, unpack and configure the Flink archive as mentioned above. After that you can either use the **Windows Batch** file (`.bat`) or use **Cygwin**  to run the Flink Jobmanager.
+
+### Starting with Windows Batch Files
+
+To start Flink in local mode from the *Windows Batch*, open the command window, navigate to the `bin/` directory of Flink and run `start-local.bat`.
+
+Note: The ``bin`` folder of your Java Runtime Environment must be included in Window's ``%PATH%`` variable. Follow this [guide](http://www.java.com/en/download/help/path.xml) to add Java to the ``%PATH%`` variable.
+
+~~~bash
+$ cd flink
+$ cd bin
+$ start-local.bat
+Starting Flink job manager. Webinterface by default on http://localhost:8081/.
+Do not close this batch window. Stop job manager by pressing Ctrl+C.
+~~~
+
+After that, you need to open a second terminal to run jobs using `flink.bat`.
+
+### Starting with Cygwin and Unix Scripts
+
+With *Cygwin* you need to start the Cygwin Terminal, navigate to your Flink directory and run the `start-local.sh` script:
+
+~~~bash
+$ cd flink
+$ bin/start-local.sh
+Starting Nephele job manager
+~~~
+
+### Installing Flink from Git
+
+If you are installing Flink from the git repository and you are using the Windows git shell, Cygwin can produce a failure similiar to this one:
+
+~~~bash
+c:/flink/bin/start-local.sh: line 30: $'\r': command not found
+~~~
+
+This error occurs, because git is automatically transforming UNIX line endings to Windows style line endings when running in Windows. The problem is, that Cygwin can only deal with UNIX style line endings. The solution is to adjust the Cygwin settings to deal with the correct line endings by following these three steps:
+
+1. Start a Cygwin shell.
+
+2. Determine your home directory by entering
+
+~~~bash
+cd; pwd
+~~~
+
+It will return a path under the Cygwin root path.
+
+2.  Using NotePad, WordPad or a different text editor open the file `.bash_profile` in the home directory and append the following: (If the file does not exist you have to create it)
+
+~~~bash
+export SHELLOPTS
+set -o igncr
+~~~
+
+Save the file and open a new bash shell.
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup/yarn_setup.md
----------------------------------------------------------------------
diff --git a/docs/setup/yarn_setup.md b/docs/setup/yarn_setup.md
new file mode 100644
index 0000000..230b8f9
--- /dev/null
+++ b/docs/setup/yarn_setup.md
@@ -0,0 +1,264 @@
+---
+title:  "YARN Setup"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* This will be replaced by the TOC
+{:toc}
+
+## Quickstart: Start a long-running Flink cluster on YARN
+
+Start a YARN session with 4 Task Managers (each with 4 GB of Heapspace):
+
+~~~bash
+wget {{ site.download_url_hadoop2 }}
+tar xvzf flink-{{ site.version }}-bin-hadoop2.tgz
+cd flink-{{ site.version }}/
+./bin/yarn-session.sh -n 4 -jm 1024 -tm 4096
+~~~
+
+Specify the `-s` flag for the number of processing slots per Task Manager. We recommend to set the number of slots to the number of processors per machine.
+
+Once the session has been started, you can submit jobs to the cluster using the `./bin/flink` tool.
+
+## Quickstart: Run a Flink job on YARN
+
+~~~bash
+wget {{ site.download_url_hadoop2 }}
+tar xvzf flink-{{ site.version }}-bin-hadoop2.tgz
+cd flink-{{ site.version }}/
+./bin/flink -m yarn-cluster -yn 4 -yjm 1024 -ytm 4096 ./examples/flink-java-examples-{{ site.version }}-WordCount.jar
+~~~
+
+## Apache Flink on Hadoop YARN using a YARN Session
+
+Apache [Hadoop YARN](http://hadoop.apache.org/) is a cluster resource management framework. It allows to run various distributed applications on top of a cluster. Flink runs on YARN next to other applications. Users do not have to setup or install anything if there is already a YARN setup.
+
+**Requirements**
+
+- Apache Hadoop 2.2
+- HDFS (Hadoop Distributed File System) (or another distributed file system supported by Hadoop)
+
+If you have troubles using the Flink YARN client, have a look in the [FAQ section](faq.html).
+
+### Start Flink Session
+
+Follow these instructions to learn how to launch a Flink Session within your YARN cluster.
+
+A session will start all required Flink services (JobManager and TaskManagers) so that you can submit programs to the cluster. Note that you can run multiple programs per session.
+
+#### Download Flink for YARN
+
+Download the YARN tgz package on the [download page]({{site.baseurl}}/downloads.html). It contains the required files.
+
+Extract the package using:
+
+~~~bash
+tar xvzf flink-{{ site.version }}-bin-hadoop2.tgz
+cd flink-{{site.version }}/
+~~~
+
+If you want to build the YARN .tgz file from sources, follow the [build instructions](building.html). You can find the result of the build in `flink-dist/target/flink-{{ site.version }}-bin/flink-{{ site.version }}/` (*Note: The version might be different for you* ).
+
+
+#### Start a Session
+
+Use the following command to start a session
+
+~~~bash
+./bin/yarn-session.sh
+~~~
+
+This command will show you the following overview:
+
+~~~bash
+Usage:
+   Required
+     -n,--container <arg>   Number of YARN container to allocate (=Number of Task Managers)
+   Optional
+     -D <arg>                        Dynamic properties
+     -d,--detached                   Start detached
+     -jm,--jobManagerMemory <arg>    Memory for JobManager Container [in MB]
+     -q,--query                      Display available YARN resources (memory, cores)
+     -qu,--queue <arg>               Specify YARN queue.
+     -s,--slots <arg>                Number of slots per TaskManager
+     -tm,--taskManagerMemory <arg>   Memory per TaskManager Container [in MB]
+~~~
+
+Please note that the Client requires the `YARN_CONF_DIR` or `HADOOP_CONF_DIR` environment variable to be set to read the YARN and HDFS configuration.
+
+**Example:** Issue the following command to allocate 10 Task Managers, with 8 GB of memory and 32 processing slots each:
+
+~~~bash
+./bin/yarn-session.sh -n 10 -tm 8192 -s 32
+~~~
+
+The system will use the configuration in `conf/flink-config.yaml`. Please follow our [configuration guide](config.html) if you want to change something. 
+
+Flink on YARN will overwrite the following configuration parameters `jobmanager.rpc.address` (because the JobManager is always allocated at different machines), `taskmanager.tmp.dirs` (we are using the tmp directories given by YARN) and `parallelism.default` if the number of slots has been specified.
+
+If you don't want to change the configuration file to set configuration parameters, there is the option to pass dynamic properties via the `-D` flag. So you can pass parameters this way: `-Dfs.overwrite-files=true -Dtaskmanager.network.numberOfBuffers=16368`.
+
+The example invocation starts 11 containers, since there is one additional container for the ApplicationMaster and Job Manager.
+
+Once Flink is deployed in your YARN cluster, it will show you the connection details of the Job Manager.
+
+Stop the YARN session by stopping the unix process (using CTRL+C) or by entering 'stop' into the client.
+
+#### Detached YARN session
+
+If you do not want to keep the Flink YARN client running all the time, its also possible to start a *detached* YARN session. 
+The parameter for that is called `-d` or `--detached`.
+
+In that case, the Flink YARN client will only submit Flink to the cluster and then close itself.
+Note that in this case its not possible to stop the YARN session using Flink.
+
+Use the YARN utilities (`yarn application -kill <appId`) to stop the YARN session.
+
+
+### Submit Job to Flink
+
+Use the following command to submit a Flink program to the YARN cluster:
+
+~~~bash
+./bin/flink
+~~~
+
+Please refer to the documentation of the [commandline client](cli.html).
+
+The command will show you a help menu like this:
+
+~~~bash
+[...]
+Action "run" compiles and runs a program.
+
+  Syntax: run [OPTIONS] <jar-file> <arguments>
+  "run" action arguments:
+     -c,--class <classname>           Class with the program entry point ("main"
+                                      method or "getPlan()" method. Only needed
+                                      if the JAR file does not specify the class
+                                      in its manifest.
+     -m,--jobmanager <host:port>      Address of the JobManager (master) to
+                                      which to connect. Use this flag to connect
+                                      to a different JobManager than the one
+                                      specified in the configuration.
+     -p,--parallelism <parallelism>   The parallelism with which to run the
+                                      program. Optional flag to override the
+                                      default value specified in the
+                                      configuration
+~~~
+
+Use the *run* action to submit a job to YARN. The client is able to determine the address of the JobManager. In the rare event of a problem, you can also pass the JobManager address using the `-m` argument. The JobManager address is visible in the YARN console.
+
+**Example**
+
+~~~bash
+wget -O apache-license-v2.txt http://www.apache.org/licenses/LICENSE-2.0.txt
+hadoop fs -copyFromLocal LICENSE-2.0.txt hdfs:/// ...
+./bin/flink run ./examples/flink-java-examples-{{site.version }}-WordCount.jar \
+        hdfs:///..../apache-license-v2.txt hdfs:///.../wordcount-result.txt
+~~~
+
+If there is the following error, make sure that all TaskManagers started:
+
+~~~bash
+Exception in thread "main" org.apache.flink.compiler.CompilerException:
+    Available instances could not be determined from job manager: Connection timed out.
+~~~
+
+You can check the number of TaskManagers in the JobManager web interface. The address of this interface is printed in the YARN session console.
+
+If the TaskManagers do not show up after a minute, you should investigate the issue using the log files.
+
+
+## Run a single Flink job on Hadoop YARN
+
+The documentation above describes how to start a Flink cluster within a Hadoop YARN environment.
+It is also possible to launch Flink within YARN only for executing a single job.
+
+Please note that the client then expects the `-yn` value to be set (number of TaskManagers).
+
+***Example:***
+
+~~~bash
+./bin/flink run -m yarn-cluster -yn 2 ./examples/flink-java-examples-{{site.version }}-WordCount.jar 
+~~~
+
+The command line options of the YARN session are also available with the `./bin/flink` tool. They are prefixed with a `y` or `yarn` (for the long argument options).
+
+
+## Recovery behavior of Flink on YARN
+
+Flink's YARN client has the following configuration parameters to control how to behave in case of container failures. These parameters can be set either from the `conf/flink-conf.yaml` or when starting the YARN session, using `-D` parameters.
+
+- `yarn.reallocate-failed`: This parameter controls whether Flink should reallocate failed TaskManager containers. Default: true
+- `yarn.maximum-failed-containers`: The maximum number of failed containers the ApplicationMaster accepts until it fails the YARN session. Default: The number of initally requested TaskManagers (`-n`).
+- `yarn.application-attempts`: The number of ApplicationMaster (+ its TaskManager containers) attempts. If this value is set to 1 (default), the entire YARN session will fail when the Application master fails. Higher values specify the number of restarts of the ApplicationMaster by YARN.
+
+
+## Debugging a failed YARN session
+
+There are many reasons why a Flink YARN session deployment can fail. A misconfigured Hadoop setup (HDFS permissions, YARN configuration), version incompatibilities (running Flink with vanilla Hadoop dependencies on Cloudera Hadoop) or other errors.
+
+### Log Files
+
+In cases where the Flink YARN session fails during the deployment itself, users have to rely on the logging capabilities of Hadoop YARN. The most useful feature for that is the [YARN log aggregation](http://hortonworks.com/blog/simplifying-user-logs-management-and-access-in-yarn/). 
+To enable it, users have to set the `yarn.log-aggregation-enable` property to `true` in the `yarn-site.xml` file.
+Once that is enabled, users can use the following command to retrieve all log files of a (failed) YARN session.
+
+~~~
+yarn logs -applicationId <application ID>
+~~~
+
+Note that it takes a few seconds after the session has finished until the logs show up.
+
+### YARN Client console & Webinterfaces
+
+The Flink YARN client also prints error messages in the terminal if errors occur during runtime (for example if a TaskManager stops working after some time).
+
+In addition to that, there is the YARN Resource Manager webinterface (by default on port 8088). The port of the Resource Manager web interface is determined by the `yarn.resourcemanager.webapp.address` configuration value. 
+
+It allows to access log files for running YARN applications and shows diagnostics for failed apps.
+
+
+## Build YARN client for a specific Hadoop version
+
+Users using Hadoop distributions from companies like Hortonworks, Cloudera or MapR might have to build Flink against their specific versions of Hadoop (HDFS) and YARN. Please read the [build instructions](building.html) for more details.
+
+
+## Background / Internals
+
+This section briefly describes how Flink and YARN interact. 
+
+<img src="fig/FlinkOnYarn.svg" class="img-responsive">
+
+The YARN client needs to access the Hadoop configuration to connect to the YARN resource manager and to HDFS. It determines the Hadoop configuration using the following strategy:
+
+* Test if `YARN_CONF_DIR`, `HADOOP_CONF_DIR` or `HADOOP_CONF_PATH` are set (in that order). If one of these variables are set, they are used to read the configuration.
+* If the above strategy fails (this should not be the case in a correct YARN setup), the client is using the `HADOOP_HOME` environment variable. If it is set, the client tries to access `$HADOOP_HOME/etc/hadoop` (Hadoop 2) and `$HADOOP_HOME/conf` (Hadoop 1).
+
+When starting a new Flink YARN session, the client first checks if the requested resources (containers and memory) are available. After that, it uploads a jar that contains Flink and the configuration to HDFS (step 1).
+
+The next step of the client is to request (step 2) a YARN container to start the *ApplicationMaster* (step 3). Since the client registered the configuration and jar-file as a resource for the container, the NodeManager of YARN running on that particular machine will take care of preparing the container (e.g. downloading the files). Once that has finished, the *ApplicationMaster* (AM) is started.
+
+The *JobManager* and AM are running in the same container. Once they successfully started, the AM knows the address of the JobManager (its own host). It is generating a new Flink configuration file for the TaskManagers (so that they can connect to the JobManager). The file is also uploaded to HDFS. Additionally, the *AM* container is also serving Flink's web interface. The ports Flink is using for its services are the standard ports configured by the user + the application id as an offset. This allows users to execute multiple Flink YARN sessions in parallel.
+
+After that, the AM starts allocating the containers for Flink's TaskManagers, which will download the jar file and the modified configuration from the HDFS. Once these steps are completed, Flink is set up and ready to accept Jobs.
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/setup_quickstart.md
----------------------------------------------------------------------
diff --git a/docs/setup_quickstart.md b/docs/setup_quickstart.md
deleted file mode 100644
index 5a19d83..0000000
--- a/docs/setup_quickstart.md
+++ /dev/null
@@ -1,155 +0,0 @@
----
-title: "Quickstart: Setup"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-Get Flink up and running in a few simple steps.
-
-## Requirements
-
-Flink runs on __Linux, Mac OS X, and Windows__. To be able to run Flink, the
-only requirement is to have a working __Java 6.x__ (or higher)
-installation. Windows users, please take a look at the
-[Flink on Windows](local_setup.html#flink-on-windows) guide which describes
-how to run Flink on Windows for local setups.
-
-## Download
-Download the ready to run binary package. Choose the Flink distribution that __matches your Hadoop version__. If you are unsure which version to choose or you just want to run locally, pick the package for Hadoop 1.2.
-
-<ul class="nav nav-tabs">
-  <li class="active"><a href="#bin-hadoop1" data-toggle="tab">Hadoop 1.2</a></li>
-  <li><a href="#bin-hadoop2" data-toggle="tab">Hadoop 2 (YARN)</a></li>
-</ul>
-<p>
-<div class="tab-content text-center">
-  <div class="tab-pane active" id="bin-hadoop1">
-    <a class="btn btn-info btn-lg" onclick="_gaq.push(['_trackEvent','Action','download-quickstart-setup-1',this.href]);" href="{{site.FLINK_DOWNLOAD_URL_HADOOP1_STABLE}}"><i class="icon-download"> </i> Download Flink for Hadoop 1.2</a>
-  </div>
-  <div class="tab-pane" id="bin-hadoop2">
-    <a class="btn btn-info btn-lg" onclick="_gaq.push(['_trackEvent','Action','download-quickstart-setup-2',this.href]);" href="{{site.FLINK_DOWNLOAD_URL_HADOOP2_STABLE}}"><i class="icon-download"> </i> Download Flink for Hadoop 2</a>
-  </div>
-</div>
-</p>
-
-
-## Start
-  
-1. Go to the download directory.
-2. Unpack the downloaded archive.
-3. Start Flink.
-
-
-~~~bash
-$ cd ~/Downloads        # Go to download directory
-$ tar xzf flink-*.tgz   # Unpack the downloaded archive
-$ cd flink-{{site.FLINK_VERSION_SHORT}}
-$ bin/start-local.sh    # Start Flink
-~~~
-
-Check the __JobManager's web frontend__ at [http://localhost:8081](http://localhost:8081) and make
-sure everything is up and running.
-
-## Run Example
-
-Run the __Word Count example__ to see Flink at work.
-
-* __Download test data__:
-
-  ~~~bash
-  $ wget -O hamlet.txt http://www.gutenberg.org/cache/epub/1787/pg1787.txt
-  ~~~ 
-
-* You now have a text file called _hamlet.txt_ in your working directory.
-* __Start the example program__:
-  
-  ~~~bash
-  $ bin/flink run ./examples/flink-java-examples-{{site.FLINK_VERSION_SHORT}}-WordCount.jar file://`pwd`/hamlet.txt file://`pwd`/wordcount-result.txt
-  ~~~
-
-* You will find a file called __wordcount-result.txt__ in your current directory.
-  
-
-## Cluster Setup
-  
-__Running Flink on a cluster__ is as easy as running it locally. Having __passwordless SSH__ and
-__the same directory structure__ on all your cluster nodes lets you use our scripts to control
-everything.
-
-1. Copy the unpacked __flink__ directory from the downloaded archive to the same file system path
-on each node of your setup.
-2. Choose a __master node__ (JobManager) and set the `jobmanager.rpc.address` key in
-`conf/flink-conf.yaml` to its IP or hostname. Make sure that all nodes in your cluster have the same
-`jobmanager.rpc.address` configured.
-3. Add the IPs or hostnames (one per line) of all __worker nodes__ (TaskManager) to the slaves files
-in `conf/slaves`.
-
-You can now __start the cluster__ at your master node with `bin/start-cluster.sh`.
-
-
-The following __example__ illustrates the setup with three nodes (with IP addresses from _10.0.0.1_
-to _10.0.0.3_ and hostnames _master_, _worker1_, _worker2_) and shows the contents of the
-configuration files, which need to be accessible at the same path on all machines:
-
-<div class="row">
-  <div class="col-md-6 text-center">
-    <img src="img/quickstart_cluster.png" style="width: 85%">
-  </div>
-<div class="col-md-6">
-  <div class="row">
-    <p class="lead text-center">
-      /path/to/<strong>flink/conf/<br>flink-conf.yaml</strong>
-    <pre>jobmanager.rpc.address: 10.0.0.1</pre>
-    </p>
-  </div>
-<div class="row" style="margin-top: 1em;">
-  <p class="lead text-center">
-    /path/to/<strong>flink/<br>conf/slaves</strong>
-  <pre>
-10.0.0.2
-10.0.0.3</pre>
-  </p>
-</div>
-</div>
-</div>
-
-Have a look at the [Configuration](config.html) section of the documentation to see other available configuration options.
-For Flink to run efficiently, a few configuration values need to be set.
-
-In particular, 
-
- * the amount of available memory per TaskManager (`taskmanager.heap.mb`), 
- * the number of available CPUs per machine (`taskmanager.numberOfTaskSlots`),
- * the total number of CPUs in the cluster (`parallelism.default`) and
- * the temporary directories (`taskmanager.tmp.dirs`)
-
-
-are very important configuration values.
-
-## Flink on YARN
-You can easily deploy Flink on your existing __YARN cluster__. 
-
-1. Download the __Flink YARN package__ with the YARN client: [Flink for YARN]({{site.FLINK_DOWNLOAD_URL_YARN_STABLE}})
-2. Make sure your __HADOOP_HOME__ (or _YARN_CONF_DIR_ or _HADOOP_CONF_DIR_) __environment variable__ is set to read your YARN and HDFS configuration.
-3. Run the __YARN client__ with: `./bin/yarn-session.sh`. You can run the client with options `-n 10 -tm 8192` to allocate 10 TaskManagers with 8GB of memory each.
-
-For __more detailed instructions__, check out the programming Guides and examples.
\ No newline at end of file


[10/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/fig/stack.svg
----------------------------------------------------------------------
diff --git a/docs/internals/fig/stack.svg b/docs/internals/fig/stack.svg
new file mode 100644
index 0000000..7cdebc2
--- /dev/null
+++ b/docs/internals/fig/stack.svg
@@ -0,0 +1,606 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="223.19mm"
+   height="120.14mm"
+   id="svg2"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="Picture1.emf">
+  <metadata
+     id="metadata252">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="480"
+     id="namedview250"
+     showgrid="false"
+     inkscape:zoom="0.43625014"
+     inkscape:cx="395.41534"
+     inkscape:cy="212.84645"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <defs
+     id="defs4" />
+  <g
+     id="g6">
+    <path
+       style="fill:#d7e4bd;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 336.62761 106.86412   C 336.62761 102.73809 339.96594 99.399763 344.09197 99.399763   L 478.01909 99.399763   C 482.14511 99.399763 485.48345 102.73809 485.48345 106.86412   L 485.48345 136.72156   C 485.48345 140.84759 482.14511 144.18592 478.01909 144.18592   L 344.09197 144.18592   C 339.96594 144.18592 336.62761 140.84759 336.62761 136.72156   z"
+       id="path8" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 336.62761 106.86412   C 336.62761 102.73809 339.96594 99.399763 344.09197 99.399763   L 478.01909 99.399763   C 482.14511 99.399763 485.48345 102.73809 485.48345 106.86412   L 485.48345 136.72156   C 485.48345 140.84759 482.14511 144.18592 478.01909 144.18592   L 344.09197 144.18592   C 339.96594 144.18592 336.62761 140.84759 336.62761 136.72156   z"
+       id="path10" />
+    <text
+       xml:space="preserve"
+       x="363.12525"
+       y="130.71455"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text12">Java API</text>
+    <path
+       style="fill:#8eb4e3;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 159.41471 226.06882   C 159.41471 221.08008 163.46572 217.02907 168.45447 217.02907   L 774.19287 217.02907   C 779.18161 217.02907 783.23262 221.08008 783.23262 226.06882   L 783.23262 262.26534   C 783.23262 267.25408 779.18161 271.30509 774.19287 271.30509   L 168.45447 271.30509   C 163.46572 271.30509 159.41471 267.25408 159.41471 262.26534   z"
+       id="path14" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 159.41471 226.06882   C 159.41471 221.08008 163.46572 217.02907 168.45447 217.02907   L 774.19287 217.02907   C 779.18161 217.02907 783.23262 221.08008 783.23262 226.06882   L 783.23262 262.26534   C 783.23262 267.25408 779.18161 271.30509 774.19287 271.30509   L 168.45447 271.30509   C 163.46572 271.30509 159.41471 267.25408 159.41471 262.26534   z"
+       id="path16" />
+    <text
+       xml:space="preserve"
+       x="393.65398"
+       y="253.07254"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text18">Flink Runtime</text>
+    <path
+       style="fill:#c6d9f1;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 258.66444 162.34044   C 258.66444 157.27668 262.71545 153.22567 267.77921 153.22567   L 774.11785 153.22567   C 779.18161 153.22567 783.23262 157.27668 783.23262 162.34044   L 783.23262 198.79953   C 783.23262 203.82578 779.18161 207.9143 774.11785 207.9143   L 267.77921 207.9143   C 262.71545 207.9143 258.66444 203.82578 258.66444 198.79953   z"
+       id="path20" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 258.66444 162.34044   C 258.66444 157.27668 262.71545 153.22567 267.77921 153.22567   L 774.11785 153.22567   C 779.18161 153.22567 783.23262 157.27668 783.23262 162.34044   L 783.23262 198.79953   C 783.23262 203.82578 779.18161 207.9143 774.11785 207.9143   L 267.77921 207.9143   C 262.71545 207.9143 258.66444 203.82578 258.66444 198.79953   z"
+       id="path22" />
+    <text
+       xml:space="preserve"
+       x="348.84817"
+       y="189.46831"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text24">Flink Common API / Optimizer</text>
+    <path
+       style="fill:#93cddd;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 498.23662 106.86412   C 498.23662 102.73809 501.57495 99.399763 505.70098 99.399763   L 618.37905 99.399763   C 622.50508 99.399763 625.84341 102.73809 625.84341 106.86412   L 625.84341 136.72156   C 625.84341 140.84759 622.50508 144.18592 618.37905 144.18592   L 505.70098 144.18592   C 501.57495 144.18592 498.23662 140.84759 498.23662 136.72156   z"
+       id="path26" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 498.23662 106.86412   C 498.23662 102.73809 501.57495 99.399763 505.70098 99.399763   L 618.37905 99.399763   C 622.50508 99.399763 625.84341 102.73809 625.84341 106.86412   L 625.84341 136.72156   C 625.84341 140.84759 622.50508 144.18592 618.37905 144.18592   L 505.70098 144.18592   C 501.57495 144.18592 498.23662 140.84759 498.23662 136.72156   z"
+       id="path28" />
+    <text
+       xml:space="preserve"
+       x="508.83228"
+       y="130.71455"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text30">Scala</text>
+    <text
+       xml:space="preserve"
+       x="576.94925"
+       y="130.71455"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text32">API</text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 637.69637 106.90163   C 637.69637 102.7756 641.0347 99.399763 645.16073 99.399763   L 774.83053 99.399763   C 778.95656 99.399763 782.3324 102.7756 782.3324 106.90163   L 782.3324 136.8716   C 782.3324 141.03514 778.95656 144.37347 774.83053 144.37347   L 645.16073 144.37347   C 641.0347 144.37347 637.69637 141.03514 637.69637 136.8716   z"
+       id="path34" />
+    <path
+       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.037509345px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 636.42105 136.8716   L 636.42105 134.39598   L 638.93417 134.39598   L 638.93417 136.8716   z  M 636.42105 131.88286   L 636.42105 129.36973   L 638.93417 129.36973   L 638.93417 131.88286   z  M 636.42105 126.89411   L 636.42105 124.38099   L 638.93417 124.38099   L 638.93417 126.89411   z  M 636.42105 121.86786   L 636.42105 119.39224   L 638.93417 119.39224   L 638.93417 121.86786   z  M 636.42105 116.87912   L 636.42105 114.36599   L 638.93417 114.36599   L 638.93417 116.87912   z  M 636.42105 111.89037   L 636.42105 109.37725   L 638.93417 109.37725   L 638.93417 111.89037   z  M 636.42105 106.82661   L 636.45856 106.07643   L 636.6086 105.21371   L 636.79614 104.351   L 636.94618 104.01341   L 639.27176 104.87613   L 639.23425 104.98866   L 639.08421 105.5888   L 638.97168 106.18895   L 638.93417 106.93914   z  M 638.37153 101.46278   L 638.89667 100.82512   C 638.97168 100.7501 639.00919 100.71259 639.08421 100.63757   L 640.17198 99.737347   C 640.247 99.699838
  640.28451 99.662328 640.32202 99.624819   L 640.50957 99.512291   L 641.82239 101.65032   L 641.63485 101.76285   L 641.78488 101.65032   L 640.69711 102.58806   L 640.84715 102.40051   L 640.32202 103.07568   z  M 643.13522 98.42452   L 643.36028 98.349501   L 644.22299 98.236973   L 645.12322 98.161955   L 645.94842 98.161955   L 645.94842 100.67508   L 645.23574 100.67508   L 644.59809 100.67508   L 643.99794 100.78761   L 643.77288 100.82512   z  M 648.46155 98.161955   L 650.93716 98.161955   L 650.93716 100.67508   L 648.46155 100.67508   z  M 653.45029 98.161955   L 655.96342 98.161955   L 655.96342 100.67508   L 653.45029 100.67508   z  M 658.43903 98.161955   L 660.95216 98.161955   L 660.95216 100.67508   L 658.43903 100.67508   z  M 663.46529 98.161955   L 665.9409 98.161955   L 665.9409 100.67508   L 663.46529 100.67508   z  M 668.45403 98.161955   L 670.96715 98.161955   L 670.96715 100.67508   L 668.45403 100.67508   z  M 673.44277 98.161955   L 675.9559 98.161955   L
  675.9559 100.67508   L 673.44277 100.67508   z  M 678.46902 98.161955   L 680.94464 98.161955   L 680.94464 100.67508   L 678.46902 100.67508   z  M 683.45777 98.161955   L 685.97089 98.161955   L 685.97089 100.67508   L 683.45777 100.67508   z  M 688.44651 98.161955   L 690.95964 98.161955   L 690.95964 100.67508   L 688.44651 100.67508   z  M 693.47276 98.161955   L 695.94838 98.161955   L 695.94838 100.67508   L 693.47276 100.67508   z  M 698.4615 98.161955   L 700.97463 98.161955   L 700.97463 100.67508   L 698.4615 100.67508   z  M 703.45025 98.161955   L 705.96337 98.161955   L 705.96337 100.67508   L 703.45025 100.67508   z  M 708.4765 98.161955   L 710.95212 98.161955   L 710.95212 100.67508   L 708.4765 100.67508   z  M 713.46524 98.161955   L 715.97837 98.161955   L 715.97837 100.67508   L 713.46524 100.67508   z  M 718.45398 98.161955   L 720.96711 98.161955   L 720.96711 100.67508   L 718.45398 100.67508   z  M 723.48024 98.161955   L 725.95585 98.161955   L 725.95585 1
 00.67508   L 723.48024 100.67508   z  M 728.46898 98.161955   L 730.98211 98.161955   L 730.98211 100.67508   L 728.46898 100.67508   z  M 733.45772 98.161955   L 735.97085 98.161955   L 735.97085 100.67508   L 733.45772 100.67508   z  M 738.48397 98.161955   L 740.95959 98.161955   L 740.95959 100.67508   L 738.48397 100.67508   z  M 743.47272 98.161955   L 745.98584 98.161955   L 745.98584 100.67508   L 743.47272 100.67508   z  M 748.46146 98.161955   L 750.97459 98.161955   L 750.97459 100.67508   L 748.46146 100.67508   z  M 753.48771 98.161955   L 755.96333 98.161955   L 755.96333 100.67508   L 753.48771 100.67508   z  M 758.47646 98.161955   L 760.98958 98.161955   L 760.98958 100.67508   L 758.47646 100.67508   z  M 763.4652 98.161955   L 765.97832 98.161955   L 765.97832 100.67508   L 763.4652 100.67508   z  M 768.49145 98.161955   L 770.96707 98.161955   L 770.96707 100.67508   L 768.49145 100.67508   z  M 773.48019 98.161955   L 774.83053 98.161955   L 775.65574 98.199464 
   L 776.14336 98.274483   L 775.76826 100.7501   L 775.54321 100.71259   L 774.83053 100.67508   L 773.48019 100.67508   z  M 778.88154 99.137198   L 778.95656 99.174707   L 779.66924 99.624819   C 779.74425 99.662328 779.78176 99.699838 779.81927 99.737347   L 780.94455 100.63757   C 780.98206 100.71259 781.05708 100.7501 781.09459 100.82512   L 781.28214 101.01266   L 779.33165 102.58806   L 779.18161 102.40051   L 779.33165 102.58806   L 778.24388 101.65032   L 778.39392 101.76285   L 777.86879 101.46278   L 777.79377 101.42527   z  M 782.82002 103.33824   L 782.85753 103.45077   L 783.1576 104.23847   L 783.38266 105.10118   L 783.5327 105.9639   L 783.5327 106.22646   L 781.05708 106.33899   L 781.05708 106.33899   L 780.98206 105.70133   L 780.83202 105.10118   L 780.60697 104.53854   L 780.56946 104.42602   z  M 783.57021 108.7771   L 783.57021 111.29023   L 781.09459 111.29023   L 781.09459 108.7771   z  M 783.57021 113.80335   L 783.57021 116.27897   L 781.09459 116.27897  
  L 781.09459 113.80335   z  M 783.57021 118.79209   L 783.57021 121.30522   L 781.09459 121.30522   L 781.09459 118.79209   z  M 783.57021 123.78084   L 783.57021 126.29396   L 781.09459 126.29396   L 781.09459 123.78084   z  M 783.57021 128.80709   L 783.57021 131.28271   L 781.09459 131.28271   L 781.09459 128.80709   z  M 783.57021 133.79583   L 783.57021 136.30896   L 781.09459 136.30896   L 781.09459 133.79583   z  M 783.30764 139.08465   L 783.19511 139.42223   L 782.93255 140.24744   L 782.55745 140.99763   L 782.14485 141.7103   L 780.00682 140.39748   L 780.30689 139.94736   L 780.56946 139.38472   L 780.79452 138.78457   L 780.86953 138.44699   z  M 780.15686 143.81083   L 779.81927 144.07339   L 779.06909 144.56101   L 778.28139 144.93611   L 777.56871 145.19867   L 776.74351 142.83558   L 777.23113 142.64804   L 777.75626 142.42298   L 778.24388 142.12291   L 778.54395 141.86034   z  M 774.68049 145.64878   L 772.20488 145.64878   L 772.20488 143.13566   L 774.68049 143.
 13566   z  M 769.69175 145.64878   L 767.17862 145.64878   L 767.17862 143.13566   L 769.69175 143.13566   z  M 764.70301 145.64878   L 762.18988 145.64878   L 762.18988 143.13566   L 764.70301 143.13566   z  M 759.67675 145.64878   L 757.20114 145.64878   L 757.20114 143.13566   L 759.67675 143.13566   z  M 754.68801 145.64878   L 752.17489 145.64878   L 752.17489 143.13566   L 754.68801 143.13566   z  M 749.69927 145.64878   L 747.18614 145.64878   L 747.18614 143.13566   L 749.69927 143.13566   z  M 744.67302 145.64878   L 742.1974 145.64878   L 742.1974 143.13566   L 744.67302 143.13566   z  M 739.68427 145.64878   L 737.17115 145.64878   L 737.17115 143.13566   L 739.68427 143.13566   z  M 734.69553 145.64878   L 732.1824 145.64878   L 732.1824 143.13566   L 734.69553 143.13566   z  M 729.66928 145.64878   L 727.19366 145.64878   L 727.19366 143.13566   L 729.66928 143.13566   z  M 724.68054 145.64878   L 722.16741 145.64878   L 722.16741 143.13566   L 724.68054 143.13566   z  
 M 719.69179 145.64878   L 717.17867 145.64878   L 717.17867 143.13566   L 719.69179 143.13566   z  M 714.66554 145.64878   L 712.18992 145.64878   L 712.18992 143.13566   L 714.66554 143.13566   z  M 709.6768 145.64878   L 707.16367 145.64878   L 707.16367 143.13566   L 709.6768 143.13566   z  M 704.68806 145.64878   L 702.17493 145.64878   L 702.17493 143.13566   L 704.68806 143.13566   z  M 699.6618 145.64878   L 697.18619 145.64878   L 697.18619 143.13566   L 699.6618 143.13566   z  M 694.67306 145.64878   L 692.15993 145.64878   L 692.15993 143.13566   L 694.67306 143.13566   z  M 689.68432 145.64878   L 687.17119 145.64878   L 687.17119 143.13566   L 689.68432 143.13566   z  M 684.65807 145.64878   L 682.18245 145.64878   L 682.18245 143.13566   L 684.65807 143.13566   z  M 679.66932 145.64878   L 677.1562 145.64878   L 677.1562 143.13566   L 679.66932 143.13566   z  M 674.68058 145.64878   L 672.16745 145.64878   L 672.16745 143.13566   L 674.68058 143.13566   z  M 669.65433 1
 45.64878   L 667.17871 145.64878   L 667.17871 143.13566   L 669.65433 143.13566   z  M 664.66558 145.64878   L 662.15246 145.64878   L 662.15246 143.13566   L 664.66558 143.13566   z  M 659.67684 145.64878   L 657.16372 145.64878   L 657.16372 143.13566   L 659.67684 143.13566   z  M 654.65059 145.64878   L 652.17497 145.64878   L 652.17497 143.13566   L 654.65059 143.13566   z  M 649.66185 145.64878   L 647.14872 145.64878   L 647.14872 143.13566   L 649.66185 143.13566   z  M 644.59809 145.61128   L 644.33552 145.61128   L 643.47281 145.46124   L 642.6476 145.23618   L 641.82239 144.97362   L 641.70987 144.8986   L 642.68511 142.61053   L 642.68511 142.61053   L 643.28526 142.83558   L 643.8479 142.98562   L 644.48556 143.09815   L 644.71061 143.09815   z  M 639.38429 143.39822   L 639.08421 143.13566   C 639.00919 143.09815 638.97168 143.06064 638.89667 142.98562   L 637.99644 141.86034   L 637.54633 141.14766   L 639.64685 139.83484   L 639.94693 140.28495   L 640.84715 141.410
 23   L 640.6596 141.22268   L 640.95968 141.44774   z  M 636.57109 138.29695   L 636.49607 137.84684   L 636.42105 136.94662   L 638.93417 136.83409   L 638.97168 137.47175   L 639.0467 137.92186   z"
+       id="path36" />
+    <text
+       xml:space="preserve"
+       x="644.23405"
+       y="130.80306"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text38">SQL,Python</text>
+    <path
+       style="fill:#bfbfbf;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 67.254255 361.62759   C 67.254255 355.6636 72.055451 350.86241 78.019437 350.86241   L 772.46744 350.86241   C 778.43143 350.86241 783.23262 355.6636 783.23262 361.62759   L 783.23262 404.72583   C 783.23262 410.68981 778.43143 415.49101 772.46744 415.49101   L 78.019437 415.49101   C 72.055451 415.49101 67.254255 410.68981 67.254255 404.72583   z"
+       id="path40" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 67.254255 361.62759   C 67.254255 355.6636 72.055451 350.86241 78.019437 350.86241   L 772.46744 350.86241   C 778.43143 350.86241 783.23262 355.6636 783.23262 361.62759   L 783.23262 404.72583   C 783.23262 410.68981 778.43143 415.49101 772.46744 415.49101   L 78.019437 415.49101   C 72.055451 415.49101 67.254255 410.68981 67.254255 404.72583   z"
+       id="path42" />
+    <text
+       xml:space="preserve"
+       x="79.454242"
+       y="390.14011"
+       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text44">Storage </text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 356.48881 365.20973   C 356.48881 360.2585 360.50231 356.22624 365.45354 356.22624   L 449.90583 356.22624   C 454.87582 356.22624 458.88932 360.2585 458.88932 365.20973   L 458.88932 401.12493   C 458.88932 406.09492 454.87582 410.10842 449.90583 410.10842   L 365.45354 410.10842   C 360.50231 410.10842 356.48881 406.09492 356.48881 401.12493   z"
+       id="path46" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 356.48881 365.20973   C 356.48881 360.2585 360.50231 356.22624 365.45354 356.22624   L 449.90583 356.22624   C 454.87582 356.22624 458.88932 360.2585 458.88932 365.20973   L 458.88932 401.12493   C 458.88932 406.09492 454.87582 410.10842 449.90583 410.10842   L 365.45354 410.10842   C 360.50231 410.10842 356.48881 406.09492 356.48881 401.12493   z"
+       id="path48" />
+    <text
+       xml:space="preserve"
+       x="376.31276"
+       y="392.09071"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text50">HDFS </text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 225.39365 365.20973   C 225.39365 360.2585 229.42591 356.22624 234.37714 356.22624   L 331.11374 356.22624   C 336.06497 356.22624 340.09723 360.2585 340.09723 365.20973   L 340.09723 401.12493   C 340.09723 406.09492 336.06497 410.10842 331.11374 410.10842   L 234.37714 410.10842   C 229.42591 410.10842 225.39365 406.09492 225.39365 401.12493   z"
+       id="path52" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 225.39365 365.20973   C 225.39365 360.2585 229.42591 356.22624 234.37714 356.22624   L 331.11374 356.22624   C 336.06497 356.22624 340.09723 360.2585 340.09723 365.20973   L 340.09723 401.12493   C 340.09723 406.09492 336.06497 410.10842 331.11374 410.10842   L 234.37714 410.10842   C 229.42591 410.10842 225.39365 406.09492 225.39365 401.12493   z"
+       id="path54" />
+    <text
+       xml:space="preserve"
+       x="253.91802"
+       y="378.58735"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text56">Local </text>
+    <text
+       xml:space="preserve"
+       x="257.51892"
+       y="405.59407"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text58">Files </text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 472.01759 366.39128   C 472.01759 361.44004 476.03109 357.42654 480.98232 357.42654   L 565.15329 357.42654   C 570.12328 357.42654 574.13678 361.44004 574.13678 366.39128   L 574.13678 402.32523   C 574.13678 407.27646 570.12328 411.28996 565.15329 411.28996   L 480.98232 411.28996   C 476.03109 411.28996 472.01759 407.27646 472.01759 402.32523   z"
+       id="path60" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 472.01759 366.39128   C 472.01759 361.44004 476.03109 357.42654 480.98232 357.42654   L 565.15329 357.42654   C 570.12328 357.42654 574.13678 361.44004 574.13678 366.39128   L 574.13678 402.32523   C 574.13678 407.27646 570.12328 411.28996 565.15329 411.28996   L 480.98232 411.28996   C 476.03109 411.28996 472.01759 407.27646 472.01759 402.32523   z"
+       id="path62" />
+    <text
+       xml:space="preserve"
+       x="508.21008"
+       y="393.27592"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text64">S3</text>
+    <path
+       style="fill:#c3d69b;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 67.254255 291.59764   C 67.254255 285.63366 72.055451 280.79495 78.019437 280.79495   L 772.46744 280.79495   C 778.43143 280.79495 783.23262 285.63366 783.23262 291.59764   L 783.23262 334.69588   C 783.23262 340.65987 778.43143 345.46106 772.46744 345.46106   L 78.019437 345.46106   C 72.055451 345.46106 67.254255 340.65987 67.254255 334.69588   z"
+       id="path66" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 67.254255 291.59764   C 67.254255 285.63366 72.055451 280.79495 78.019437 280.79495   L 772.46744 280.79495   C 778.43143 280.79495 783.23262 285.63366 783.23262 291.59764   L 783.23262 334.69588   C 783.23262 340.65987 778.43143 345.46106 772.46744 345.46106   L 78.019437 345.46106   C 72.055451 345.46106 67.254255 340.65987 67.254255 334.69588   z"
+       id="path68" />
+    <text
+       xml:space="preserve"
+       x="79.454242"
+       y="308.99647"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text70">Cluster</text>
+    <text
+       xml:space="preserve"
+       x="79.454242"
+       y="333.00247"
+       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text72">Manager </text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 412.00264 295.17979   C 412.00264 290.2098 416.01614 286.1963 420.96737 286.1963   L 564.19681 286.1963   C 569.16679 286.1963 573.18029 290.2098 573.18029 295.17979   L 573.18029 331.09498   C 573.18029 336.04622 569.16679 340.07847 564.19681 340.07847   L 420.96737 340.07847   C 416.01614 340.07847 412.00264 336.04622 412.00264 331.09498   z"
+       id="path74" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 412.00264 295.17979   C 412.00264 290.2098 416.01614 286.1963 420.96737 286.1963   L 564.19681 286.1963   C 569.16679 286.1963 573.18029 290.2098 573.18029 295.17979   L 573.18029 331.09498   C 573.18029 336.04622 569.16679 340.07847 564.19681 340.07847   L 420.96737 340.07847   C 416.01614 340.07847 412.00264 336.04622 412.00264 331.09498   z"
+       id="path76" />
+    <text
+       xml:space="preserve"
+       x="462.29091"
+       y="322.04981"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text78">YARN </text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 588.70916 295.19854   C 588.70916 290.2098 592.72266 286.1963 597.6739 286.1963   L 763.24014 286.1963   C 768.19138 286.1963 772.20488 290.2098 772.20488 295.19854   L 772.20488 331.09498   C 772.20488 336.04622 768.19138 340.09723 763.24014 340.09723   L 597.6739 340.09723   C 592.72266 340.09723 588.70916 336.04622 588.70916 331.09498   z"
+       id="path80" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 588.70916 295.19854   C 588.70916 290.2098 592.72266 286.1963 597.6739 286.1963   L 763.24014 286.1963   C 768.19138 286.1963 772.20488 290.2098 772.20488 295.19854   L 772.20488 331.09498   C 772.20488 336.04622 768.19138 340.09723 763.24014 340.09723   L 597.6739 340.09723   C 592.72266 340.09723 588.70916 336.04622 588.70916 331.09498   z"
+       id="path82" />
+    <text
+       xml:space="preserve"
+       x="658.31057"
+       y="322.04981"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text84">EC2 </text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 237.67796 295.17979   C 237.67796 290.2098 241.71022 286.1963 246.66145 286.1963   L 391.44752 286.1963   C 396.39875 286.1963 400.41225 290.2098 400.41225 295.17979   L 400.41225 331.09498   C 400.41225 336.04622 396.39875 340.07847 391.44752 340.07847   L 246.66145 340.07847   C 241.71022 340.07847 237.67796 336.04622 237.67796 331.09498   z"
+       id="path86" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 237.67796 295.17979   C 237.67796 290.2098 241.71022 286.1963 246.66145 286.1963   L 391.44752 286.1963   C 396.39875 286.1963 400.41225 290.2098 400.41225 295.17979   L 400.41225 331.09498   C 400.41225 336.04622 396.39875 340.07847 391.44752 340.07847   L 246.66145 340.07847   C 241.71022 340.07847 237.67796 336.04622 237.67796 331.09498   z"
+       id="path88" />
+    <text
+       xml:space="preserve"
+       x="285.42287"
+       y="322.04981"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text90">Direct</text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 705.2507 365.22849   C 705.2507 360.27725 709.3017 356.22624 714.25294 356.22624   L 763.24014 356.22624   C 768.19138 356.22624 772.20488 360.27725 772.20488 365.22849   L 772.20488 401.12493   C 772.20488 406.11367 768.19138 410.12717 763.24014 410.12717   L 714.25294 410.12717   C 709.3017 410.12717 705.2507 406.11367 705.2507 401.12493   z"
+       id="path92" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 705.2507 365.22849   C 705.2507 360.27725 709.3017 356.22624 714.25294 356.22624   L 763.24014 356.22624   C 768.19138 356.22624 772.20488 360.27725 772.20488 365.22849   L 772.20488 401.12493   C 772.20488 406.11367 768.19138 410.12717 763.24014 410.12717   L 714.25294 410.12717   C 709.3017 410.12717 705.2507 406.11367 705.2507 401.12493   z"
+       id="path94" />
+    <text
+       xml:space="preserve"
+       x="726.42582"
+       y="392.09071"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text96">...</text>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 588.70916 366.39128   C 588.70916 361.44004 592.72266 357.42654 597.6739 357.42654   L 681.84486 357.42654   C 686.7961 357.42654 690.8096 361.44004 690.8096 366.39128   L 690.8096 402.32523   C 690.8096 407.27646 686.7961 411.28996 681.84486 411.28996   L 597.6739 411.28996   C 592.72266 411.28996 588.70916 407.27646 588.70916 402.32523   z"
+       id="path98" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 588.70916 366.39128   C 588.70916 361.44004 592.72266 357.42654 597.6739 357.42654   L 681.84486 357.42654   C 686.7961 357.42654 690.8096 361.44004 690.8096 366.39128   L 690.8096 402.32523   C 690.8096 407.27646 686.7961 411.28996 681.84486 411.28996   L 597.6739 411.28996   C 592.72266 411.28996 588.70916 407.27646 588.70916 402.32523   z"
+       id="path100" />
+    <text
+       xml:space="preserve"
+       x="610.33872"
+       y="393.27592"
+       style="font-size:22.505608px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text102">JDBC</text>
+    <text
+       xml:space="preserve"
+       x="66.875322"
+       y="177.50977"
+       style="font-size:13.803439px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text104">JobGraphs</text>
+    <text
+       xml:space="preserve"
+       x="30.416239"
+       y="194.01388"
+       style="font-size:13.803439px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text106">(generic data stream</text>
+    <text
+       xml:space="preserve"
+       x="70.476219"
+       y="210.51799"
+       style="font-size:13.803439px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text108">program)</text>
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 93.585815 151.16266   C 93.585815 147.27106 96.745977 144.1109 100.63757 144.1109   C 104.52917 144.1109 107.68933 147.27106 107.68933 151.16266   C 107.68933 155.05425 104.52917 158.21442 100.63757 158.21442   C 96.745977 158.21442 93.585815 155.05425 93.585815 151.16266 "
+       id="path110" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 93.585815 151.16266   C 93.585815 147.27106 96.745977 144.1109 100.63757 144.1109   C 104.52917 144.1109 107.68933 147.27106 107.68933 151.16266   C 107.68933 155.05425 104.52917 158.21442 100.63757 158.21442   C 96.745977 158.21442 93.585815 155.05425 93.585815 151.16266  "
+       id="path112" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 130.91699 151.16266   C 130.91699 147.27106 134.06777 144.1109 137.96875 144.1109   C 141.86034 144.1109 145.01113 147.27106 145.01113 151.16266   C 145.01113 155.05425 141.86034 158.21442 137.96875 158.21442   C 134.06777 158.21442 130.91699 155.05425 130.91699 151.16266 "
+       id="path114" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 130.91699 151.16266   C 130.91699 147.27106 134.06777 144.1109 137.96875 144.1109   C 141.86034 144.1109 145.01113 147.27106 145.01113 151.16266   C 145.01113 155.05425 141.86034 158.21442 137.96875 158.21442   C 134.06777 158.21442 130.91699 155.05425 130.91699 151.16266  "
+       id="path116" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 113.7002 123.99652   C 113.7002 120.10492 116.90725 116.94476 120.85511 116.94476   C 124.81234 116.94476 128.01002 120.10492 128.01002 123.99652   C 128.01002 127.88811 124.81234 131.04827 120.85511 131.04827   C 116.90725 131.04827 113.7002 127.88811 113.7002 123.99652 "
+       id="path118" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 113.7002 123.99652   C 113.7002 120.10492 116.90725 116.94476 120.85511 116.94476   C 124.81234 116.94476 128.01002 120.10492 128.01002 123.99652   C 128.01002 127.88811 124.81234 131.04827 120.85511 131.04827   C 116.90725 131.04827 113.7002 127.88811 113.7002 123.99652  "
+       id="path120" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 113.7002 96.005167   C 113.7002 92.113573 116.90725 88.953411 120.85511 88.953411   C 124.81234 88.953411 128.01002 92.113573 128.01002 96.005167   C 128.01002 99.896762 124.81234 103.05692 120.85511 103.05692   C 116.90725 103.05692 113.7002 99.896762 113.7002 96.005167 "
+       id="path122" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 113.7002 96.005167   C 113.7002 92.113573 116.90725 88.953411 120.85511 88.953411   C 124.81234 88.953411 128.01002 92.113573 128.01002 96.005167   C 128.01002 99.896762 124.81234 103.05692 120.85511 103.05692   C 116.90725 103.05692 113.7002 99.896762 113.7002 96.005167  "
+       id="path124" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 105.06367 145.63003   L 119.15781 131.53589   L 120.26434 132.64242   L 106.1702 146.73656   z  M 113.79397 132.6518   L 120.76133 131.0389   L 119.14843 138.00626   C 119.05466 138.42824 118.63268 138.6908 118.2107 138.59703   C 117.78872 138.49388 117.52615 138.08127 117.6293 137.65929   L 118.95151 131.91099   L 119.88924 132.84872   L 114.14094 134.17093   C 113.71896 134.27408 113.30635 134.01151 113.2032 133.58953   C 113.10943 133.16755 113.37199 132.74557 113.79397 132.6518   z"
+       id="path126" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 119.97364 117.14168   L 120.16119 104.71671   L 121.71782 104.74484   L 121.53028 117.16981   z  M 117.08542 109.25534   L 120.95826 103.25385   L 124.66231 109.37725   C 124.87799 109.74296 124.76546 110.22121 124.39036 110.44626   C 124.02465 110.67132 123.5464 110.54942 123.32135 110.1837   L 120.27371 105.12932   L 121.59592 105.15745   L 118.39825 110.10868   C 118.16381 110.4744 117.67619 110.57755 117.31047 110.34311   C 116.95414 110.10868 116.85099 109.62106 117.08542 109.25534   z"
+       id="path128" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 74.924916 151.16266   C 74.924916 147.27106 78.085078 144.1109 81.976672 144.1109   C 85.868267 144.1109 89.028429 147.27106 89.028429 151.16266   C 89.028429 155.05425 85.868267 158.21442 81.976672 158.21442   C 78.085078 158.21442 74.924916 155.05425 74.924916 151.16266 "
+       id="path130" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 74.924916 151.16266   C 74.924916 147.27106 78.085078 144.1109 81.976672 144.1109   C 85.868267 144.1109 89.028429 147.27106 89.028429 151.16266   C 89.028429 155.05425 85.868267 158.21442 81.976672 158.21442   C 78.085078 158.21442 74.924916 155.05425 74.924916 151.16266  "
+       id="path132" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 56.264017 151.16266   C 56.264017 147.27106 59.414802 144.1109 63.315774 144.1109   C 67.207368 144.1109 70.36753 147.27106 70.36753 151.16266   C 70.36753 155.05425 67.207368 158.21442 63.315774 158.21442   C 59.414802 158.21442 56.264017 155.05425 56.264017 151.16266 "
+       id="path134" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 56.264017 151.16266   C 56.264017 147.27106 59.414802 144.1109 63.315774 144.1109   C 67.207368 144.1109 70.36753 147.27106 70.36753 151.16266   C 70.36753 155.05425 67.207368 158.21442 63.315774 158.21442   C 59.414802 158.21442 56.264017 155.05425 56.264017 151.16266  "
+       id="path136" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 37.603118 151.16266   C 37.603118 147.27106 40.753903 144.1109 44.654875 144.1109   C 48.546469 144.1109 51.697254 147.27106 51.697254 151.16266   C 51.697254 155.05425 48.546469 158.21442 44.654875 158.21442   C 40.753903 158.21442 37.603118 155.05425 37.603118 151.16266 "
+       id="path138" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 37.603118 151.16266   C 37.603118 147.27106 40.753903 144.1109 44.654875 144.1109   C 48.546469 144.1109 51.697254 147.27106 51.697254 151.16266   C 51.697254 155.05425 48.546469 158.21442 44.654875 158.21442   C 40.753903 158.21442 37.603118 155.05425 37.603118 151.16266  "
+       id="path140" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 76.378403 123.99652   C 76.378403 120.10492 79.576074 116.94476 83.53331 116.94476   C 87.481169 116.94476 90.688218 120.10492 90.688218 123.99652   C 90.688218 127.88811 87.481169 131.04827 83.53331 131.04827   C 79.576074 131.04827 76.378403 127.88811 76.378403 123.99652 "
+       id="path142" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 76.378403 123.99652   C 76.378403 120.10492 79.576074 116.94476 83.53331 116.94476   C 87.481169 116.94476 90.688218 120.10492 90.688218 123.99652   C 90.688218 127.88811 87.481169 131.04827 83.53331 131.04827   C 79.576074 131.04827 76.378403 127.88811 76.378403 123.99652  "
+       id="path144" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 149.57789 151.16266   C 149.57789 147.27106 152.72867 144.1109 156.62965 144.1109   C 160.52124 144.1109 163.6814 147.27106 163.6814 151.16266   C 163.6814 155.05425 160.52124 158.21442 156.62965 158.21442   C 152.72867 158.21442 149.57789 155.05425 149.57789 151.16266 "
+       id="path146" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 149.57789 151.16266   C 149.57789 147.27106 152.72867 144.1109 156.62965 144.1109   C 160.52124 144.1109 163.6814 147.27106 163.6814 151.16266   C 163.6814 155.05425 160.52124 158.21442 156.62965 158.21442   C 152.72867 158.21442 149.57789 155.05425 149.57789 151.16266  "
+       id="path148" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 76.378403 96.005167   C 76.378403 92.113573 79.576074 88.953411 83.53331 88.953411   C 87.481169 88.953411 90.688218 92.113573 90.688218 96.005167   C 90.688218 99.896762 87.481169 103.05692 83.53331 103.05692   C 79.576074 103.05692 76.378403 99.896762 76.378403 96.005167 "
+       id="path150" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 76.378403 96.005167   C 76.378403 92.113573 79.576074 88.953411 83.53331 88.953411   C 87.481169 88.953411 90.688218 92.113573 90.688218 96.005167   C 90.688218 99.896762 87.481169 103.05692 83.53331 103.05692   C 79.576074 103.05692 76.378403 99.896762 76.378403 96.005167  "
+       id="path152" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 81.723484 143.37009   L 119.11092 130.77633   L 119.60792 132.25795   L 82.229861 144.85171   z  M 113.80335 129.38848   L 120.76133 131.04827   L 116.2227 136.57152   C 115.95076 136.89973 115.45376 136.95599 115.12556 136.67467   C 114.78797 136.40273 114.74108 135.91511 115.01303 135.57753   L 118.75458 131.02014   L 119.17656 132.2767   L 113.43764 130.90761   C 113.02503 130.81384 112.76247 130.39186 112.86562 129.96988   C 112.95939 129.5479 113.38137 129.29471 113.80335 129.38848   z"
+       id="path154" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 133.2707 145.45186   L 90.266238 128.77896   L 89.69422 130.23244   L 132.70806 146.91473   z  M 95.630074 127.63492   L 88.606449 128.97588   L 92.891892 134.69606   C 93.14508 135.04302 93.632701 135.10866 93.979663 134.85547   C 94.326624 134.59291 94.401643 134.10528 94.139077 133.75832   L 90.603822 129.03215   L 90.125578 130.26995   L 95.920771 129.16343   C 96.342751 129.08841 96.624071 128.67581 96.539675 128.25383   C 96.464657 127.83185 96.052054 127.55053 95.630074 127.63492   z"
+       id="path156" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 152.08164 145.53626   L 127.58804 129.14467   L 126.72532 130.43875   L 151.21892 146.83033   z  M 133.07378 129.19156   L 125.92825 128.9665   L 128.86335 135.49313   C 129.04152 135.88698 129.50101 136.05577 129.89486 135.88698   C 130.28871 135.70881 130.46688 135.23994 130.28871 134.84609   L 127.86936 129.47288   L 127.13792 130.57003   L 133.02689 130.75757   C 133.45825 130.76695 133.82396 130.42937 133.83334 129.99801   C 133.84272 129.56665 133.50513 129.21031 133.07378 129.19156   z"
+       id="path158" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 62.762511 143.55764   L 76.856647 129.4635   L 77.963173 130.56065   L 63.869036 144.66416   z  M 71.492811 130.57941   L 78.450794 128.9665   L 76.84727 135.93386   C 76.753496 136.35584 76.331516 136.61841 75.909536 136.52464   C 75.487556 136.42149 75.22499 135.99951 75.328141 135.5869   L 76.650346 129.8386   L 77.588079 130.77633   L 71.839772 132.09853   C 71.417792 132.20168 71.005189 131.93912 70.902038 131.51714   C 70.808265 131.09516 71.070831 130.67318 71.492811 130.57941   z"
+       id="path160" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 44.326668 143.39822   L 76.791006 128.86335   L 77.428664 130.28871   L 44.973704 144.82358   z  M 71.370905 127.99126   L 78.460171 128.97588   L 74.474804 134.90236   C 74.230993 135.26807 73.743371 135.36185 73.387033 135.11804   C 73.030694 134.8836 72.93692 134.39598 73.171354 134.03964   L 76.462799 129.1353   L 77.006684 130.34497   L 71.164604 129.53852   C 70.733246 129.48226 70.433172 129.08841 70.489436 128.65705   C 70.555077 128.23507 70.948925 127.935 71.370905 127.99126   z"
+       id="path162" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 82.642463 117.14168   L 82.83001 104.71671   L 84.396025 104.74484   L 84.208478 117.16981   z  M 79.754244 109.25534   L 83.636461 103.25385   L 87.331131 109.37725   C 87.556187 109.74296 87.434282 110.22121 87.068566 110.44626   C 86.70285 110.67132 86.215228 110.54942 85.99955 110.1837   L 85.99955 110.1837   L 82.942538 105.12932   L 84.264742 105.15745   L 81.067071 110.10868   C 80.832637 110.4744 80.354393 110.57755 79.988677 110.34311   C 79.622961 110.10868 79.51981 109.62106 79.754244 109.25534   z"
+       id="path164" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 88.175092 118.37011   L 114.12218 101.14395   L 114.9849 102.4474   L 89.047184 119.67356   z  M 108.63644 101.17208   L 115.78197 100.97516   L 112.82811 107.48303   C 112.64994 107.87687 112.18107 108.05504 111.7966 107.87687   C 111.40275 107.69871 111.22458 107.22984 111.40275 106.83599   L 113.84086 101.47215   L 114.57229 102.5693   L 108.67395 102.73809   C 108.24259 102.74747 107.88625 102.40989 107.87687 101.97853   C 107.8675 101.54717 108.20508 101.18146 108.63644 101.17208   z"
+       id="path166" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 116.20395 118.37011   L 90.266238 101.14395   L 89.403523 102.4474   L 115.34123 119.67356   z  M 95.751979 101.17208   L 88.606449 100.97516   L 91.56031 107.48303   L 91.56031 107.48303   C 91.738479 107.87687 92.197969 108.05504 92.591817 107.87687   C 92.985665 107.69871 93.163834 107.22984 92.985665 106.83599   L 90.547558 101.47215   L 89.816125 102.5693   L 95.705093 102.73809   C 96.13645 102.74747 96.502166 102.40989 96.511543 101.97853   C 96.520921 101.54717 96.183337 101.18146 95.751979 101.17208   z"
+       id="path168" />
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 390.73484 13.822193   L 433.27044 13.822193   L 433.27044 56.35779   L 426.18117 63.447056   L 390.73484 63.447056  z "
+       id="path170" />
+    <path
+       style="fill:#cdcdcd;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 426.18117 63.447056   L 427.58777 57.783145   L 433.27044 56.35779  z "
+       id="path172" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.2565631px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 426.18117 63.447056   L 427.58777 57.783145   L 433.27044 56.35779   L 426.18117 63.447056   L 390.73484 63.447056   L 390.73484 13.822193   L 433.27044 13.822193   L 433.27044 56.35779  "
+       id="path174" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 396.04241 18.342069   L 422.63654 18.342069  "
+       id="path176" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 396.04241 22.843191   L 427.94411 22.843191  "
+       id="path178" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 396.04241 27.363067   L 417.31021 27.363067  "
+       id="path180" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 396.04241 31.882943   L 427.94411 31.882943  "
+       id="path182" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 396.04241 36.384064   L 427.94411 36.384064  "
+       id="path184" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 396.04241 40.90394   L 409.33948 40.90394  "
+       id="path186" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 396.07992 45.405062   L 422.63654 45.405062  "
+       id="path188" />
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 539.19683 12.88446   L 581.73242 12.88446   L 581.73242 55.420057   L 574.64316 62.509323   L 539.19683 62.509323  z "
+       id="path190" />
+    <path
+       style="fill:#cdcdcd;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 574.64316 62.509323   L 576.06851 56.826657   L 581.73242 55.420057  z "
+       id="path192" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.2565631px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 574.64316 62.509323   L 576.06851 56.826657   L 581.73242 55.420057   L 574.64316 62.509323   L 539.19683 62.509323   L 539.19683 12.88446   L 581.73242 12.88446   L 581.73242 55.420057  "
+       id="path194" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 544.52315 17.385581   L 571.09852 17.385581  "
+       id="path196" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 544.52315 21.905457   L 576.42485 21.905457  "
+       id="path198" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 544.52315 26.406579   L 565.79095 26.406579  "
+       id="path200" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 544.52315 30.926455   L 576.42485 30.926455  "
+       id="path202" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 544.52315 35.427576   L 576.42485 35.427576  "
+       id="path204" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 544.52315 39.947452   L 557.82022 39.947452  "
+       id="path206" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.8754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 544.54191 44.448573   L 571.09852 44.448573  "
+       id="path208" />
+    <text
+       xml:space="preserve"
+       x="364.78497"
+       y="80.72277"
+       style="font-size:13.803439px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text210">Java Program</text>
+    <text
+       xml:space="preserve"
+       x="512.48505"
+       y="81.674089"
+       style="font-size:13.803439px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text212">Scala Program</text>
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 203.20687 48.968449   L 203.20687 56.620356   L 223.62133 56.620356   L 223.62133 48.968449   L 203.20687 48.968449  z "
+       id="path214" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 203.20687 48.968449   L 223.62133 48.968449   L 223.62133 56.620356   L 203.20687 56.620356  z "
+       id="path216" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 244.0358 48.968449   L 244.0358 56.620356   L 264.45026 56.620356   L 264.45026 48.968449   L 244.0358 48.968449  z "
+       id="path218" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 244.0358 48.968449   L 264.45026 48.968449   L 264.45026 56.620356   L 244.0358 56.620356  z "
+       id="path220" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 223.62133 31.967339   L 223.62133 39.619245   L 244.0358 39.619245   L 244.0358 31.967339   L 223.62133 31.967339  z "
+       id="path222" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 223.62133 31.967339   L 244.0358 31.967339   L 244.0358 39.619245   L 223.62133 39.619245  z "
+       id="path224" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 223.62133 15.622642   L 223.62133 23.274548   L 244.0358 23.274548   L 244.0358 15.622642   L 223.62133 15.622642  z "
+       id="path226" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 223.62133 15.622642   L 244.0358 15.622642   L 244.0358 23.274548   L 223.62133 23.274548  z "
+       id="path228" />
+    <path
+       style="fill:#9bbb59;fill-rule:evenodd;fill-opacity:1;stroke:none;"
+       d="  M 203.20687 66.35403   L 203.20687 74.005937   L 223.62133 74.005937   L 223.62133 66.35403   L 203.20687 66.35403  z "
+       id="path230" />
+    <path
+       style="fill:none;stroke:#71893f;stroke-width:1.5660151px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 203.20687 66.35403   L 223.62133 66.35403   L 223.62133 74.005937   L 203.20687 74.005937  z "
+       id="path232" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 212.6311 66.485313   L 212.6311 61.552834   C 212.6311 61.121477 212.97806 60.774515 213.40942 60.774515   L 213.40942 60.774515   L 212.6311 61.552834   L 212.6311 58.092597   L 214.19711 58.092597   L 214.19711 61.552834   C 214.19711 61.984192 213.84077 62.331153 213.40942 62.331153   L 213.40942 62.331153   L 214.19711 61.552834   L 214.19711 66.485313   z  M 209.62097 62.678115   L 213.40942 56.620356   L 217.19786 62.678115   C 217.43229 63.043831 217.31976 63.522075 216.95405 63.756508   C 216.58833 63.981564 216.10071 63.869036 215.87566 63.50332   L 212.753 58.5052   L 214.07521 58.5052   L 210.95255 63.50332   C 210.71812 63.869036 210.23988 63.981564 209.87416 63.756508   C 209.50844 63.522075 209.39592 63.043831 209.62097 62.678115   z"
+       id="path234" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 255.02603 48.968449   L 255.02603 46.436569   C 255.02603 46.005211 254.67907 45.65825 254.24771 45.65825   L 233.83325 45.65825   L 234.61157 46.436569   L 234.61157 41.091487   L 233.04556 41.091487   L 233.04556 46.436569   C 233.04556 46.867926 233.4019 47.224265 233.83325 47.224265   L 254.24771 47.224265   L 253.4694 46.436569   L 253.4694 48.968449   z  M 237.6217 45.677004   L 233.83325 39.619245   L 230.04481 45.677004   C 229.81038 46.04272 229.9229 46.530342 230.28862 46.755398   C 230.65434 46.989831 231.14196 46.877303 231.36701 46.511587   L 234.48967 41.50409   L 233.16746 41.50409   L 236.29012 46.511587   C 236.52455 46.877303 237.00279 46.989831 237.36851 46.755398   C 237.73423 46.530342 237.84675 46.04272 237.6217 45.677004   z"
+       id="path236" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 212.6311 48.968449   L 212.6311 45.90206   C 212.6311 45.470703 212.97806 45.123741 213.40942 45.123741   L 233.83325 45.123741   L 233.04556 45.90206   L 233.04556 41.091487   L 234.61157 41.091487   L 234.61157 45.90206   C 234.61157 46.333418 234.26461 46.680379 233.83325 46.680379   L 213.40942 46.680379   L 214.19711 45.90206   L 214.19711 48.968449   z  M 230.04481 45.677004   L 233.83325 39.619245   L 237.6217 45.677004   C 237.84675 46.04272 237.73423 46.530342 237.36851 46.755398   C 237.00279 46.989831 236.52455 46.877303 236.29012 46.511587   L 233.16746 41.50409   L 234.48967 41.50409   L 231.36701 46.511587   C 231.14196 46.877303 230.65434 46.989831 230.28862 46.755398   C 229.9229 46.530342 229.81038 46.04272 230.04481 45.677004   z"
+       id="path238" />
+    <path
+       style="fill:#77933c;fill-rule:nonzero;fill-opacity:1;stroke:#77933c;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 233.04556 31.967339   L 233.04556 27.625632   C 233.04556 27.194275 233.38314 26.856691 233.80512 26.837936   L 233.80512 26.837936   L 233.04556 27.625632   L 233.04556 24.74679   L 234.61157 24.74679   L 234.61157 27.625632   C 234.61157 28.047612 234.27399 28.385196 233.85201 28.403951   L 233.85201 28.403951   L 234.61157 27.625632   L 234.61157 31.967339   z  M 230.04481 29.332307   L 233.83325 23.265171   L 237.6217 29.332307   C 237.84675 29.698024 237.73423 30.176268 237.36851 30.410701   C 237.00279 30.635757 236.52455 30.523229 236.29012 30.157513   L 233.16746 25.159393   L 234.48967 25.159393   L 231.36701 30.157513   C 231.14196 30.523229 230.65434 30.635757 230.28862 30.410701   C 229.9229 30.176268 229.81038 29.698024 230.04481 29.332307   z"
+       id="path240" />
+    <text
+       xml:space="preserve"
+       x="176.83757"
+       y="91.124374"
+       style="font-size:13.803439px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text242">Operator DAG</text>
+    <text
+       xml:space="preserve"
+       x="172.78656"
+       y="107.62849"
+       style="font-size:13.803439px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
+       id="text244">(type agnostic)</text>
+    <path
+       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 272.82422 92.029177   L 300.2623 92.029177   C 300.95623 92.029177 301.50011 92.573062 301.50011 93.266985   L 301.50011 130.55127   L 299.00574 130.55127   L 299.00574 93.266985   L 300.2623 94.523548   L 272.82422 94.523548   z  M 305.71991 123.68706   L 300.2623 133.04565   L 294.80469 123.68706   C 294.44835 123.08691 294.65466 122.31797 295.25481 121.98039   C 295.85495 121.62405 296.6239 121.83035 296.96148 122.4305   L 301.33132 129.93237   L 299.17453 129.93237   L 303.56313 122.4305   C 303.90071 121.83035 304.66965 121.62405 305.2698 121.98039   C 305.86995 122.31797 306.0575 123.08691 305.71991 123.68706   z"
+       id="path246" />
+    <path
+       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
+       d="  M 171.23016 145.47062   L 213.40942 145.47062   C 214.10334 145.47062 214.66598 146.02388 214.66598 146.7178   L 214.66598 200.34679   L 212.16223 200.34679   L 212.16223 146.7178   L 213.40942 147.96499   L 171.23016 147.96499   z  M 218.86703 193.4732   L 213.40942 202.8224   L 207.96118 193.4732   C 207.60484 192.87305 207.81115 192.11349 208.40192 191.75715   C 209.00207 191.41019 209.77101 191.61649 210.11797 192.20726   L 214.49719 199.70913   L 212.33102 199.70913   L 216.71024 192.20726   C 217.0572 191.61649 217.82614 191.41019 218.41691 191.75715   C 219.01706 192.11349 219.21399 192.87305 218.86703 193.4732   z"
+       id="path248" />
+  </g>
+</svg>


[21/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/css/codetabs.css
----------------------------------------------------------------------
diff --git a/docs/css/codetabs.css b/docs/css/codetabs.css
deleted file mode 100644
index 420d559..0000000
--- a/docs/css/codetabs.css
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
-**/
-
-/**
- * Make dropdown menus in nav bars show on hover instead of click
- * using solution at http://stackoverflow.com/questions/8878033/how-
- * to-make-twitter-bootstrap-menu-dropdown-on-hover-rather-than-click
- **/
-ul.nav li.dropdown:hover ul.dropdown-menu{
-  display: block;
-}
-
-a.menu:after, .dropdown-toggle:after {
-  content: none;
-}
-
-/** Make the submenus open on hover on the parent menu item */
-ul.nav li.dropdown ul.dropdown-menu li.dropdown-submenu:hover ul.dropdown-menu {
-  display: block;
-}
-
-/** Make the submenus be invisible until the parent menu item is hovered upon */
-ul.nav li.dropdown ul.dropdown-menu li.dropdown-submenu ul.dropdown-menu {
-  display: none;
-}
-
-/**
- * Made the navigation bar buttons not grey out when clicked.
- * Essentially making nav bar buttons not react to clicks, only hover events.
- */
-.navbar .nav li.dropdown.open > .dropdown-toggle {
-  background-color: transparent;
-}
-
-/**
- * Made the active tab caption blue. Otherwise the active tab is black, and inactive tab is blue.
- * That looks weird. Changed the colors to active - blue, inactive - black, and
- * no color change on hover.
- */
-.nav-tabs > .active > a, .nav-tabs > .active > a:hover {
-  color: #08c;
-}
-
-.nav-tabs > li > a, .nav-tabs > li > a:hover {
-  color: #333;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/css/custom.css
----------------------------------------------------------------------
diff --git a/docs/css/custom.css b/docs/css/custom.css
deleted file mode 100644
index 7277181..0000000
--- a/docs/css/custom.css
+++ /dev/null
@@ -1,195 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
-**/
-
-.extLink {
-	display: inline !important; 
-	padding-right: 3px !important;
-}
-
-.small-font-awesome {
-	font-size: 10px;
-	padding-right: 10px;
-}
-
-#logo-element {
-    display: inline-block;
-    float: left;
-    width: 40px;
-    margin-top: 5px;
-    margin-right: 5px;
-}
-
-/*** Web Trust CSS ***/
-#af-upfooter {
-	margin-top: 50px;
-}
-
-/* Navigation Bar */
-.navbar {
-    padding-top: 20px;
-    padding-bottom: 20px;
-}
-
-.navbar {
-	border:none !important;
-}
-
-.navbar-default {
-    background: #08131F !important;
-}
-
-.navbar-default .navbar-nav > li > a {
-    color: #fff !important;
-    font-weight: normal;
-}
-
-.navbar-brand img {
-	margin-top: -15px;
-}
-
-@media (min-width: 768px) {
-	.navbar-nav {
-		margin-left: 5%;
-	}
-}
-
-/* Side Bar */
-.af-sidebar ul {
-	list-style-type: none;
-}
-
-.af-sidebar-item.active a {
-	color: #555;
-	text-decoration: underline;
-}
-
-.af-label {
-	background: #08131F;
-	border-radius: 5px;
-	color: #fff;
-	display: block;
-	font-size: 0.95em;
-    margin: 10px 0;
-    padding: 0.4em 0.8em;
-}
-
-.af-sidebar ul ul {
-	background: #fff;
-	list-style-type: disc;
-}
-
-/* Downloads Page */
-.af-download-row {
-    margin-top: 40px;
-    margin-bottom: 40px;	
-}
-
-.af-download-row h3 {
-	font-size: 1.8em;
-	margin: 0 0 15px 0;
-	padding: 0;
-}
-
-.af-download-row h3 span {
-	font-size: 0.7em;
-}
-
-.af-blue-color {
-	color: #3795c6;
-}
-
-.af-download-usage {
-	min-height: 115px;
-}
-
-.af-download-usage p {
-	color: #959595;
-	font-size: 0.9em;
-}
-
-.af-download-button {
-	background: #3795c6;
-	color: #fff !important;
-	font-size: 0.9em;
-	font-weight: bold;
-	display: block;
-	margin: 8px auto;
-	text-align:center;
-	width: 200px;
-}
-
-.af-download-button:hover {
-	background: #006599 !important;
-}
-
-.af-small-download-heading {
-	text-align: center;
-}
-
-.af-small-download-area {
-    margin-top: 40px;
-    margin-bottom: 40px;
-}
-
-/* Community Page */
-
-.af-team-member-inner {
-    padding-top: 20px;	
-}
-
-.af-team-member-img {
-	margin:10px auto;
-	width: 70%;
-}
-
-.af-team-member-img img {
-	border-radius: 100%;
-	margin: auto;
-}
-
-.af-team-member-info {
-	font-size: 0.9em;
-	margin: 15px 0;
-	text-align: center;
-}
-
-.af-mailinglist-item {
-	margin: 40px auto; 
-	text-align: center;
-}
-
-.af-mailinglist-item-inner {
-	background: #ececec;
-	border-radius: 6px;
-	padding: 10px 2% 40px 2%;
-}
-
-.af-mailinglist-item-inner p {
-	font-weight: bold;
-	margin: 20px 0;
-}
-
-.navbar {
-    padding-top: 10px;
-    padding-bottom: 10px;
-}
-
-#flink-doc-sidenav {
-    margin-top: 25px;
-}

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/css/main/main.css
----------------------------------------------------------------------
diff --git a/docs/css/main/main.css b/docs/css/main/main.css
deleted file mode 100644
index e5fd0f5..0000000
--- a/docs/css/main/main.css
+++ /dev/null
@@ -1,411 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
-**/
-
-/*----------------------------------------------------------------------
-    General
-----------------------------------------------------------------------*/
-
-/* Override Bootstrap Style */
-body {
-    font-family: Helvetica, Arial, sans-serif;
-}
-
-html {
-	font-size: 100%;
-}
-
-body {
-	font-size: 100%;
-}
-
-#markdown-toc li {
-	list-style-type: none;
-}
-
-#flink-doc-sidenav li {
-	list-style-type: none;
-}
-
-.af-privacy-policy {
-	display: inline-block; 
-	font-style: normal;
-	font-size: 0.9em;
-	margin: 30px auto 0 auto;
-	font-style: normal;
-}
-
-.af-separator {
-	color: #ccc;
-}
-
-.divider {
-    border-bottom: 1px solid #ccc;
-	height: 4px;
-	margin: 8px 0 12px 0 !important;
-	overflow: hidden;
-	padding: 0;
-}
-
-/* Headings */
-.af-heading3 {
-	font-weight: bold;
-	margin-bottom: 20px;
-}
-
-/* Buttons */
-.af-btn {
-	color: #fff;
-	display: block;
-	padding: 0.4em 0.9em;
-	text-align: center;
-	text-decoration: none !important;
-}
-
-.af-btn:hover {
-	color: #fff;
-}
-
-.af-btn-large {
-	font-size: 1.4em;
-}
-
-.af-btn-orange {
-	background: #FA5F00;
-	border: 1px solid #7c5a2f;
-}
-
-.af-btn-blue {
-	background: #3795c6;
-	border: 1px solid #2c6e92;
-}
-
-/* Sections */
-.af-section {
-	font-size: 1.2em; 
-	padding-top : 35px;
-	padding-bottom: 35px;
-	padding-top: 35px;
-}
-
-.af-colored {
-	background: #2c3e50;
-	color: #fff;
-}
-
-/* General */
-
-.af-inner-pages-navigation {
-	padding-bottom:20px;
-}
-
-/*----------------------------------------------------------------------
-    Layout
-----------------------------------------------------------------------*/
-
-/* Header */
-.af-header-container {
-	background: #08131F;
-	/* #2c3e50 / #08131F my proposal*/
-	padding-top: 20px;
-}
-
-/* Navigation */
-.af-main-nav ul {
-	float: right;
-	margin-top: 20px;
-}
-
-.af-main-nav li {
-	float: left;
-	margin-right: 55px;
-	position: relative;
-}
-
-.af-main-nav li a {
-	color: #fff;
-	font-size: 1.15em;
-}
-
-.af-main-nav ul.af-dropdown-menu {
-	display:none;
-} 
-
-.caret {
-    display: inline-block;
-	width: 0;
-	height: 0;
-	margin-left: 2px;
-	vertical-align: middle;
-	border-top: 4px solid;
-	border-right: 4px solid rgba(0, 0, 0, 0);
-	border-left: 4px solid rgba(0, 0, 0, 0);
-}
-
-/* Front Top Area */
-.af-front-top {
-	text-align: center;
-	margin: 30px auto;
-}
-
-.af-front-top-logo {
-	margin: 30px auto 50px auto;
-	width: 30%;
-}
-
-.af-front-top-headline1 {
-	color: #fff;
-	font-size: 3.6em;
-}
-
-.af-front-top-headline2 {
-	color: #fff;
-	font-size: 1.8em;
-	font-weight: normal;
-	margin-top: 30px;
-}
-
-/* Front Top Buttons */
-.af-front-top-buttons {
-	background: #1b2e3d;
-	padding-top: 18px;
-	padding-bottom: 18px;
-}
-
-/* Front Page Icons */
-#af-assets {
-	padding-top: 65px;
-	padding-bottom: 65px;
-}
-
-.af-asset {
-	text-align: center;
-}
-
-.af-asset-img {
-	background: #08131F;
-	border-radius: 100%;
-	height: 100px;
-	margin: 0px auto 15px auto;
-	width: 100px;
-}
-
-.af-asset-img:hover {
-	background: #3795c6;
-}
-
-.af-asset-img img {
-	padding: 30px;
-}
-
-.af-asset-heading {
-	color: #2c3e50;
-	font-weight: bold;
-}
-
-.af-section-row {
-	margin-top: 25px;
-}
-
-/* Up Footer */
-#af-upfooter {
-	background: #e6e6e6;
-	font-style: italic;
-}
-
-#af-upfooter img {
-	margin: 20px auto 0 auto;
-}
-
-/* Footer */
-#af-footer {
-	background: #101416;
-	color: #fff;
-	padding: 20px 0 0 0;
-}
-
-#af-footer h3 {
-	font-size: 1.2em;
-	color: #fff !important;
-}
-
-.af-footer-menu {
-	margin: 35px 0 35px 0;
-	padding: 0;
-}
-
-.af-footer-menu li {
-	padding: 0 0 15px 0;
-}
-
-.af-footer-menu li a {
-	color: #fff;
-}
-
-.af-footer-bar {
-	background: #0d100e;
-	color: #fff;
-	font-size: 0.9em;
-	padding: 17px 0;
-}
-
-.af-footer-bar a {
-	color: #F7931E;
-}
-
-.af-footer-img {
-	display: inline-block;
-	margin-right: 2%;
-	width: 30px;
-}
-
-.af-footer-menu span {
-	font-size: 0.8em;
-}
-
-/*----------------------------------------------------------------------
-    Side navigation
-----------------------------------------------------------------------*/
-
-.sidenav-category {
-    font-weight: bold;
-    font-size: larger;
-    padding-top: 10px;
-}
-
-.sidenav-item {
-    padding-top: 5px;
-}
-
-.sidenav-item-bottom {
-    padding-top: 5px;
-}
-
-/*----------------------------------------------------------------------
-    Responsive CSS 768px / 992px / 1200px
-----------------------------------------------------------------------*/
-
-@media all and (min-width: 768px) {
-    
-    /* Navigation */
-    .af-main-nav > ul {
-       display:block !important;
-    }
-    
-   .af-main-nav ul.af-dropdown-menu {
-        background: #1B2E3D;
-        border-bottom-left-radius: 5px;
-        border-bottom-right-radius: 5px;
-        display: none;
-        margin: 5px 0 0 0;
-        padding: 10px 0;
-        position: absolute;
-        z-index: 10;
-    }
-    
-    .af-dropdown-menu li {
-        display: block;
-        float: none;
-        margin: 0;
-        padding: 3px 20px;
-    }
-    
-    .af-dropdown-menu li a {
-        font-size: 1em;
-        white-space: nowrap;
-    }
-}
-
-/* Medium Devices */
-@media all and (max-width: 1190px) {
-
-	/* Navigation */
-	.af-main-nav li {
-		margin-right: 25px;
-	}
-	
-	.af-main-nav li a {
-		color: #fff;
-		font-size: 1em;
-	}
-}
-
-/* Small Devices */
-@media all and (max-width: 991px) {
-    
-    /* Navigation */
-    .af-main-nav ul {
-        float: none;
-    }
-    
-	/* Sections */
-	.af-section-img {
-		margin: 35px auto;
-	}
-
-}
-
-/* XSmall Devices */
-@media all and (max-width: 767px) {
-	
-	.af-header-container {
-	   padding-top: 0;
-	}
-	
-	.af-mobile-nav-bar {
-	   color: #fff;
-	   padding-top: 20px;
-	   padding-bottom: 20px;
-	}
-	
-	.af-mobile-nav-bar .glyphicon {
-	   font-size: 1.5em;
-	} 
-	
-	.af-mobile-btn {
-	   background: #FA5F00;
-	   margin-right: -15px;
-	   padding: 10px;
-	}
-	
-	/* Navigation */
-	.af-main-nav ul {
-	   margin: 0;
-	   padding: 0;
-	   display:none;
-	}
-	
-	.af-main-nav ul li {
-		float: none;
-		border-bottom:1px solid #fff;
-		padding: 0;
-		margin: 0;
-	}
-	
-	.af-main-nav ul li a {
-	   background: #1B2E3D;
-	   display: block;
-	   font-size: 0.9em;
-	   font-weight:bold;
-	   padding: 15px 10px;
-	}
-	
-	.af-main-nav ul li.active a {
-       background: #FA5F00;
-    }
-}

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/css/syntax.css
----------------------------------------------------------------------
diff --git a/docs/css/syntax.css b/docs/css/syntax.css
deleted file mode 100644
index ba3c0ba..0000000
--- a/docs/css/syntax.css
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
-**/
-
-.highlight  { background: #ffffff; }
-.highlight .c { color: #999988; font-style: italic } /* Comment */
-.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
-.highlight .k { font-weight: bold } /* Keyword */
-.highlight .o { font-weight: bold } /* Operator */
-.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
-.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
-.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
-.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
-.highlight .ge { font-style: italic } /* Generic.Emph */
-.highlight .gr { color: #aa0000 } /* Generic.Error */
-.highlight .gh { color: #999999 } /* Generic.Heading */
-.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
-.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
-.highlight .go { color: #888888 } /* Generic.Output */
-.highlight .gp { color: #555555 } /* Generic.Prompt */
-.highlight .gs { font-weight: bold } /* Generic.Strong */
-.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
-.highlight .gt { color: #aa0000 } /* Generic.Traceback */
-.highlight .kc { font-weight: bold } /* Keyword.Constant */
-.highlight .kd { font-weight: bold } /* Keyword.Declaration */
-.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
-.highlight .kr { font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
-.highlight .m { color: #009999 } /* Literal.Number */
-.highlight .s { color: #d14 } /* Literal.String */
-.highlight .na { color: #008080 } /* Name.Attribute */
-.highlight .nb { color: #0086B3 } /* Name.Builtin */
-.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
-.highlight .no { color: #008080 } /* Name.Constant */
-.highlight .ni { color: #800080 } /* Name.Entity */
-.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
-.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
-.highlight .nn { color: #555555 } /* Name.Namespace */
-.highlight .nt { color: #000080 } /* Name.Tag */
-.highlight .nv { color: #008080 } /* Name.Variable */
-.highlight .ow { font-weight: bold } /* Operator.Word */
-.highlight .w { color: #bbbbbb } /* Text.Whitespace */
-.highlight .mf { color: #009999 } /* Literal.Number.Float */
-.highlight .mh { color: #009999 } /* Literal.Number.Hex */
-.highlight .mi { color: #009999 } /* Literal.Number.Integer */
-.highlight .mo { color: #009999 } /* Literal.Number.Oct */
-.highlight .sb { color: #d14 } /* Literal.String.Backtick */
-.highlight .sc { color: #d14 } /* Literal.String.Char */
-.highlight .sd { color: #d14 } /* Literal.String.Doc */
-.highlight .s2 { color: #d14 } /* Literal.String.Double */
-.highlight .se { color: #d14 } /* Literal.String.Escape */
-.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
-.highlight .si { color: #d14 } /* Literal.String.Interpol */
-.highlight .sx { color: #d14 } /* Literal.String.Other */
-.highlight .sr { color: #009926 } /* Literal.String.Regex */
-.highlight .s1 { color: #d14 } /* Literal.String.Single */
-.highlight .ss { color: #990073 } /* Literal.String.Symbol */
-.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
-.highlight .vc { color: #008080 } /* Name.Variable.Class */
-.highlight .vg { color: #008080 } /* Name.Variable.Global */
-.highlight .vi { color: #008080 } /* Name.Variable.Instance */
-.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/dataset_transformations.md
----------------------------------------------------------------------
diff --git a/docs/dataset_transformations.md b/docs/dataset_transformations.md
deleted file mode 100644
index ce48ca1..0000000
--- a/docs/dataset_transformations.md
+++ /dev/null
@@ -1,1690 +0,0 @@
----
-title: "DataSet Transformations"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-This document gives a deep-dive into the available transformations on DataSets. For a general introduction to the
-Flink Java API, please refer to the [Programming Guide](programming_guide.html)
-
-
-### Map
-
-The Map transformation applies a user-defined map function on each element of a DataSet.
-It implements a one-to-one mapping, that is, exactly one element must be returned by
-the function.
-
-The following code transforms a DataSet of Integer pairs into a DataSet of Integers:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-// MapFunction that adds two integer values
-public class IntAdder implements MapFunction<Tuple2<Integer, Integer>, Integer> {
-  @Override
-  public Integer map(Tuple2<Integer, Integer> in) {
-    return in.f0 + in.f1;
-  }
-}
-
-// [...]
-DataSet<Tuple2<Integer, Integer>> intPairs = // [...]
-DataSet<Integer> intSums = intPairs.map(new IntAdder());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val intPairs: DataSet[(Int, Int)] = // [...]
-val intSums = intPairs.map { pair => pair._1 + pair._2 }
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- intSums = intPairs.map(lambda x: sum(x), INT)
-~~~
-
-</div>
-</div>
-
-### FlatMap
-
-The FlatMap transformation applies a user-defined flat-map function on each element of a DataSet.
-This variant of a map function can return arbitrary many result elements (including none) for each input element.
-
-The following code transforms a DataSet of text lines into a DataSet of words:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-// FlatMapFunction that tokenizes a String by whitespace characters and emits all String tokens.
-public class Tokenizer implements FlatMapFunction<String, String> {
-  @Override
-  public void flatMap(String value, Collector<String> out) {
-    for (String token : value.split("\\W")) {
-      out.collect(token);
-    }
-  }
-}
-
-// [...]
-DataSet<String> textLines = // [...]
-DataSet<String> words = textLines.flatMap(new Tokenizer());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val textLines: DataSet[String] = // [...]
-val words = textLines.flatMap { _.split(" ") }
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- words = lines.flat_map(lambda x,c: [line.split() for line in x], STRING)
-~~~
-
-</div>
-</div>
-
-### MapPartition
-
-MapPartition transforms a parallel partition in a single function call. The map-partition function
-gets the partition as Iterable and can produce an arbitrary number of result values. The number of elements in each partition depends on the degree-of-parallelism
-and previous operations.
-
-The following code transforms a DataSet of text lines into a DataSet of counts per partition:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-public class PartitionCounter implements MapPartitionFunction<String, Long> {
-
-  public void mapPartition(Iterable<String> values, Collector<Long> out) {
-    long c = 0;
-    for (String s : values) {
-      c++;
-    }
-    out.collect(c);
-  }
-}
-
-// [...]
-DataSet<String> textLines = // [...]
-DataSet<Long> counts = textLines.mapPartition(new PartitionCounter());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val textLines: DataSet[String] = // [...]
-// Some is required because the return value must be a Collection.
-// There is an implicit conversion from Option to a Collection.
-val counts = texLines.mapPartition { in => Some(in.size) }
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- counts = lines.map_partition(lambda x,c: [sum(1 for _ in x)], INT)
-~~~
-
-</div>
-</div>
-
-### Filter
-
-The Filter transformation applies a user-defined filter function on each element of a DataSet and retains only those elements for which the function returns `true`.
-
-The following code removes all Integers smaller than zero from a DataSet:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-// FilterFunction that filters out all Integers smaller than zero.
-public class NaturalNumberFilter implements FilterFunction<Integer> {
-  @Override
-  public boolean filter(Integer number) {
-    return number >= 0;
-  }
-}
-
-// [...]
-DataSet<Integer> intNumbers = // [...]
-DataSet<Integer> naturalNumbers = intNumbers.filter(new NaturalNumberFilter());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val intNumbers: DataSet[Int] = // [...]
-val naturalNumbers = intNumbers.filter { _ > 0 }
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- naturalNumbers = intNumbers.filter(lambda x: x > 0)
-~~~
-
-</div>
-</div>
-
-**IMPORTANT:** The system assumes that the function does not modify the elements on which the predicate is applied. Violating this assumption
-can lead to incorrect results.
-
-### Project (Tuple DataSets only) (Java/Python API Only)
-
-The Project transformation removes or moves Tuple fields of a Tuple DataSet.
-The `project(int...)` method selects Tuple fields that should be retained by their index and defines their order in the output Tuple.
-
-Projections do not require the definition of a user function.
-
-The following code shows different ways to apply a Project transformation on a DataSet:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<Tuple3<Integer, Double, String>> in = // [...]
-// converts Tuple3<Integer, Double, String> into Tuple2<String, Integer>
-DataSet<Tuple2<String, Integer>> out = in.project(2,0);
-~~~
-
-#### Projection with Type Hint
-
-Note that the Java compiler cannot infer the return type of `project` operator. This can cause a problem if you call another operator on a result of `project` operator such as:
-
-~~~java
-DataSet<Tuple5<String,String,String,String,String>> ds = ....
-DataSet<Tuple1<String>> ds2 = ds.project(0).distinct(0);
-~~~
-
-This problem can be overcome by hinting the return type of `project` operator like this:
-
-~~~java
-DataSet<Tuple1<String>> ds2 = ds.<Tuple1<String>>project(0).distinct(0);
-~~~
-
-### Transformations on Grouped DataSet
-
-The reduce operations can operate on grouped data sets. Specifying the key to
-be used for grouping can be done in many ways:
-
-- key expressions
-- a key-selector function
-- one or more field position keys (Tuple DataSet only)
-- Case Class fields (Case Classes only)
-
-Please look at the reduce examples to see how the grouping keys are specified.
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
-out = in.project(2,0);
-~~~
-
-### Transformations on Grouped DataSet
-
-The reduce operations can operate on grouped data sets. Specifying the key to
-be used for grouping can be done using one or more field position keys (Tuple DataSet only).
-
-Please look at the reduce examples to see how the grouping keys are specified.
-
-</div>
-</div>
-
-### Reduce on Grouped DataSet
-
-A Reduce transformation that is applied on a grouped DataSet reduces each group to a single
-element using a user-defined reduce function.
-For each group of input elements, a reduce function successively combines pairs of elements into one
-element until only a single element for each group remains.
-
-#### Reduce on DataSet Grouped by KeySelector Function
-
-A key-selector function extracts a key value from each element of a DataSet. The extracted key
-value is used to group the DataSet.
-The following code shows how to group a POJO DataSet using a key-selector function and to reduce it
-with a reduce function.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-// some ordinary POJO
-public class WC {
-  public String word;
-  public int count;
-  // [...]
-}
-
-// ReduceFunction that sums Integer attributes of a POJO
-public class WordCounter implements ReduceFunction<WC> {
-  @Override
-  public WC reduce(WC in1, WC in2) {
-    return new WC(in1.word, in1.count + in2.count);
-  }
-}
-
-// [...]
-DataSet<WC> words = // [...]
-DataSet<WC> wordCounts = words
-                         // DataSet grouping on field "word"
-                         .groupBy("word")
-                         // apply ReduceFunction on grouped DataSet
-                         .reduce(new WordCounter());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-// some ordinary POJO
-class WC(val word: String, val count: Int) {
-  def this() {
-    this(null, -1)
-  }
-  // [...]
-}
-
-val words: DataSet[WC] = // [...]
-val wordCounts = words.groupBy { _.word } reduce {
-  (w1, w2) => new WC(w1.word, w1.count + w2.count)
-}
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
-Not supported.
-~~~
-</div>
-</div>
-
-#### Reduce on DataSet Grouped by Field Position Keys (Tuple DataSets only)
-
-Field position keys specify one or more fields of a Tuple DataSet that are used as grouping keys.
-The following code shows how to use field position keys and apply a reduce function
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<Tuple3<String, Integer, Double>> tuples = // [...]
-DataSet<Tuple3<String, Integer, Double>> reducedTuples =
-                                         tuples
-                                         // group DataSet on first and second field of Tuple
-                                         .groupBy(0,1)
-                                         // apply ReduceFunction on grouped DataSet
-                                         .reduce(new MyTupleReducer());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val tuples = DataSet[(String, Int, Double)] = // [...]
-// group on the first and second Tuple field
-val reducedTuples = tuples.groupBy(0, 1).reduce { ... }
-~~~
-
-
-#### Reduce on DataSet grouped by Case Class Fields
-
-When using Case Classes you can also specify the grouping key using the names of the fields:
-
-~~~scala
-case class MyClass(val a: String, b: Int, c: Double)
-val tuples = DataSet[MyClass] = // [...]
-// group on the first and second field
-val reducedTuples = tuples.groupBy("a", "b").reduce { ... }
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- reducedTuples = tuples.group_by(0, 1).reduce( ... )
-~~~
-
-</div>
-</div>
-
-### GroupReduce on Grouped DataSet
-
-A GroupReduce transformation that is applied on a grouped DataSet calls a user-defined
-group-reduce function for each group. The difference
-between this and *Reduce* is that the user defined function gets the whole group at once.
-The function is invoked with an Iterable over all elements of a group and can return an arbitrary
-number of result elements.
-
-#### GroupReduce on DataSet Grouped by Field Position Keys (Tuple DataSets only)
-
-The following code shows how duplicate strings can be removed from a DataSet grouped by Integer.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-public class DistinctReduce
-         implements GroupReduceFunction<Tuple2<Integer, String>, Tuple2<Integer, String>> {
-
-  @Override
-  public void reduce(Iterable<Tuple2<Integer, String>> in, Collector<Tuple2<Integer, String>> out) {
-
-    Set<String> uniqStrings = new HashSet<String>();
-    Integer key = null;
-
-    // add all strings of the group to the set
-    for (Tuple2<Integer, String> t : in) {
-      key = t.f0;
-      uniqStrings.add(t.f1);
-    }
-
-    // emit all unique strings.
-    for (String s : uniqStrings) {
-      out.collect(new Tuple2<Integer, String>(key, s));
-    }
-  }
-}
-
-// [...]
-DataSet<Tuple2<Integer, String>> input = // [...]
-DataSet<Tuple2<Integer, String>> output = input
-                           .groupBy(0)            // group DataSet by the first tuple field
-                           .reduceGroup(new DistinctReduce());  // apply GroupReduceFunction
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val input: DataSet[(Int, String)] = // [...]
-val output = input.groupBy(0).reduceGroup {
-      (in, out: Collector[(Int, String)]) =>
-        in.toSet foreach (out.collect)
-    }
-~~~
-
-#### GroupReduce on DataSet Grouped by Case Class Fields
-
-Works analogous to grouping by Case Class fields in *Reduce* transformations.
-
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- class DistinctReduce(GroupReduceFunction):
-   def reduce(self, iterator, collector):
-     dic = dict()
-     for value in iterator:
-       dic[value[1]] = 1
-     for key in dic.keys():
-       collector.collect(key)
-
- output = data.group_by(0).reduce_group(DistinctReduce(), STRING)
-~~~
-
-
-</div>
-</div>
-
-#### GroupReduce on DataSet Grouped by KeySelector Function
-
-Works analogous to key-selector functions in *Reduce* transformations.
-
-#### GroupReduce on sorted groups
-
-A group-reduce function accesses the elements of a group using an Iterable. Optionally, the Iterable can hand out the elements of a group in a specified order. In many cases this can help to reduce the complexity of a user-defined
-group-reduce function and improve its efficiency.
-
-The following code shows another example how to remove duplicate Strings in a DataSet grouped by an Integer and sorted by String.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-// GroupReduceFunction that removes consecutive identical elements
-public class DistinctReduce
-         implements GroupReduceFunction<Tuple2<Integer, String>, Tuple2<Integer, String>> {
-
-  @Override
-  public void reduce(Iterable<Tuple2<Integer, String>> in, Collector<Tuple2<Integer, String>> out) {
-    Integer key = null;
-    String comp = null;
-
-    for (Tuple2<Integer, String> t : in) {
-      key = t.f0;
-      String next = t.f1;
-
-      // check if strings are different
-      if (com == null || !next.equals(comp)) {
-        out.collect(new Tuple2<Integer, String>(key, next));
-        comp = next;
-      }
-    }
-  }
-}
-
-// [...]
-DataSet<Tuple2<Integer, String>> input = // [...]
-DataSet<Double> output = input
-                         .groupBy(0)                         // group DataSet by first field
-                         .sortGroup(1, Order.ASCENDING)      // sort groups on second tuple field
-                         .reduceGroup(new DistinctReduce());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val input: DataSet[(Int, String)] = // [...]
-val output = input.groupBy(0).sortGroup(1, Order.ASCENDING).reduceGroup {
-      (in, out: Collector[(Int, String)]) =>
-        var prev: (Int, String) = null
-        for (t <- in) {
-          if (prev == null || prev != t)
-            out.collect(t)
-        }
-    }
-
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- class DistinctReduce(GroupReduceFunction):
-   def reduce(self, iterator, collector):
-     dic = dict()
-     for value in iterator:
-       dic[value[1]] = 1
-     for key in dic.keys():
-       collector.collect(key)
-
- output = data.group_by(0).sort_group(1, Order.ASCENDING).reduce_group(DistinctReduce(), STRING)
-~~~
-
-
-</div>
-</div>
-
-**Note:** A GroupSort often comes for free if the grouping is established using a sort-based execution strategy of an operator before the reduce operation.
-
-#### Combinable GroupReduceFunctions
-
-In contrast to a reduce function, a group-reduce function is not
-necessarily combinable. In order to make a group-reduce function
-combinable, you need to use the `RichGroupReduceFunction` variant,
-implement (override) the `combine()` method, and annotate the
-`RichGroupReduceFunction` with the `@Combinable` annotation as shown here:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-// Combinable GroupReduceFunction that computes two sums.
-// Note that we use the RichGroupReduceFunction because it defines the combine method
-@Combinable
-public class MyCombinableGroupReducer
-         extends RichGroupReduceFunction<Tuple3<String, Integer, Double>,
-                                     Tuple3<String, Integer, Double>> {
-  @Override
-  public void reduce(Iterable<Tuple3<String, Integer, Double>> in,
-                     Collector<Tuple3<String, Integer, Double>> out) {
-
-    String key = null;
-    int intSum = 0;
-    double doubleSum = 0.0;
-
-    for (Tuple3<String, Integer, Double> curr : in) {
-      key = curr.f0;
-      intSum += curr.f1;
-      doubleSum += curr.f2;
-    }
-    // emit a tuple with both sums
-    out.collect(new Tuple3<String, Integer, Double>(key, intSum, doubleSum));
-  }
-
-  @Override
-  public void combine(Iterable<Tuple3<String, Integer, Double>> in,
-                      Collector<Tuple3<String, Integer, Double>> out) {
-    // in some cases combine() calls can simply be forwarded to reduce().
-    this.reduce(in, out);
-  }
-}
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-
-// Combinable GroupReduceFunction that computes two sums.
-// Note that we use the RichGroupReduceFunction because it defines the combine method
-@Combinable
-class MyCombinableGroupReducer
-  extends RichGroupReduceFunction[(String, Int, Double), (String, Int, Double)] {}
-
-  def reduce(
-      in: java.lang.Iterable[(String, Int, Double)],
-      out: Collector[(String, Int, Double)]): Unit = {
-
-    val key: String = null
-    val intSum = 0
-    val doubleSum = 0.0
-
-    for (curr <- in) {
-      key = curr._1
-      intSum += curr._2
-      doubleSum += curr._3
-    }
-    // emit a tuple with both sums
-    out.collect(key, intSum, doubleSum);
-  }
-
-  def combine(
-      in: java.lang.Iterable[(String, Int, Double)],
-      out: Collector[(String, Int, Double)]): Unit = {
-    // in some cases combine() calls can simply be forwarded to reduce().
-    this.reduce(in, out)
-  }
-}
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- class GroupReduce(GroupReduceFunction):
-   def reduce(self, iterator, collector):
-     key, int_sum, float_sum = iterator.next()
-     for value in iterator:
-       int_sum += value[1]
-       float_sum += value[2]
-     collector.collect((key, int_sum, float_sum))
-   # in some cases combine() calls can simply be forwarded to reduce().
-   def combine(self, iterator, collector):
-     return self.reduce(iterator, collector)
-
-data.reduce_group(GroupReduce(), (STRING, INT, FLOAT), combinable=True)
-~~~
-
-</div>
-</div>
-
-### GroupCombine on a Grouped DataSet
-
-The GroupCombine transformation is the generalized form of the combine step in
-the Combinable GroupReduceFunction. It is generalized in the sense that it
-allows combining of input type `I` to an arbitrary output type `O`. In contrast,
-the combine step in the GroupReduce only allows combining from input type `I` to
-output type `I`. This is because the reduce step in the GroupReduceFunction
-expects input type `I`.
-
-In some applications, it is desirable to combine a DataSet into an intermediate
-format before performing additional transformations (e.g. to reduce data
-size). This can be achieved with a ComineGroup transformation with very little
-costs.
-
-**Note:** The GroupCombine on a Grouped DataSet is performed in memory with a
-  greedy strategy which may not process all data at once but in multiple
-  steps. It is also performed on the individual partitions without a data
-  exchange like in a GroupReduce transformation. This may lead to partial
-  results.
-
-The following example demonstrates the use of a CombineGroup transformation for
-an alternative WordCount implementation. In the implementation,
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<String> input = [..] // The words received as input
-DataSet<String> groupedInput = input.groupBy(0); // group identical words
-
-DataSet<Tuple2<String, Integer>> combinedWords = groupedInput.combineGroup(new GroupCombineFunction<String, Tuple2<String, Integer>() {
-
-    public void combine(Iterable<String> words, Collector<Tuple2<String, Integer>>) { // combine
-        int count = 0;
-        for (String word : words) {
-            count++;
-        }
-        out.collect(new Tuple2(word, count));
-    }
-});
-
-DataSet<Tuple2<String, Integer>> groupedCombinedWords = combinedWords.groupBy(0); // group by words again
-
-DataSet<Tuple2<String, Integer>> output = combinedWords.reduceGroup(new GroupReduceFunction() { // group reduce with full data exchange
-
-    public void reduce(Iterable<Tuple2<String, Integer>>, Collector<Tuple2<String, Integer>>) {
-        int count = 0;
-        for (Tuple2<String, Integer> word : words) {
-            count++;
-        }
-        out.collect(new Tuple2(word, count));
-    }
-});
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val input: DataSet[String] = [..] // The words received as input
-val groupedInput: DataSet[String] = input.groupBy(0)
-
-val combinedWords: DataSet[(String, Int)] = groupedInput.combineGroup {
-    (words, out: Collector[(String, Int)]) =>
-        var count = 0
-        for (word <- words) {
-            count++
-        }
-        out.collect(word, count)
-}
-
-val groupedCombinedWords: DataSet[(String, Int)] = combinedWords.groupBy(0)
-
-val output: DataSet[(String, Int)] = groupedInput.reduceGroup {
-    (words, out: Collector[(String, Int)]) =>
-        var count = 0
-        for ((word, Int) <- words) {
-            count++
-        }
-        out.collect(word, count)
-}
-
-~~~
-
-</div>
-</div>
-
-The above alternative WordCount implementation demonstrates how the GroupCombine
-combines words before performing the GroupReduce transformation. The above
-example is just a proof of concept. Note, how the combine step changes the type
-of the DataSet which would normally required an additional Map transformation
-before executing the GroupReduce.
-
-### Aggregate on Grouped Tuple DataSet
-
-There are some common aggregation operations that are frequently used. The Aggregate transformation provides the following build-in aggregation functions:
-
-- Sum,
-- Min, and
-- Max.
-
-The Aggregate transformation can only be applied on a Tuple DataSet and supports only field positions keys for grouping.
-
-The following code shows how to apply an Aggregation transformation on a DataSet grouped by field position keys:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<Tuple3<Integer, String, Double>> input = // [...]
-DataSet<Tuple3<Integer, String, Double>> output = input
-                                   .groupBy(1)        // group DataSet on second field
-                                   .aggregate(SUM, 0) // compute sum of the first field
-                                   .and(MIN, 2);      // compute minimum of the third field
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val input: DataSet[(Int, String, Double)] = // [...]
-val output = input.groupBy(1).aggregate(SUM, 0).and(MIN, 2)
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
-Not supported.
-~~~
-
-</div>
-</div>
-
-To apply multiple aggregations on a DataSet it is necessary to use the `.and()` function after the first aggregate, that means `.aggregate(SUM, 0).and(MIN, 2)` produces the sum of field 0 and the minimum of field 2 of the original DataSet.
-In contrast to that `.aggregate(SUM, 0).aggregate(MIN, 2)` will apply an aggregation on an aggregation. In the given example it would produce the minimum of field 2 after calculating the sum of field 0 grouped by field 1.
-
-**Note:** The set of aggregation functions will be extended in the future.
-
-### Reduce on full DataSet
-
-The Reduce transformation applies a user-defined reduce function to all elements of a DataSet.
-The reduce function subsequently combines pairs of elements into one element until only a single element remains.
-
-The following code shows how to sum all elements of an Integer DataSet:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-// ReduceFunction that sums Integers
-public class IntSummer implements ReduceFunction<Integer> {
-  @Override
-  public Integer reduce(Integer num1, Integer num2) {
-    return num1 + num2;
-  }
-}
-
-// [...]
-DataSet<Integer> intNumbers = // [...]
-DataSet<Integer> sum = intNumbers.reduce(new IntSummer());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val intNumbers = env.fromElements(1,2,3)
-val sum = intNumbers.reduce (_ + _)
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- intNumbers = env.from_elements(1,2,3)
- sum = intNumbers.reduce(lambda x,y: x + y)
-~~~
-
-</div>
-</div>
-
-Reducing a full DataSet using the Reduce transformation implies that the final Reduce operation cannot be done in parallel. However, a reduce function is automatically combinable such that a Reduce transformation does not limit scalability for most use cases.
-
-### GroupReduce on full DataSet
-
-The GroupReduce transformation applies a user-defined group-reduce function on all elements of a DataSet.
-A group-reduce can iterate over all elements of DataSet and return an arbitrary number of result elements.
-
-The following example shows how to apply a GroupReduce transformation on a full DataSet:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<Integer> input = // [...]
-// apply a (preferably combinable) GroupReduceFunction to a DataSet
-DataSet<Double> output = input.reduceGroup(new MyGroupReducer());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val input: DataSet[Int] = // [...]
-val output = input.reduceGroup(new MyGroupReducer())
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- output = data.reduce_group(MyGroupReducer(), ... )
-~~~
-
-</div>
-</div>
-
-**Note:** A GroupReduce transformation on a full DataSet cannot be done in parallel if the
-group-reduce function is not combinable. Therefore, this can be a very compute intensive operation.
-See the paragraph on "Combineable Group-Reduce Functions" above to learn how to implement a
-combinable group-reduce function.
-
-### GroupCombine on a full DataSet
-
-The GroupCombine on a full DataSet works similar to the GroupCombine on a
-grouped DataSet. The data is partitioned on all nodes and then combined in a
-greedy fashion (i.e. only data fitting into memory is combined at once).
-
-### Aggregate on full Tuple DataSet
-
-There are some common aggregation operations that are frequently used. The Aggregate transformation
-provides the following build-in aggregation functions:
-
-- Sum,
-- Min, and
-- Max.
-
-The Aggregate transformation can only be applied on a Tuple DataSet.
-
-The following code shows how to apply an Aggregation transformation on a full DataSet:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<Tuple2<Integer, Double>> input = // [...]
-DataSet<Tuple2<Integer, Double>> output = input
-                                     .aggregate(SUM, 0)    // compute sum of the first field
-                                     .and(MIN, 1);    // compute minimum of the second field
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val input: DataSet[(Int, String, Double)] = // [...]
-val output = input.aggregate(SUM, 0).and(MIN, 2)
-
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
-Not supported.
-~~~
-
-</div>
-</div>
-
-**Note:** Extending the set of supported aggregation functions is on our roadmap.
-
-### Join
-
-The Join transformation joins two DataSets into one DataSet. The elements of both DataSets are joined on one or more keys which can be specified using
-
-- a kex expression
-- a key-selector function
-- one or more field position keys (Tuple DataSet only).
-- Case Class Fields
-
-There are a few different ways to perform a Join transformation which are shown in the following.
-
-#### Default Join (Join into Tuple2)
-
-The default Join transformation produces a new Tuple DataSet with two fields. Each tuple holds a joined element of the first input DataSet in the first tuple field and a matching element of the second input DataSet in the second field.
-
-The following code shows a default Join transformation using field position keys:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-public static class User { public String name; public int zip; }
-public static class Store { public Manager mgr; public int zip; }
-DataSet<User> input1 = // [...]
-DataSet<Store> input2 = // [...]
-// result dataset is typed as Tuple2
-DataSet<Tuple2<User, Store>>
-            result = input1.join(input2)
-                           .where("zip")       // key of the first input (users)
-                           .equalTo("zip");    // key of the second input (stores)
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val input1: DataSet[(Int, String)] = // [...]
-val input2: DataSet[(Double, Int)] = // [...]
-val result = input1.join(input2).where(0).equalTo(1)
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- result = input1.join(input2).where(0).equal_to(1)
-~~~
-
-</div>
-</div>
-
-#### Join with Join-Function
-
-A Join transformation can also call a user-defined join function to process joining tuples.
-A join function receives one element of the first input DataSet and one element of the second input DataSet and returns exactly one element.
-
-The following code performs a join of DataSet with custom java objects and a Tuple DataSet using key-selector functions and shows how to use a user-defined join function:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-// some POJO
-public class Rating {
-  public String name;
-  public String category;
-  public int points;
-}
-
-// Join function that joins a custom POJO with a Tuple
-public class PointWeighter
-         implements JoinFunction<Rating, Tuple2<String, Double>, Tuple2<String, Double>> {
-
-  @Override
-  public Tuple2<String, Double> join(Rating rating, Tuple2<String, Double> weight) {
-    // multiply the points and rating and construct a new output tuple
-    return new Tuple2<String, Double>(rating.name, rating.points * weight.f1);
-  }
-}
-
-DataSet<Rating> ratings = // [...]
-DataSet<Tuple2<String, Double>> weights = // [...]
-DataSet<Tuple2<String, Double>>
-            weightedRatings =
-            ratings.join(weights)
-
-                   // key of the first input
-                   .where("category")
-
-                   // key of the second input
-                   .equalTo("f0")
-
-                   // applying the JoinFunction on joining pairs
-                   .with(new PointWeighter());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-case class Rating(name: String, category: String, points: Int)
-
-val ratings: DataSet[Ratings] = // [...]
-val weights: DataSet[(String, Double)] = // [...]
-
-val weightedRatings = ratings.join(weights).where("category").equalTo(0) {
-  (rating, weight) => (rating.name, rating.points * weight._2)
-}
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- class PointWeighter(JoinFunction):
-   def join(self, rating, weight):
-     return (rating[0], rating[1] * weight[1]) 
-       if value1[3]:
-
- weightedRatings = 
-   ratings.join(weights).where(0).equal_to(0). \
-   with(new PointWeighter(), (STRING, FLOAT));
-~~~
-
-</div>
-</div>
-
-#### Join with Flat-Join Function
-
-Analogous to Map and FlatMap, a FlatJoin behaves in the same
-way as a Join, but instead of returning one element, it can
-return (collect), zero, one, or more elements.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-public class PointWeighter
-         implements FlatJoinFunction<Rating, Tuple2<String, Double>, Tuple2<String, Double>> {
-  @Override
-  public void join(Rating rating, Tuple2<String, Double> weight,
-	  Collector<Tuple2<String, Double>> out) {
-	if (weight.f1 > 0.1) {
-		out.collect(new Tuple2<String, Double>(rating.name, rating.points * weight.f1));
-	}
-  }
-}
-
-DataSet<Tuple2<String, Double>>
-            weightedRatings =
-            ratings.join(weights) // [...]
-~~~
-
-#### Join with Projection (Java/Python Only)
-
-A Join transformation can construct result tuples using a projection as shown here:
-
-~~~java
-DataSet<Tuple3<Integer, Byte, String>> input1 = // [...]
-DataSet<Tuple2<Integer, Double>> input2 = // [...]
-DataSet<Tuple4<Integer, String, Double, Byte>
-            result =
-            input1.join(input2)
-                  // key definition on first DataSet using a field position key
-                  .where(0)
-                  // key definition of second DataSet using a field position key
-                  .equalTo(0)
-                  // select and reorder fields of matching tuples
-                  .projectFirst(0,2).projectSecond(1).projectFirst(1);
-~~~
-
-`projectFirst(int...)` and `projectSecond(int...)` select the fields of the first and second joined input that should be assembled into an output Tuple. The order of indexes defines the order of fields in the output tuple.
-The join projection works also for non-Tuple DataSets. In this case, `projectFirst()` or `projectSecond()` must be called without arguments to add a joined element to the output Tuple.
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-case class Rating(name: String, category: String, points: Int)
-
-val ratings: DataSet[Ratings] = // [...]
-val weights: DataSet[(String, Double)] = // [...]
-
-val weightedRatings = ratings.join(weights).where("category").equalTo(0) {
-  (rating, weight, out: Collector[(String, Double)] =>
-    if (weight._2 > 0.1) out.collect(left.name, left.points * right._2)
-}
-
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-#### Join with Projection (Java/Python Only)
-
-A Join transformation can construct result tuples using a projection as shown here:
-
-~~~python
- result = input1.join(input2).where(0).equal_to(0) \ 
-  .project_first(0,2).project_second(1).project_first(1);
-~~~
-
-`project_first(int...)` and `project_second(int...)` select the fields of the first and second joined input that should be assembled into an output Tuple. The order of indexes defines the order of fields in the output tuple.
-The join projection works also for non-Tuple DataSets. In this case, `project_first()` or `project_second()` must be called without arguments to add a joined element to the output Tuple.
-
-</div>
-</div>
-
-#### Join with DataSet Size Hint
-
-In order to guide the optimizer to pick the right execution strategy, you can hint the size of a DataSet to join as shown here:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<Tuple2<Integer, String>> input1 = // [...]
-DataSet<Tuple2<Integer, String>> input2 = // [...]
-
-DataSet<Tuple2<Tuple2<Integer, String>, Tuple2<Integer, String>>>
-            result1 =
-            // hint that the second DataSet is very small
-            input1.joinWithTiny(input2)
-                  .where(0)
-                  .equalTo(0);
-
-DataSet<Tuple2<Tuple2<Integer, String>, Tuple2<Integer, String>>>
-            result2 =
-            // hint that the second DataSet is very large
-            input1.joinWithHuge(input2)
-                  .where(0)
-                  .equalTo(0);
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val input1: DataSet[(Int, String)] = // [...]
-val input2: DataSet[(Int, String)] = // [...]
-
-// hint that the second DataSet is very small
-val result1 = input1.joinWithTiny(input2).where(0).equalTo(0)
-
-// hint that the second DataSet is very large
-val result1 = input1.joinWithHuge(input2).where(0).equalTo(0)
-
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
-
- #hint that the second DataSet is very small
- result1 = input1.join_with_tiny(input2).where(0).equal_to(0)
-
- #hint that the second DataSet is very large
- result1 = input1.join_with_huge(input2).where(0).equal_to(0)
-
-~~~
-
-</div>
-</div>
-
-#### Join Algorithm Hints
-
-The Flink runtime can execute joins in various ways. Each possible way outperforms the others under
-different circumstances. The system tries to pick a reasonable way automatically, but allows you
-to manually pick a strategy, in case you want to enforce a specific way of executing the join.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<SomeType> input1 = // [...]
-DataSet<AnotherType> input2 = // [...]
-
-DataSet<Tuple2<SomeType, AnotherType> result =
-      input1.join(input2, BROADCAST_HASH_FIRST)
-            .where("id").equalTo("key");
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val input1: DataSet[SomeType] = // [...]
-val input2: DataSet[AnotherType] = // [...]
-
-// hint that the second DataSet is very small
-val result1 = input1.join(input2, BROADCAST_HASH_FIRST).where("id").equalTo("key")
-
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
-Not supported.
-~~~
-
-</div>
-</div>
-
-The following hints are available:
-
-* OPTIMIZER_CHOOSES: Equivalent to not giving a hint at all, leaves the choice to the system.
-
-* BROADCAST_HASH_FIRST: Broadcasts the first input and builds a hash table from it, which is
-  probed by the second input. A good strategy if the first input is very small.
-
-* BROADCAST_HASH_SECOND: Broadcasts the second input and builds a hash table from it, which is
-  probed by the first input. A good strategy if the second input is very small.
-
-* REPARTITION_HASH_FIRST: The system partitions (shuffles) each input (unless the input is already
-  partitioned) and builds a hash table from the first input. This strategy is good if the first
-  input is smaller than the second, but both inputs are still large.
-  *Note:* This is the default fallback strategy that the system uses if no size estimates can be made
-  and no pre-existing partitiongs and sort-orders can be re-used.
-
-* REPARTITION_HASH_SECOND: The system partitions (shuffles) each input (unless the input is already
-  partitioned) and builds a hash table from the second input. This strategy is good if the second
-  input is smaller than the first, but both inputs are still large.
-
-* REPARTITION_SORT_MERGE: The system partitions (shuffles) each input (unless the input is already
-  partitioned) and sorts each input (unless it is already sorted). The inputs are joined by
-  a streamed merge of the sorted inputs. This strategy is good if one or both of the inputs are
-  already sorted.
-
-
-### Cross
-
-The Cross transformation combines two DataSets into one DataSet. It builds all pairwise combinations of the elements of both input DataSets, i.e., it builds a Cartesian product.
-The Cross transformation either calls a user-defined cross function on each pair of elements or outputs a Tuple2. Both modes are shown in the following.
-
-**Note:** Cross is potentially a *very* compute-intensive operation which can challenge even large compute clusters!
-
-#### Cross with User-Defined Function
-
-A Cross transformation can call a user-defined cross function. A cross function receives one element of the first input and one element of the second input and returns exactly one result element.
-
-The following code shows how to apply a Cross transformation on two DataSets using a cross function:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-public class Coord {
-  public int id;
-  public int x;
-  public int y;
-}
-
-// CrossFunction computes the Euclidean distance between two Coord objects.
-public class EuclideanDistComputer
-         implements CrossFunction<Coord, Coord, Tuple3<Integer, Integer, Double>> {
-
-  @Override
-  public Tuple3<Integer, Integer, Double> cross(Coord c1, Coord c2) {
-    // compute Euclidean distance of coordinates
-    double dist = sqrt(pow(c1.x - c2.x, 2) + pow(c1.y - c2.y, 2));
-    return new Tuple3<Integer, Integer, Double>(c1.id, c2.id, dist);
-  }
-}
-
-DataSet<Coord> coords1 = // [...]
-DataSet<Coord> coords2 = // [...]
-DataSet<Tuple3<Integer, Integer, Double>>
-            distances =
-            coords1.cross(coords2)
-                   // apply CrossFunction
-                   .with(new EuclideanDistComputer());
-~~~
-
-#### Cross with Projection
-
-A Cross transformation can also construct result tuples using a projection as shown here:
-
-~~~java
-DataSet<Tuple3<Integer, Byte, String>> input1 = // [...]
-DataSet<Tuple2<Integer, Double>> input2 = // [...]
-DataSet<Tuple4<Integer, Byte, Integer, Double>
-            result =
-            input1.cross(input2)
-                  // select and reorder fields of matching tuples
-                  .projectSecond(0).projectFirst(1,0).projectSecond(1);
-~~~
-
-The field selection in a Cross projection works the same way as in the projection of Join results.
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-case class Coord(id: Int, x: Int, y: Int)
-
-val coords1: DataSet[Coord] = // [...]
-val coords2: DataSet[Coord] = // [...]
-
-val distances = coords1.cross(coords2) {
-  (c1, c2) =>
-    val dist = sqrt(pow(c1.x - c2.x, 2) + pow(c1.y - c2.y, 2))
-    (c1.id, c2.id, dist)
-}
-~~~
-
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- class Euclid(CrossFunction):
-   def cross(self, c1, c2):
-     return (c1[0], c2[0], sqrt(pow(c1[1] - c2.[1], 2) + pow(c1[2] - c2[2], 2)))
-
- distances = coords1.cross(coords2).using(Euclid(), (INT,INT,FLOAT))
-~~~
-
-#### Cross with Projection
-
-A Cross transformation can also construct result tuples using a projection as shown here:
-
-~~~python
-result = input1.cross(input2).projectFirst(1,0).projectSecond(0,1);
-~~~
-
-The field selection in a Cross projection works the same way as in the projection of Join results.
-
-</div>
-</div>
-
-#### Cross with DataSet Size Hint
-
-In order to guide the optimizer to pick the right execution strategy, you can hint the size of a DataSet to cross as shown here:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<Tuple2<Integer, String>> input1 = // [...]
-DataSet<Tuple2<Integer, String>> input2 = // [...]
-
-DataSet<Tuple4<Integer, String, Integer, String>>
-            udfResult =
-                  // hint that the second DataSet is very small
-            input1.crossWithTiny(input2)
-                  // apply any Cross function (or projection)
-                  .with(new MyCrosser());
-
-DataSet<Tuple3<Integer, Integer, String>>
-            projectResult =
-                  // hint that the second DataSet is very large
-            input1.crossWithHuge(input2)
-                  // apply a projection (or any Cross function)
-                  .projectFirst(0,1).projectSecond(1);
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val input1: DataSet[(Int, String)] = // [...]
-val input2: DataSet[(Int, String)] = // [...]
-
-// hint that the second DataSet is very small
-val result1 = input1.crossWithTiny(input2)
-
-// hint that the second DataSet is very large
-val result1 = input1.crossWithHuge(input2)
-
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- #hint that the second DataSet is very small
- result1 = input1.cross_with_tiny(input2)
-
- #hint that the second DataSet is very large
- result1 = input1.cross_with_huge(input2)
-
-~~~
-
-</div>
-</div>
-
-### CoGroup
-
-The CoGroup transformation jointly processes groups of two DataSets. Both DataSets are grouped on a defined key and groups of both DataSets that share the same key are handed together to a user-defined co-group function. If for a specific key only one DataSet has a group, the co-group function is called with this group and an empty group.
-A co-group function can separately iterate over the elements of both groups and return an arbitrary number of result elements.
-
-Similar to Reduce, GroupReduce, and Join, keys can be defined using the different key-selection methods.
-
-#### CoGroup on DataSets
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-The example shows how to group by Field Position Keys (Tuple DataSets only). You can do the same with Pojo-types and key expressions.
-
-~~~java
-// Some CoGroupFunction definition
-class MyCoGrouper
-         implements CoGroupFunction<Tuple2<String, Integer>, Tuple2<String, Double>, Double> {
-
-  @Override
-  public void coGroup(Iterable<Tuple2<String, Integer>> iVals,
-                      Iterable<Tuple2<String, Double>> dVals,
-                      Collector<Double> out) {
-
-    Set<Integer> ints = new HashSet<Integer>();
-
-    // add all Integer values in group to set
-    for (Tuple2<String, Integer>> val : iVals) {
-      ints.add(val.f1);
-    }
-
-    // multiply each Double value with each unique Integer values of group
-    for (Tuple2<String, Double> val : dVals) {
-      for (Integer i : ints) {
-        out.collect(val.f1 * i);
-      }
-    }
-  }
-}
-
-// [...]
-DataSet<Tuple2<String, Integer>> iVals = // [...]
-DataSet<Tuple2<String, Double>> dVals = // [...]
-DataSet<Double> output = iVals.coGroup(dVals)
-                         // group first DataSet on first tuple field
-                         .where(0)
-                         // group second DataSet on first tuple field
-                         .equalTo(0)
-                         // apply CoGroup function on each pair of groups
-                         .with(new MyCoGrouper());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val iVals: DataSet[(String, Int)] = // [...]
-val dVals: DataSet[(String, Double)] = // [...]
-
-val output = iVals.coGroup(dVals).where(0).equalTo(0) {
-  (iVals, dVals, out: Collector[Double]) =>
-    val ints = iVals map { _._2 } toSet
-
-    for (dVal <- dVals) {
-      for (i <- ints) {
-        out.collect(dVal._2 * i)
-      }
-    }
-}
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- class CoGroup(CoGroupFunction):
-   def co_group(self, ivals, dvals, collector):
-     ints = dict()
-     # add all Integer values in group to set
-     for value in ivals:
-       ints[value[1]] = 1
-     # multiply each Double value with each unique Integer values of group
-     for value in dvals:
-       for i in ints.keys():
-         collector.collect(value[1] * i)
-
-
- output = ivals.co_group(dvals).where(0).equal_to(0).using(CoGroup(), DOUBLE)
-~~~
-
-</div>
-</div>
-
-
-### Union
-
-Produces the union of two DataSets, which have to be of the same type. A union of more than two DataSets can be implemented with multiple union calls, as shown here:
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<Tuple2<String, Integer>> vals1 = // [...]
-DataSet<Tuple2<String, Integer>> vals2 = // [...]
-DataSet<Tuple2<String, Integer>> vals3 = // [...]
-DataSet<Tuple2<String, Integer>> unioned = vals1.union(vals2).union(vals3);
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val vals1: DataSet[(String, Int)] = // [...]
-val vals2: DataSet[(String, Int)] = // [...]
-val vals3: DataSet[(String, Int)] = // [...]
-
-val unioned = vals1.union(vals2).union(vals3)
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
- unioned = vals1.union(vals2).union(vals3)
-~~~
-
-</div>
-</div>
-
-### Rebalance
-Evenly rebalances the parallel partitions of a DataSet to eliminate data skew.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<String> in = // [...]
-// rebalance DataSet and apply a Map transformation.
-DataSet<Tuple2<String, String>> out = in.rebalance()
-                                        .map(new Mapper());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val in: DataSet[String] = // [...]
-// rebalance DataSet and apply a Map transformation.
-val out = in.rebalance().map { ... }
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
-Not supported.
-~~~
-
-</div>
-</div>
-
-
-### Hash-Partition
-
-Hash-partitions a DataSet on a given key.
-Keys can be specified as key expressions or field position keys (see [Reduce examples](#reduce-on-grouped-dataset) for how to specify keys).
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<Tuple2<String, Integer>> in = // [...]
-// hash-partition DataSet by String value and apply a MapPartition transformation.
-DataSet<Tuple2<String, String>> out = in.partitionByHash(0)
-                                        .mapPartition(new PartitionMapper());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val in: DataSet[(String, Int)] = // [...]
-// hash-partition DataSet by String value and apply a MapPartition transformation.
-val out = in.partitionByHash(0).mapPartition { ... }
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
-Not supported.
-~~~
-
-</div>
-</div>
-
-### Sort Partition
-
-Locally sorts all partitions of a DataSet on a specified field in a specified order.
-Fields can be specified as field expressions or field positions (see [Reduce examples](#reduce-on-grouped-dataset) for how to specify keys).
-Partitions can be sorted on multiple fields by chaining `sortPartition()` calls.
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<Tuple2<String, Integer>> in = // [...]
-// Locally sort partitions in ascending order on the second String field and
-// in descending order on the first String field.
-// Apply a MapPartition transformation on the sorted partitions.
-DataSet<Tuple2<String, String>> out = in.sortPartition(1, Order.ASCENDING)
-                                          .sortPartition(0, Order.DESCENDING)
-                                        .mapPartition(new PartitionMapper());
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val in: DataSet[(String, Int)] = // [...]
-// Locally sort partitions in ascending order on the second String field and
-// in descending order on the first String field.
-// Apply a MapPartition transformation on the sorted partitions.
-val out = in.sortPartition(1, Order.ASCENDING)
-              .sortPartition(0, Order.DESCENDING)
-            .mapPartition { ... }
-~~~
-
-</div>
-</div>
-
-### First-n
-
-Returns the first n (arbitrary) elements of a DataSet. First-n can be applied on a regular DataSet, a grouped DataSet, or a grouped-sorted DataSet. Grouping keys can be specified as key-selector functions or field position keys (see [Reduce examples](#reduce-on-grouped-dataset) for how to specify keys).
-
-<div class="codetabs" markdown="1">
-<div data-lang="java" markdown="1">
-
-~~~java
-DataSet<Tuple2<String, Integer>> in = // [...]
-// Return the first five (arbitrary) elements of the DataSet
-DataSet<Tuple2<String, Integer>> out1 = in.first(5);
-
-// Return the first two (arbitrary) elements of each String group
-DataSet<Tuple2<String, Integer>> out2 = in.groupBy(0)
-                                          .first(2);
-
-// Return the first three elements of each String group ordered by the Integer field
-DataSet<Tuple2<String, Integer>> out3 = in.groupBy(0)
-                                          .sortGroup(1, Order.ASCENDING)
-                                          .first(3);
-~~~
-
-</div>
-<div data-lang="scala" markdown="1">
-
-~~~scala
-val in: DataSet[(String, Int)] = // [...]
-// Return the first five (arbitrary) elements of the DataSet
-val out1 = in.first(5)
-
-// Return the first two (arbitrary) elements of each String group
-val out2 = in.groupBy(0).first(2)
-
-// Return the first three elements of each String group ordered by the Integer field
-val out3 = in.groupBy(0).sortGroup(1, Order.ASCENDING).first(3)
-~~~
-
-</div>
-<div data-lang="python" markdown="1">
-
-~~~python
-Not supported.
-~~~
-
-</div>
-</div>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/example_connectors.md
----------------------------------------------------------------------
diff --git a/docs/example_connectors.md b/docs/example_connectors.md
deleted file mode 100644
index 5a2e504..0000000
--- a/docs/example_connectors.md
+++ /dev/null
@@ -1,205 +0,0 @@
----
-title:  "Connecting to other systems"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-## Reading from filesystems.
-
-Flink has build-in support for the following file systems:
-
-| Filesystem        | Since           | Scheme  | Notes |
-| ------------- |-------------| -----| ------ |
-| Hadoop Distributed File System (HDFS)  | 0.2 | `hdfs://`| All HDFS versions are supported |
-| Amazon S3    |  0.2 | `s3://` |   |
-| MapR file system      | 0.7-incubating      |  `maprfs://` | The user has to manually place the required jar files in the `lib/` dir |
-| Tachyon   |  0.9 | `tachyon://` | Support through Hadoop file system implementation (see below) |
-
-
-
-### Using Hadoop file systems with Apache Flink
-
-Apache Flink allows users to use any file system implementing the `org.apache.hadoop.fs.FileSystem`
-interface. Hadoop ships adapters for FTP, [Hftp](http://hadoop.apache.org/docs/r1.2.1/hftp.html), and others.
-
-Flink has integrated testcases to validate the integration with [Tachyon](http://tachyon-project.org/).
-Other file systems we tested the integration is the
-[Google Cloud Storage Connector for Hadoop](https://cloud.google.com/hadoop/google-cloud-storage-connector) and [XtreemFS](http://www.xtreemfs.org/).
-
-In order to use a Hadoop file system with Flink, make sure that the `flink-conf.yaml` has set the
-`fs.hdfs.hadoopconf` property set to the Hadoop configuration directory.
-In addition to that, the Hadoop configuration (in that directory) needs to have an entry for each supported file system.
-For example for tachyon support, there must be the following entry in the `core-site.xml` file:
-
-~~~xml
-<property>
-  <name>fs.tachyon.impl</name>
-  <value>tachyon.hadoop.TFS</value>
-</property>
-~~~
-
-Also, the required classes for using the file system need to be placed in the `lib/` folder of the Flink installation (on all machines running Flink). If putting the files into the directory is not possible, Flink is also respecting the `HADOOP_CLASSPATH` environment variable to add Hadoop jar files to the classpath.
-
-
-## Connecting to other systems using Input / Output Format wrappers for Hadoop
-
-Apache Flink allows users to access many different systems as data sources or sinks.
-The system is designed for very easy extensibility. Similar to Apache Hadoop, Flink has the concept
-of so called `InputFormat`s and `OutputFormat`s.
-
-One implementation of these `InputFormat`s is the `HadoopInputFormat`. This is a wrapper that allows
-users to use all existing Hadoop input formats with Flink.
-
-This section shows some examples for connecting Flink to other systems.
-[Read more about Hadoop compatibility in Flink](hadoop_compatibility.html).
-
-## Avro support in Flink
-
-Flink has extensive build-in support for [Apache Avro](http://avro.apache.org/). This allows to easily read from Avro files with Flink.
-Also, the serialization framework of Flink is able to handle classes generated from Avro schemas.
-
-In order to read data from an Avro file, you have to specify an `AvroInputFormat`.
-
-**Example**:
-
-~~~java
-AvroInputFormat<User> users = new AvroInputFormat<User>(in, User.class);
-DataSet<User> usersDS = env.createInput(users);
-~~~
-
-Note that `User` is a POJO generated by Avro. Flink also allows to perform string-based key selection of these POJOs. For example:
-
-~~~java
-usersDS.groupBy("name")
-~~~
-
-
-Note that using the `GenericData.Record` type is possible with Flink, but not recommended. Since the record contains the full schema, its very data intensive and thus probably slow to use.
-
-Flink's POJO field selection also works with POJOs generated from Avro. However, the usage is only possible if the field types are written correctly to the generated class. If a field is of type `Object` you can not use the field as a join or grouping key.
-Specifying a field in Avro like this `{"name": "type_double_test", "type": "double"},` works fine, however specifying it as a UNION-type with only one field (`{"name": "type_double_test", "type": ["double"]},`) will generate a field of type `Object`. Note that specifying nullable types (`{"name": "type_double_test", "type": ["null", "double"]},`) is possible!
-
-
-
-### Access Microsoft Azure Table Storage
-
-_Note: This example works starting from Flink 0.6-incubating_
-
-This example is using the `HadoopInputFormat` wrapper to use an existing Hadoop input format implementation for accessing [Azure's Table Storage](https://azure.microsoft.com/en-us/documentation/articles/storage-introduction/).
-
-1. Download and compile the `azure-tables-hadoop` project. The input format developed by the project is not yet available in Maven Central, therefore, we have to build the project ourselves.
-Execute the following commands:
-
-   ~~~bash
-   git clone https://github.com/mooso/azure-tables-hadoop.git
-   cd azure-tables-hadoop
-   mvn clean install
-   ~~~
-
-2. Setup a new Flink project using the quickstarts:
-
-   ~~~bash
-   curl http://flink.apache.org/q/quickstart.sh | bash
-   ~~~
-
-3. Add the following dependencies (in the `<dependencies>` section) to your `pom.xml` file:
-
-   ~~~xml
-   <dependency>
-       <groupId>org.apache.flink</groupId>
-       <artifactId>flink-hadoop-compatibility</artifactId>
-       <version>{{site.FLINK_VERSION_HADOOP2_STABLE}}</version>
-   </dependency>
-   <dependency>
-     <groupId>com.microsoft.hadoop</groupId>
-     <artifactId>microsoft-hadoop-azure</artifactId>
-     <version>0.0.4</version>
-   </dependency>
-   ~~~
-
-   `flink-hadoop-compatibility` is a Flink package that provides the Hadoop input format wrappers.
-   `microsoft-hadoop-azure` is adding the project we've build before to our project.
-
-The project is now prepared for starting to code. We recommend to import the project into an IDE, such as Eclipse or IntelliJ. (Import as a Maven project!).
-Browse to the code of the `Job.java` file. Its an empty skeleton for a Flink job.
-
-Paste the following code into it:
-
-~~~java
-import java.util.Map;
-import org.apache.flink.api.common.functions.MapFunction;
-import org.apache.flink.api.java.DataSet;
-import org.apache.flink.api.java.ExecutionEnvironment;
-import org.apache.flink.api.java.tuple.Tuple2;
-import org.apache.flink.hadoopcompatibility.mapreduce.HadoopInputFormat;
-import org.apache.hadoop.io.Text;
-import org.apache.hadoop.mapreduce.Job;
-import com.microsoft.hadoop.azure.AzureTableConfiguration;
-import com.microsoft.hadoop.azure.AzureTableInputFormat;
-import com.microsoft.hadoop.azure.WritableEntity;
-import com.microsoft.windowsazure.storage.table.EntityProperty;
-
-public class AzureTableExample {
-
-  public static void main(String[] args) throws Exception {
-    // set up the execution environment
-    final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
-    
-    // create a  AzureTableInputFormat, using a Hadoop input format wrapper
-    HadoopInputFormat<Text, WritableEntity> hdIf = new HadoopInputFormat<Text, WritableEntity>(new AzureTableInputFormat(), Text.class, WritableEntity.class, new Job());
-
-    // set the Account URI, something like: https://apacheflink.table.core.windows.net
-    hdIf.getConfiguration().set(AzureTableConfiguration.Keys.ACCOUNT_URI.getKey(), "TODO"); 
-    // set the secret storage key here
-    hdIf.getConfiguration().set(AzureTableConfiguration.Keys.STORAGE_KEY.getKey(), "TODO");
-    // set the table name here
-    hdIf.getConfiguration().set(AzureTableConfiguration.Keys.TABLE_NAME.getKey(), "TODO");
-    
-    DataSet<Tuple2<Text, WritableEntity>> input = env.createInput(hdIf);
-    // a little example how to use the data in a mapper.
-    DataSet<String> fin = input.map(new MapFunction<Tuple2<Text,WritableEntity>, String>() {
-      @Override
-      public String map(Tuple2<Text, WritableEntity> arg0) throws Exception {
-        System.err.println("--------------------------------\nKey = "+arg0.f0);
-        WritableEntity we = arg0.f1;
-
-        for(Map.Entry<String, EntityProperty> prop : we.getProperties().entrySet()) {
-          System.err.println("key="+prop.getKey() + " ; value (asString)="+prop.getValue().getValueAsString());
-        }
-
-        return arg0.f0.toString();
-      }
-    });
-
-    // emit result (this works only locally)
-    fin.print();
-
-    // execute program
-    env.execute("Azure Example");
-  }
-}
-~~~
-
-The example shows how to access an Azure table and turn data into Flink's `DataSet` (more specifically, the type of the set is `DataSet<Tuple2<Text, WritableEntity>>`). With the `DataSet`, you can apply all known transformations to the DataSet.
-
-## Access MongoDB
-
-This [GitHub repository documents how to use MongoDB with Apache Flink (starting from 0.7-incubating)](https://github.com/okkam-it/flink-mongodb-test).
-
-


[06/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/img/quickstart-example/kmeans008.png
----------------------------------------------------------------------
diff --git a/docs/page/img/quickstart-example/kmeans008.png b/docs/page/img/quickstart-example/kmeans008.png
new file mode 100644
index 0000000..b372fd1
Binary files /dev/null and b/docs/page/img/quickstart-example/kmeans008.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/img/quickstart-example/kmeans015.png
----------------------------------------------------------------------
diff --git a/docs/page/img/quickstart-example/kmeans015.png b/docs/page/img/quickstart-example/kmeans015.png
new file mode 100644
index 0000000..8b6fb51
Binary files /dev/null and b/docs/page/img/quickstart-example/kmeans015.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/img/quickstart-example/result003.png
----------------------------------------------------------------------
diff --git a/docs/page/img/quickstart-example/result003.png b/docs/page/img/quickstart-example/result003.png
new file mode 100644
index 0000000..bdcef44
Binary files /dev/null and b/docs/page/img/quickstart-example/result003.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/img/quickstart-example/result008.png
----------------------------------------------------------------------
diff --git a/docs/page/img/quickstart-example/result008.png b/docs/page/img/quickstart-example/result008.png
new file mode 100644
index 0000000..921c73c
Binary files /dev/null and b/docs/page/img/quickstart-example/result008.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/img/quickstart-example/result015.png
----------------------------------------------------------------------
diff --git a/docs/page/img/quickstart-example/result015.png b/docs/page/img/quickstart-example/result015.png
new file mode 100644
index 0000000..9dbc6c4
Binary files /dev/null and b/docs/page/img/quickstart-example/result015.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/img/quickstart-example/run-webclient.png
----------------------------------------------------------------------
diff --git a/docs/page/img/quickstart-example/run-webclient.png b/docs/page/img/quickstart-example/run-webclient.png
new file mode 100644
index 0000000..8b3d535
Binary files /dev/null and b/docs/page/img/quickstart-example/run-webclient.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/img/quickstart_cluster.png
----------------------------------------------------------------------
diff --git a/docs/page/img/quickstart_cluster.png b/docs/page/img/quickstart_cluster.png
new file mode 100644
index 0000000..9e24795
Binary files /dev/null and b/docs/page/img/quickstart_cluster.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/js/codetabs.js
----------------------------------------------------------------------
diff --git a/docs/page/js/codetabs.js b/docs/page/js/codetabs.js
new file mode 100644
index 0000000..878aa32
--- /dev/null
+++ b/docs/page/js/codetabs.js
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* Note: This file is originally from the Apache Spark project. */
+
+/* Custom JavaScript code in the MarkDown docs */
+
+// Enable language-specific code tabs
+function codeTabs() {
+  var counter = 0;
+  var langImages = {
+    "scala": "img/scala-sm.png",
+    "python": "img/python-sm.png",
+    "java": "img/java-sm.png"
+  };
+  $("div.codetabs").each(function() {
+    $(this).addClass("tab-content");
+
+    // Insert the tab bar
+    var tabBar = $('<ul class="nav nav-tabs" data-tabs="tabs"></ul>');
+    $(this).before(tabBar);
+
+    // Add each code sample to the tab bar:
+    var codeSamples = $(this).children("div");
+    codeSamples.each(function() {
+      $(this).addClass("tab-pane");
+      var lang = $(this).data("lang");
+      var image = $(this).data("image");
+      var notabs = $(this).data("notabs");
+      var capitalizedLang = lang.substr(0, 1).toUpperCase() + lang.substr(1);
+      var id = "tab_" + lang + "_" + counter;
+      $(this).attr("id", id);
+      if (image != null && langImages[lang]) {
+        var buttonLabel = "<img src='" +langImages[lang] + "' alt='" + capitalizedLang + "' />";
+      } else if (notabs == null) {
+        var buttonLabel = "<b>" + capitalizedLang + "</b>";
+      } else {
+        var buttonLabel = ""
+      }
+      tabBar.append(
+        '<li><a class="tab_' + lang + '" href="#' + id + '">' + buttonLabel + '</a></li>'
+      );
+    });
+
+    codeSamples.first().addClass("active");
+    tabBar.children("li").first().addClass("active");
+    counter++;
+  });
+  $("ul.nav-tabs a").click(function (e) {
+    // Toggling a tab should switch all tabs corresponding to the same language
+    // while retaining the scroll position
+    e.preventDefault();
+    var scrollOffset = $(this).offset().top - $(document).scrollTop();
+    $("." + $(this).attr('class')).tab('show');
+    $(document).scrollTop($(this).offset().top - scrollOffset);
+  });
+}
+
+function makeCollapsable(elt, accordionClass, accordionBodyId, title) {
+  $(elt).addClass("accordion-inner");
+  $(elt).wrap('<div class="accordion ' + accordionClass + '"></div>')
+  $(elt).wrap('<div class="accordion-group"></div>')
+  $(elt).wrap('<div id="' + accordionBodyId + '" class="accordion-body collapse"></div>')
+  $(elt).parent().before(
+    '<div class="accordion-heading">' +
+      '<a class="accordion-toggle" data-toggle="collapse" href="#' + accordionBodyId + '">' +
+             title +
+      '</a>' +
+    '</div>'
+  );
+}
+
+// Enable "view solution" sections (for exercises)
+function viewSolution() {
+  var counter = 0
+  $("div.solution").each(function() {
+    var id = "solution_" + counter
+    makeCollapsable(this, "", id,
+      '<i class="icon-ok-sign" style="text-decoration: none; color: #0088cc">' +
+      '</i>' + "View Solution");
+    counter++;
+  });
+}
+
+// A script to fix internal hash links because we have an overlapping top bar.
+// Based on https://github.com/twitter/bootstrap/issues/193#issuecomment-2281510
+function maybeScrollToHash() {
+  console.log("HERE");
+  if (window.location.hash && $(window.location.hash).length) {
+    console.log("HERE2", $(window.location.hash), $(window.location.hash).offset().top);
+    var newTop = $(window.location.hash).offset().top - 57;
+    $(window).scrollTop(newTop);
+  }
+}
+
+$(function() {
+  codeTabs();
+  viewSolution();
+
+  $(window).bind('hashchange', function() {
+    maybeScrollToHash();
+  });
+
+  // Scroll now too in case we had opened the page on a hash, but wait a bit because some browsers
+  // will try to do *their* initial scroll after running the onReady handler.
+  $(window).load(function() { setTimeout(function() { maybeScrollToHash(); }, 25); }); 
+});


[27/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/programming_guide.md
----------------------------------------------------------------------
diff --git a/docs/apis/programming_guide.md b/docs/apis/programming_guide.md
new file mode 100644
index 0000000..1d6723f
--- /dev/null
+++ b/docs/apis/programming_guide.md
@@ -0,0 +1,2937 @@
+---
+title: "Flink Programming Guide"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<a href="#top"></a>
+
+Analysis programs in Flink are regular programs that implement transformations on data sets
+(e.g., filtering, mapping, joining, grouping). The data sets are initially created from certain
+sources (e.g., by reading files, or from collections). Results are returned via sinks, which may for
+example write the data to (distributed) files, or to standard output (for example the command line
+terminal). Flink programs run in a variety of contexts, standalone, or embedded in other programs.
+The execution can happen in a local JVM, or on clusters of many machines.
+
+In order to create your own Flink program, we encourage you to start with the
+[program skeleton](#program-skeleton) and gradually add your own
+[transformations](#transformations). The remaining sections act as references for additional
+operations and advanced features.
+
+* This will be replaced by the TOC
+{:toc}
+
+Example Program
+---------------
+
+The following program is a complete, working example of WordCount. You can copy &amp; paste the code
+to run it locally. You only have to include the correct Flink's library into your project
+(see Section [Linking with Flink](#linking-with-flink)) and specify the imports. Then you are ready
+to go!
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+{% highlight java %}
+public class WordCountExample {
+    public static void main(String[] args) throws Exception {
+        final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+        DataSet<String> text = env.fromElements(
+            "Who's there?",
+            "I think I hear them. Stand, ho! Who's there?");
+
+        DataSet<Tuple2<String, Integer>> wordCounts = text
+            .flatMap(new LineSplitter())
+            .groupBy(0)
+            .sum(1);
+
+        wordCounts.print();
+
+        env.execute("Word Count Example");
+    }
+
+    public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
+        @Override
+        public void flatMap(String line, Collector<Tuple2<String, Integer>> out) {
+            for (String word : line.split(" ")) {
+                out.collect(new Tuple2<String, Integer>(word, 1));
+            }
+        }
+    }
+}
+{% endhighlight %}
+
+</div>
+
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+import org.apache.flink.api.scala._
+
+object WordCount {
+  def main(args: Array[String]) {
+
+    val env = ExecutionEnvironment.getExecutionEnvironment
+    val text = env.fromElements(
+      "Who's there?",
+      "I think I hear them. Stand, ho! Who's there?")
+
+    val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
+      .map { (_, 1) }
+      .groupBy(0)
+      .sum(1)
+
+    counts.print()
+
+    env.execute("Scala WordCount Example")
+  }
+}
+{% endhighlight %}
+</div>
+
+</div>
+
+[Back to top](#top)
+
+
+Linking with Flink
+------------------
+
+To write programs with Flink, you need to include the Flink library corresponding to
+your programming language in your project.
+
+The simplest way to do this is to use one of the quickstart scripts: either for
+[Java](java_api_quickstart.html) or for [Scala](scala_api_quickstart.html). They
+create a blank project from a template (a Maven Archetype), which sets up everything for you. To
+manually create the project, you can use the archetype and create a project by calling:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight bash %}
+mvn archetype:generate /
+    -DarchetypeGroupId=org.apache.flink/
+    -DarchetypeArtifactId=flink-quickstart-java /
+    -DarchetypeVersion={{site.version }}
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight bash %}
+mvn archetype:generate /
+    -DarchetypeGroupId=org.apache.flink/
+    -DarchetypeArtifactId=flink-quickstart-scala /
+    -DarchetypeVersion={{site.version }}
+{% endhighlight %}
+</div>
+</div>
+
+If you want to add Flink to an existing Maven project, add the following entry to your
+*dependencies* section in the *pom.xml* file of your project:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight xml %}
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-java</artifactId>
+  <version>{{site.version }}</version>
+</dependency>
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-clients</artifactId>
+  <version>{{site.version }}</version>
+</dependency>
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight xml %}
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-scala</artifactId>
+  <version>{{site.version }}</version>
+</dependency>
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-clients</artifactId>
+  <version>{{site.version }}</version>
+</dependency>
+{% endhighlight %}
+
+**Important:** When working with the Scala API you must have one of these two imports:
+{% highlight scala %}
+import org.apache.flink.api.scala._
+{% endhighlight %}
+
+or
+
+{% highlight scala %}
+import org.apache.flink.api.scala.createTypeInformation
+{% endhighlight %}
+
+The reason is that Flink analyzes the types that are used in a program and generates serializers
+and comparaters for them. By having either of those imports you enable an implicit conversion
+that creates the type information for Flink operations.
+</div>
+</div>
+
+If you are using Flink together with Hadoop, the version of the dependency may vary depending on the
+version of Hadoop (or more specifically, HDFS) that you want to use Flink with. Please refer to the
+[downloads page]({{site.baseurl}}/downloads.html) for a list of available versions, and instructions
+on how to link with custom versions of Hadoop.
+
+In order to link against the latest SNAPSHOT versions of the code, please follow
+[this guide]({{site.baseurl}}/downloads.html#nightly).
+
+The *flink-clients* dependency is only necessary to invoke the Flink program locally (for example to
+run it standalone for testing and debugging).  If you intend to only export the program as a JAR
+file and [run it on a cluster](cluster_execution.html), you can skip that dependency.
+
+[Back to top](#top)
+
+Program Skeleton
+----------------
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+As we already saw in the example, Flink programs look like regular Java
+programs with a `main()` method. Each program consists of the same basic parts:
+
+1. Obtain an `ExecutionEnvironment`,
+2. Load/create the initial data,
+3. Specify transformations on this data,
+4. Specify where to put the results of your computations, and
+5. Execute your program.
+
+We will now give an overview of each of those steps but please refer to the respective sections for
+more details. Note that all
+{% gh_link /flink-java/src/main/java/org/apache/flink/api/java "core classes of the Java API" %}
+are found in the package `org.apache.flink.api.java`.
+
+The `ExecutionEnvironment` is the basis for all Flink programs. You can
+obtain one using these static methods on class `ExecutionEnvironment`:
+
+{% highlight java %}
+getExecutionEnvironment()
+
+createLocalEnvironment()
+createLocalEnvironment(int parallelism)
+
+createRemoteEnvironment(String host, int port, String... jarFiles)
+createRemoteEnvironment(String host, int port, int parallelism, String... jarFiles)
+{% endhighlight %}
+
+Typically, you only need to use `getExecutionEnvironment()`, since this
+will do the right thing depending on the context: if you are executing
+your program inside an IDE or as a regular Java program it will create
+a local environment that will execute your program on your local machine. If
+you created a JAR file from you program, and invoke it through the [command line](cli.html)
+or the [web interface](web_client.html),
+the Flink cluster manager will
+execute your main method and `getExecutionEnvironment()` will return
+an execution environment for executing your program on a cluster.
+
+For specifying data sources the execution environment has several methods
+to read from files using various methods: you can just read them line by line,
+as CSV files, or using completely custom data input formats. To just read
+a text file as a sequence of lines, you can use:
+
+{% highlight java %}
+final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+DataSet<String> text = env.readTextFile("file:///path/to/file");
+{% endhighlight %}
+
+This will give you a DataSet on which you can then apply transformations. For
+more information on data sources and input formats, please refer to
+[Data Sources](#data-sources).
+
+Once you have a DataSet you can apply transformations to create a new
+DataSet which you can then write to a file, transform again, or
+combine with other DataSets. You apply transformations by calling
+methods on DataSet with your own custom transformation function. For example,
+a map transformation looks like this:
+
+{% highlight java %}
+DataSet<String> input = ...;
+
+DataSet<Integer> tokenized = text.map(new MapFunction<String, Integer>() {
+    @Override
+    public Integer map(String value) {
+        return Integer.parseInt(value);
+    }
+});
+{% endhighlight %}
+
+This will create a new DataSet by converting every String in the original
+set to an Integer. For more information and a list of all the transformations,
+please refer to [Transformations](#transformations).
+
+Once you have a DataSet that needs to be written to disk you call one
+of these methods on DataSet:
+
+{% highlight java %}
+writeAsText(String path)
+writeAsCsv(String path)
+write(FileOutputFormat<T> outputFormat, String filePath)
+
+print()
+{% endhighlight %}
+
+The last method is only useful for developing/debugging on a local machine,
+it will output the contents of the DataSet to standard output. (Note that in
+a cluster, the result goes to the standard out stream of the cluster nodes and ends
+up in the *.out* files of the workers).
+The first two do as the name suggests, the third one can be used to specify a
+custom data output format. Please refer
+to [Data Sinks](#data-sinks) for more information on writing to files and also
+about custom data output formats.
+
+Once you specified the complete program you need to call `execute` on
+the `ExecutionEnvironment`. This will either execute on your local
+machine or submit your program for execution on a cluster, depending on
+how you created the execution environment.
+
+</div>
+<div data-lang="scala" markdown="1">
+
+As we already saw in the example, Flink programs look like regular Scala
+programs with a `main()` method. Each program consists of the same basic parts:
+
+1. Obtain an `ExecutionEnvironment`,
+2. Load/create the initial data,
+3. Specify transformations on this data,
+4. Specify where to put the results of your computations, and
+5. Execute your program.
+
+We will now give an overview of each of those steps but please refer to the respective sections for
+more details. Note that all core classes of the Scala API are found in the package 
+{% gh_link /flink-scala/src/main/scala/org/apache/flink/api/scala "org.apache.flink.api.scala" %}.
+
+
+The `ExecutionEnvironment` is the basis for all Flink programs. You can
+obtain one using these static methods on class `ExecutionEnvironment`:
+
+{% highlight scala %}
+def getExecutionEnvironment
+
+def createLocalEnvironment(parallelism: Int = Runtime.getRuntime.availableProcessors()))
+
+def createRemoteEnvironment(host: String, port: String, jarFiles: String*)
+def createRemoteEnvironment(host: String, port: String, parallelism: Int, jarFiles: String*)
+{% endhighlight %}
+
+Typically, you only need to use `getExecutionEnvironment()`, since this
+will do the right thing depending on the context: if you are executing
+your program inside an IDE or as a regular Scala program it will create
+a local environment that will execute your program on your local machine. If
+you created a JAR file from you program, and invoke it through the [command line](cli.html)
+or the [web interface](web_client.html),
+the Flink cluster manager will
+execute your main method and `getExecutionEnvironment()` will return
+an execution environment for executing your program on a cluster.
+
+For specifying data sources the execution environment has several methods
+to read from files using various methods: you can just read them line by line,
+as CSV files, or using completely custom data input formats. To just read
+a text file as a sequence of lines, you can use:
+
+{% highlight scala %}
+val env = ExecutionEnvironment.getExecutionEnvironment()
+
+val text = env.readTextFile("file:///path/to/file")
+{% endhighlight %}
+
+This will give you a DataSet on which you can then apply transformations. For
+more information on data sources and input formats, please refer to
+[Data Sources](#data-sources).
+
+Once you have a DataSet you can apply transformations to create a new
+DataSet which you can then write to a file, transform again, or
+combine with other DataSets. You apply transformations by calling
+methods on DataSet with your own custom transformation function. For example,
+a map transformation looks like this:
+
+{% highlight scala %}
+val input: DataSet[String] = ...
+
+val mapped = text.map { x => x.toInt }
+{% endhighlight %}
+
+This will create a new DataSet by converting every String in the original
+set to an Integer. For more information and a list of all the transformations,
+please refer to [Transformations](#transformations).
+
+Once you have a DataSet that needs to be written to disk you can call one
+of these methods on DataSet:
+
+{% highlight scala %}
+def writeAsText(path: String, writeMode: WriteMode = WriteMode.NO_OVERWRITE)
+def writeAsCsv(
+    filePath: String,
+    rowDelimiter: String = "\n",
+    fieldDelimiter: String = ',',
+    writeMode: WriteMode = WriteMode.NO_OVERWRITE)
+def write(outputFormat: FileOutputFormat[T],
+    path: String,
+    writeMode: WriteMode = WriteMode.NO_OVERWRITE)
+
+def print()
+{% endhighlight %}
+
+The last method is only useful for developing/debugging on a local machine,
+it will output the contents of the DataSet to standard output. (Note that in
+a cluster, the result goes to the standard out stream of the cluster nodes and ends
+up in the *.out* files of the workers).
+The first two do as the name suggests, the third one can be used to specify a
+custom data output format. Please refer
+to [Data Sinks](#data-sinks) for more information on writing to files and also
+about custom data output formats.
+
+Once you specified the complete program you need to call `execute` on
+the `ExecutionEnvironment`. This will either execute on your local
+machine or submit your program for execution on a cluster, depending on
+how you created the execution environment.
+
+</div>
+</div>
+
+
+[Back to top](#top)
+
+
+Lazy Evaluation
+---------------
+
+All Flink programs are executed lazily: When the program's main method is executed, the data loading
+and transformations do not happen directly. Rather, each operation is created and added to the
+program's plan. The operations are actually executed when one of the `execute()` methods is invoked
+on the ExecutionEnvironment object. Whether the program is executed locally or on a cluster depends
+on the environment of the program.
+
+The lazy evaluation lets you construct sophisticated programs that Flink executes as one
+holistically planned unit.
+
+[Back to top](#top)
+
+
+Transformations
+---------------
+
+Data transformations transform one or more DataSets into a new DataSet. Programs can combine
+multiple transformations into sophisticated assemblies.
+
+This section gives a brief overview of the available transformations. The [transformations
+documentation](dataset_transformations.html) has a full description of all transformations with
+examples.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+<br />
+
+<table class="table table-bordered">
+  <thead>
+    <tr>
+      <th class="text-left" style="width: 20%">Transformation</th>
+      <th class="text-center">Description</th>
+    </tr>
+  </thead>
+
+  <tbody>
+    <tr>
+      <td><strong>Map</strong></td>
+      <td>
+        <p>Takes one element and produces one element.</p>
+{% highlight java %}
+data.map(new MapFunction<String, Integer>() {
+  public Integer map(String value) { return Integer.parseInt(value); }
+});
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>FlatMap</strong></td>
+      <td>
+        <p>Takes one element and produces zero, one, or more elements. </p>
+{% highlight java %}
+data.flatMap(new FlatMapFunction<String, String>() {
+  public void flatMap(String value, Collector<String> out) {
+    for (String s : value.split(" ")) {
+      out.collect(s);
+    }
+  }
+});
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>MapPartition</strong></td>
+      <td>
+        <p>Transforms a parallel partition in a single function call. The function get the partition
+        as an `Iterable` stream and can produce an arbitrary number of result values. The number of
+        elements in each partition depends on the degree-of-parallelism and previous operations.</p>
+{% highlight java %}
+data.mapPartition(new MapPartitionFunction<String, Long>() {
+  public void mapPartition(Iterable<String> values, Collector<Long> out) {
+    long c = 0;
+    for (String s : values) {
+      c++;
+    }
+    out.collect(c);
+  }
+});
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Filter</strong></td>
+      <td>
+        <p>Evaluates a boolean function for each element and retains those for which the function
+        returns true.<br/>
+        
+        <strong>IMPORTANT:</strong> The system assumes that the function does not modify the elements on which the predicate is applied. Violating this assumption
+        can lead to incorrect results.
+        </p>
+{% highlight java %}
+data.filter(new FilterFunction<Integer>() {
+  public boolean filter(Integer value) { return value > 1000; }
+});
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Reduce</strong></td>
+      <td>
+        <p>Combines a group of elements into a single element by repeatedly combining two elements
+        into one. Reduce may be applied on a full data set, or on a grouped data set.</p>
+{% highlight java %}
+data.reduce(new ReduceFunction<Integer> {
+  public Integer reduce(Integer a, Integer b) { return a + b; }
+});
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>ReduceGroup</strong></td>
+      <td>
+        <p>Combines a group of elements into one or more elements. ReduceGroup may be applied on a
+        full data set, or on a grouped data set.</p>
+{% highlight java %}
+data.reduceGroup(new GroupReduceFunction<Integer, Integer> {
+  public void reduce(Iterable<Integer> values, Collector<Integer> out) {
+    int prefixSum = 0;
+    for (Integer i : values) {
+      prefixSum += i;
+      out.collect(prefixSum);
+    }
+  }
+});
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Aggregate</strong></td>
+      <td>
+        <p>Aggregates a group of values into a single value. Aggregation functions can be thought of
+        as built-in reduce functions. Aggregate may be applied on a full data set, or on a grouped
+        data set.</p>
+{% highlight java %}
+Dataset<Tuple3<Integer, String, Double>> input = // [...]
+DataSet<Tuple3<Integer, String, Double>> output = input.aggregate(SUM, 0).and(MIN, 2);
+{% endhighlight %}
+	<p>You can also use short-hand syntax for minimum, maximum, and sum aggregations.</p>
+	{% highlight java %}
+	Dataset<Tuple3<Integer, String, Double>> input = // [...]
+DataSet<Tuple3<Integer, String, Double>> output = input.sum(0).andMin(2);
+	{% endhighlight %}
+      </td>
+    </tr>
+
+    </tr>
+      <td><strong>Join</strong></td>
+      <td>
+        Joins two data sets by creating all pairs of elements that are equal on their keys.
+        Optionally uses a JoinFunction to turn the pair of elements into a single element, or a
+        FlatJoinFunction to turn the pair of elements into arbitararily many (including none)
+        elements. See <a href="#specifying-keys">keys</a> on how to define join keys.
+{% highlight java %}
+result = input1.join(input2)
+               .where(0)       // key of the first input (tuple field 0)
+               .equalTo(1);    // key of the second input (tuple field 1)
+{% endhighlight %}
+        You can specify the way that the runtime executes the join via <i>Join Hints</i>. The hints
+        describe whether the join happens through partitioning or broadcasting, and whether it uses
+        a sort-based or a hash-based algorithm. Please refer to the 
+        <a href="dataset_transformations.html#join-algorithm-hints">Transformations Guide</a> for
+        a list of possible hints and an example.</br>
+        If no hint is specified, the system will try to make an estimate of the input sizes and
+        pick a the best strategy according to those estimates. 
+{% highlight java %}
+// This executes a join by broadcasting the first data set
+// using a hash table for the broadcasted data
+result = input1.join(input2, JoinHint.BROADCAST_HASH_FIRST)
+               .where(0).equalTo(1);
+{% endhighlight %}
+
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>CoGroup</strong></td>
+      <td>
+        <p>The two-dimensional variant of the reduce operation. Groups each input on one or more
+        fields and then joins the groups. The transformation function is called per pair of groups.
+        See <a href="#specifying-keys">keys</a> on how to define coGroup keys.</p>
+{% highlight java %}
+data1.coGroup(data2)
+     .where(0)
+     .equalTo(1)
+     .with(new CoGroupFunction<String, String, String>() {
+         public void coGroup(Iterable<String> in1, Iterable<String> in2, Collector<String> out) {
+           out.collect(...);
+         }
+      });
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Cross</strong></td>
+      <td>
+        <p>Builds the Cartesian product (cross product) of two inputs, creating all pairs of
+        elements. Optionally uses a CrossFunction to turn the pair of elements into a single
+        element</p>
+{% highlight java %}
+DataSet<Integer> data1 = // [...]
+DataSet<String> data2 = // [...]
+DataSet<Tuple2<Integer, String>> result = data1.cross(data2);
+{% endhighlight %}
+      </td>
+    </tr>
+    <tr>
+      <td><strong>Union</strong></td>
+      <td>
+        <p>Produces the union of two data sets. This operation happens implicitly if more than one
+        data set is used for a specific function input.</p>
+{% highlight java %}
+DataSet<String> data1 = // [...]
+DataSet<String> data2 = // [...]
+DataSet<String> result = data1.union(data2);
+{% endhighlight %}
+      </td>
+    </tr>
+    <tr>
+      <td><strong>Rebalance</strong></td>
+      <td>
+        <p>Evenly rebalances the parallel partitions of a data set to eliminate data skew. Only Map-like transformations may follow a rebalance transformation. (Java API Only)</p>
+{% highlight java %}
+DataSet<String> in = // [...]
+DataSet<String> result = in.rebalance()
+                           .map(new Mapper());
+{% endhighlight %}
+      </td>
+    </tr>
+    <tr>
+      <td><strong>Hash-Partition</strong></td>
+      <td>
+        <p>Hash-partitions a data set on a given key. Keys can be specified as key-selector functions or field position keys.</p>
+{% highlight java %}
+DataSet<Tuple2<String,Integer>> in = // [...]
+DataSet<Integer> result = in.partitionByHash(0)
+                            .mapPartition(new PartitionMapper());
+{% endhighlight %}
+      </td>
+    </tr>
+    <tr>
+      <td><strong>Sort Partition</strong></td>
+      <td>
+        <p>Locally sorts all partitions of a data set on a specified field in a specified order. 
+          Fields can be specified as tuple positions or field expressions. 
+          Sorting on multiple fields is done by chaining sortPartition() calls.</p>
+{% highlight java %}
+DataSet<Tuple2<String,Integer>> in = // [...]
+DataSet<Integer> result = in.sortPartition(1, Order.ASCENDING)
+                            .mapPartition(new PartitionMapper());
+{% endhighlight %}
+      </td>
+    </tr>
+    <tr>
+      <td><strong>First-n</strong></td>
+      <td>
+        <p>Returns the first n (arbitrary) elements of a data set. First-n can be applied on a regular data set, a grouped data set, or a grouped-sorted data set. Grouping keys can be specified as key-selector functions or field position keys.</p>
+{% highlight java %}
+DataSet<Tuple2<String,Integer>> in = // [...]
+// regular data set
+DataSet<Tuple2<String,Integer>> result1 = in.first(3);
+// grouped data set
+DataSet<Tuple2<String,Integer>> result2 = in.groupBy(0)
+                                            .first(3);
+// grouped-sorted data set
+DataSet<Tuple2<String,Integer>> result3 = in.groupBy(0)
+                                            .sortGroup(1, Order.ASCENDING)
+                                            .first(3);
+{% endhighlight %}
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+----------
+
+The following transformations are available on data sets of Tuples:
+
+<table class="table table-bordered">
+  <thead>
+    <tr>
+      <th class="text-left" style="width: 20%">Transformation</th>
+      <th class="text-center">Description</th>
+    </tr>
+  </thead>
+  <tbody>
+   <tr>
+      <td><strong>Project</strong></td>
+      <td>
+        <p>Selects a subset of fields from the tuples</p>
+{% highlight java %}
+DataSet<Tuple3<Integer, Double, String>> in = // [...]
+DataSet<Tuple2<String, Integer>> out = in.project(2,0);
+{% endhighlight %}
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+</div>
+<div data-lang="scala" markdown="1">
+<br />
+
+<table class="table table-bordered">
+  <thead>
+    <tr>
+      <th class="text-left" style="width: 20%">Transformation</th>
+      <th class="text-center">Description</th>
+    </tr>
+  </thead>
+
+  <tbody>
+    <tr>
+      <td><strong>Map</strong></td>
+      <td>
+        <p>Takes one element and produces one element.</p>
+{% highlight scala %}
+data.map { x => x.toInt }
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>FlatMap</strong></td>
+      <td>
+        <p>Takes one element and produces zero, one, or more elements. </p>
+{% highlight scala %}
+data.flatMap { str => str.split(" ") }
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>MapPartition</strong></td>
+      <td>
+        <p>Transforms a parallel partition in a single function call. The function get the partition
+        as an `Iterator` and can produce an arbitrary number of result values. The number of
+        elements in each partition depends on the degree-of-parallelism and previous operations.</p>
+{% highlight scala %}
+data.mapPartition { in => in map { (_, 1) } }
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Filter</strong></td>
+      <td>
+        <p>Evaluates a boolean function for each element and retains those for which the function
+        returns true.<br/>
+        <strong>IMPORTANT:</strong> The system assumes that the function does not modify the element on which the predicate is applied.
+        Violating this assumption can lead to incorrect results.</p>
+{% highlight scala %}
+data.filter { _ > 1000 }
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Reduce</strong></td>
+      <td>
+        <p>Combines a group of elements into a single element by repeatedly combining two elements
+        into one. Reduce may be applied on a full data set, or on a grouped data set.</p>
+{% highlight scala %}
+data.reduce { _ + _ }
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>ReduceGroup</strong></td>
+      <td>
+        <p>Combines a group of elements into one or more elements. ReduceGroup may be applied on a
+        full data set, or on a grouped data set.</p>
+{% highlight scala %}
+data.reduceGroup { elements => elements.sum }
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Aggregate</strong></td>
+      <td>
+        <p>Aggregates a group of values into a single value. Aggregation functions can be thought of
+        as built-in reduce functions. Aggregate may be applied on a full data set, or on a grouped
+        data set.</p>
+{% highlight scala %}
+val input: DataSet[(Int, String, Double)] = // [...]
+val output: DataSet[(Int, String, Doublr)] = input.aggregate(SUM, 0).aggregate(MIN, 2);
+{% endhighlight %}
+  <p>You can also use short-hand syntax for minimum, maximum, and sum aggregations.</p>
+{% highlight scala %}
+val input: DataSet[(Int, String, Double)] = // [...]
+val output: DataSet[(Int, String, Doublr)] = input.sum(0).min(2)
+{% endhighlight %}
+      </td>
+    </tr>
+
+    </tr>
+      <td><strong>Join</strong></td>
+      <td>
+        Joins two data sets by creating all pairs of elements that are equal on their keys.
+        Optionally uses a JoinFunction to turn the pair of elements into a single element, or a
+        FlatJoinFunction to turn the pair of elements into arbitararily many (including none)
+        elements. See <a href="#specifying-keys">keys</a> on how to define join keys.
+{% highlight scala %}
+// In this case tuple fields are used as keys. "0" is the join field on the first tuple
+// "1" is the join field on the second tuple.
+val result = input1.join(input2).where(0).equalTo(1)
+{% endhighlight %}
+        You can specify the way that the runtime executes the join via <i>Join Hints</i>. The hints
+        describe whether the join happens through partitioning or broadcasting, and whether it uses
+        a sort-based or a hash-based algorithm. Please refer to the 
+        <a href="dataset_transformations.html#join-algorithm-hints">Transformations Guide</a> for
+        a list of possible hints and an example.</br>
+        If no hint is specified, the system will try to make an estimate of the input sizes and
+        pick a the best strategy according to those estimates.
+{% highlight scala %}
+// This executes a join by broadcasting the first data set
+// using a hash table for the broadcasted data
+val result = input1.join(input2, JoinHint.BROADCAST_HASH_FIRST)
+                   .where(0).equalTo(1)
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>CoGroup</strong></td>
+      <td>
+        <p>The two-dimensional variant of the reduce operation. Groups each input on one or more
+        fields and then joins the groups. The transformation function is called per pair of groups.
+        See <a href="#specifying-keys">keys</a> on how to define coGroup keys.</p>
+{% highlight scala %}
+data1.coGroup(data2).where(0).equalTo(1)
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Cross</strong></td>
+      <td>
+        <p>Builds the Cartesian product (cross product) of two inputs, creating all pairs of
+        elements. Optionally uses a CrossFunction to turn the pair of elements into a single
+        element</p>
+{% highlight scala %}
+val data1: DataSet[Int] = // [...]
+val data2: DataSet[String] = // [...]
+val result: DataSet[(Int, String)] = data1.cross(data2)
+{% endhighlight %}
+      </td>
+    </tr>
+    <tr>
+      <td><strong>Union</strong></td>
+      <td>
+        <p>Produces the union of two data sets.</p>
+{% highlight scala %}
+data.union(data2)
+{% endhighlight %}
+      </td>
+    </tr>
+    <tr>
+      <td><strong>Hash-Partition</strong></td>
+      <td>
+        <p>Hash-partitions a data set on a given key. Keys can be specified as key-selector functions, tuple positions
+        or case class fields.</p>
+{% highlight scala %}
+val in: DataSet[(Int, String)] = // [...]
+val result = in.partitionByHash(0).mapPartition { ... }
+{% endhighlight %}
+      </td>
+    </tr>
+    </tr>
+    <tr>
+      <td><strong>Sort Partition</strong></td>
+      <td>
+        <p>Locally sorts all partitions of a data set on a specified field in a specified order. 
+          Fields can be specified as tuple positions or field expressions. 
+          Sorting on multiple fields is done by chaining sortPartition() calls.</p>
+{% highlight scala %}
+val in: DataSet[(Int, String)] = // [...]
+val result = in.sortPartition(1, Order.ASCENDING).mapPartition { ... }
+{% endhighlight %}
+      </td>
+    </tr>
+    <tr>
+      <td><strong>First-n</strong></td>
+      <td>
+        <p>Returns the first n (arbitrary) elements of a data set. First-n can be applied on a regular data set, a grouped data set, or a grouped-sorted data set. Grouping keys can be specified as key-selector functions,
+        tuple positions or case class fields.</p>
+{% highlight scala %}
+val in: DataSet[(Int, String)] = // [...]
+// regular data set
+val result1 = in.first(3)
+// grouped data set
+val result2 = in.groupBy(0).first(3)
+// grouped-sorted data set
+val result3 = in.groupBy(0).sortGroup(1, Order.ASCENDING).first(3)
+{% endhighlight %}
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+</div>
+</div>
+
+The [parallelism](#parallel-execution) of a transformation can be defined by `setParallelism(int)` while
+`name(String)` assigns a custom name to a transformation which is helpful for debugging. The same is
+possible for [Data Sources](#data-sources) and [Data Sinks](#data-sinks).
+
+[Back to Top](#top)
+
+
+Specifying Keys
+-------------
+
+
+
+Some transformations (join, coGroup) require that a key is defined on
+its argument DataSets, and other transformations (Reduce, GroupReduce,
+Aggregate) allow that the DataSet is grouped on a key before they are
+applied.
+
+A DataSet is grouped as
+{% highlight java %}
+DataSet<...> input = // [...]
+DataSet<...> reduced = input
+	.groupBy(/*define key here*/)
+	.reduceGroup(/*do something*/);
+{% endhighlight %}
+
+The data model of Flink is not based on key-value pairs. Therefore,
+you do not need to physically pack the data set types into keys and
+values. Keys are "virtual": they are defined as functions over the
+actual data to guide the grouping operator.
+
+### Define keys for Tuples
+{:.no_toc}
+
+The simplest case is grouping a data set of Tuples on one or more
+fields of the Tuple:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+DataSet<Tuple3<Integer,String,Long>> input = // [...]
+DataSet<Tuple3<Integer,String,Long> grouped = input
+	.groupBy(0)
+	.reduceGroup(/*do something*/);
+{% endhighlight %}
+
+The data set is grouped on the first field of the tuples (the one of
+Integer type). The GroupReduce function will thus receive groups of tuples with
+the same value in the first field.
+
+{% highlight java %}
+DataSet<Tuple3<Integer,String,Long>> input = // [...]
+DataSet<Tuple3<Integer,String,Long> grouped = input
+	.groupBy(0,1)
+	.reduce(/*do something*/);
+{% endhighlight %}
+
+The data set is grouped on the composite key consisting of the first and the
+second field. Therefore, the GroupReduce function will receive groups
+with the same value for both fields.
+
+A note on nested Tuples: If you have a DataSet with a nested tuple, such as:
+
+{% highlight java %}
+DataSet<Tuple3<Tuple2<Integer, Float>,String,Long>> ds;
+{% endhighlight %}
+
+Specifying `groupBy(0)` will cause the system to use the full `Tuple2` as a key (with the Integer and Float being the key). If you want to "navigate" into the nested `Tuple2`, you have to use field expression keys which are explained below.
+
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+val input: DataSet[(Int, String, Long)] = // [...]
+val grouped = input
+  .groupBy(0)
+  .reduceGroup(/*do something*/)
+{% endhighlight %}
+
+The data set is grouped on the first field of the tuples (the one of
+Integer type). The GroupReduce function will thus receive groups of tuples with
+the same value in the first field.
+
+{% highlight scala %}
+val input: DataSet[(Int, String, Long)] = // [...]
+val grouped = input
+  .groupBy(0,1)
+  .reduce(/*do something*/)
+{% endhighlight %}
+
+The data set is grouped on the composite key consisting of the first and the
+second field. Therefore, the GroupReduce function will receive groups
+with the same value for both fields.
+
+A note on nested Tuples: If you have a DataSet with a nested tuple, such as:
+
+{% highlight scala %}
+val ds: DataSet[((Int, Float), String, Long)]
+{% endhighlight %}
+
+Specifying `groupBy(0)` will cause the system to use the full `Tuple2` as a key (with the Int and
+Float being the key). If you want to "navigate" into the nested `Tuple2`, you have to use field expression keys which are explained below.
+
+</div>
+</div>
+
+### Define keys using Field Expressions
+{:.no_toc}
+
+Starting from release 0.7-incubating, you can use String-based field expressions to reference nested fields and define keys for grouping, sorting, joining, or coGrouping. In addition, field expressions can be used to define [semantic function annotations](#semantic-annotations).
+
+Field expressions make it very easy to select fields in (nested) composite types such as [Tuple](#tuples-and-case-classes) and [POJO](#pojos) types.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+In the example below, we have a `WC` POJO with two fields "word" and "count". To group by the field `word`, we just pass its name to the `groupBy()` function.
+{% highlight java %}
+// some ordinary POJO (Plain old Java Object)
+public class WC {
+  public String word; 
+  public int count;
+}
+DataSet<WC> words = // [...]
+DataSet<WC> wordCounts = words.groupBy("word").reduce(/*do something*/);
+{% endhighlight %}
+
+**Field Expression Syntax**:
+
+- Select POJO fields by their field name. For example `"user"` refers to the "user" field of a POJO type.
+
+- Select Tuple fields by their field name or 0-offset field index. For example `"f0"` and `"5"` refer to the first and sixth field of a Java Tuple type, respectively.
+
+- You can select nested fields in POJOs and Tuples. For example `"user.zip"` refers to the "zip" field of a POJO which is stored in the "user" field of a POJO type. Arbitrary nesting and mixing of POJOs and Tuples is supported such as `"f1.user.zip"` or `"user.f3.1.zip"`.
+
+- You can select the full type using the `"*"` wildcard expressions. This does also work for types which are not Tuple or POJO types.
+
+**Field Expression Example**:
+
+{% highlight java %}
+public static class WC {
+  public ComplexNestedClass complex; //nested POJO
+  private int count;
+  // getter / setter for private field (count)
+  public int getCount() {
+    return count;
+  }
+  public void setCount(int c) {
+    this.count = c;
+  }
+}
+public static class ComplexNestedClass {
+  public Integer someNumber;
+  public float someFloat;
+  public Tuple3<Long, Long, String> word;
+  public IntWritable hadoopCitizen;
+}
+{% endhighlight %}
+
+These are valid field expressions for the example code above:
+
+- `"count"`: The count field in the `WC` class.
+
+- `"complex"`: Recursively selects all fields of the field complex of POJO type `ComplexNestedClass`.
+
+- `"complex.word.f2"`: Selects the last field of the nested `Tuple3`.
+
+- `"complex.hadoopCitizen"`: Selects the Hadoop `IntWritable` type.
+
+</div>
+<div data-lang="scala" markdown="1">
+
+In the example below, we have a `WC` POJO with two fields "word" and "count". To group by the field `word`, we just pass its name to the `groupBy()` function.
+{% highlight java %}
+// some ordinary POJO (Plain old Java Object)
+class WC(var word: String, var count: Int) {
+  def this() { this("", 0L) }
+}
+val words: DataSet[WC] = // [...]
+val wordCounts = words.groupBy("word").reduce(/*do something*/)
+
+// or, as a case class, which is less typing
+case class WC(word: String, count: Int)
+val words: DataSet[WC] = // [...]
+val wordCounts = words.groupBy("word").reduce(/*do something*/)
+{% endhighlight %}
+
+**Field Expression Syntax**:
+
+- Select POJO fields by their field name. For example `"user"` refers to the "user" field of a POJO type.
+
+- Select Tuple fields by their 1-offset field name or 0-offset field index. For example `"_1"` and `"5"` refer to the first and sixth field of a Scala Tuple type, respectively.
+
+- You can select nested fields in POJOs and Tuples. For example `"user.zip"` refers to the "zip" field of a POJO which is stored in the "user" field of a POJO type. Arbitrary nesting and mixing of POJOs and Tuples is supported such as `"_2.user.zip"` or `"user._4.1.zip"`.
+
+- You can select the full type using the `"_"` wildcard expressions. This does also work for types which are not Tuple or POJO types.
+
+**Field Expression Example**:
+
+{% highlight scala %}
+class WC(var complex: ComplexNestedClass, var count: Int) {
+  def this() { this(null, 0) }
+}
+
+class ComplexNestedClass(
+    var someNumber: Int,
+    someFloat: Float,
+    word: (Long, Long, String),
+    hadoopCitizen: IntWritable) {
+  def this() { this(0, 0, (0, 0, ""), new IntWritable(0)) }
+}
+{% endhighlight %}
+
+These are valid field expressions for the example code above:
+
+- `"count"`: The count field in the `WC` class.
+
+- `"complex"`: Recursively selects all fields of the field complex of POJO type `ComplexNestedClass`.
+
+- `"complex.word._3"`: Selects the last field of the nested `Tuple3`.
+
+- `"complex.hadoopCitizen"`: Selects the Hadoop `IntWritable` type.
+
+</div>
+</div>
+
+### Define keys using Key Selector Functions
+{:.no_toc}
+
+An additional way to define keys are "key selector" functions. A key selector function 
+takes a single dataset element as input and returns the key for the element. The key can be of any type and be derived from arbitrary computations. 
+
+The following example shows a key selector function that simply returns the field of an object:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+// some ordinary POJO
+public class WC {public String word; public int count;}
+DataSet<WC> words = // [...]
+DataSet<WC> wordCounts = words
+                         .groupBy(
+                           new KeySelector<WC, String>() {
+                             public String getKey(WC wc) { return wc.word; }
+                           })
+                         .reduce(/*do something*/);
+{% endhighlight %}
+
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+// some ordinary case class
+case class WC(word: String, count: Int)
+val words: DataSet[WC] = // [...]
+val wordCounts = words
+  .groupBy( _.word ).reduce(/*do something*/)
+{% endhighlight %}
+</div>
+</div>
+
+
+[Back to top](#top)
+
+
+Passing Functions to Flink
+--------------------------
+
+Operations require user-defined functions. This section lists several ways for doing this.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+#### Implementing an interface
+
+The most basic way is to implement one of the provided interfaces:
+
+{% highlight java %}
+class MyMapFunction implements MapFunction<String, Integer> {
+  public Integer map(String value) { return Integer.parseInt(value); }
+});
+data.map (new MyMapFunction());
+{% endhighlight %}
+
+#### Anonymous classes
+
+You can pass a function as an anonmymous class:
+{% highlight java %}
+data.map(new MapFunction<String, Integer> () {
+  public Integer map(String value) { return Integer.parseInt(value); }
+});
+{% endhighlight %}
+
+#### Java 8 Lambdas
+
+Flink also supports Java 8 Lambdas in the Java API. Please see the full [Java 8 Guide](java8_programming_guide.html).
+
+{% highlight java %}
+DataSet<String> data = // [...]
+data.filter(s -> s.startsWith("http://"));
+{% endhighlight %}
+
+{% highlight java %}
+DataSet<Integer> data = // [...]
+data.reduce((i1,i2) -> i1 + i2);
+{% endhighlight %}
+
+#### Rich functions
+
+All transformations that take as argument a user-defined function can
+instead take as argument a *rich* function. For example, instead of
+
+{% highlight java %}
+class MyMapFunction implements MapFunction<String, Integer> {
+  public Integer map(String value) { return Integer.parseInt(value); }
+});
+{% endhighlight %}
+
+you can write
+
+{% highlight java %}
+class MyMapFunction extends RichMapFunction<String, Integer> {
+  public Integer map(String value) { return Integer.parseInt(value); }
+});
+{% endhighlight %}
+
+and pass the function as usual to a `map` transformation:
+
+{% highlight java %}
+data.map(new MyMapFunction());
+{% endhighlight %}
+
+Rich functions can also be defined as an anonymous class:
+{% highlight java %}
+data.map (new RichMapFunction<String, Integer>() {
+  public Integer map(String value) { return Integer.parseInt(value); }
+});
+{% endhighlight %}
+
+</div>
+<div data-lang="scala" markdown="1">
+
+
+#### Lambda Functions
+
+As already seen in previous examples all operations accept lambda functions for describing
+the operation:
+{% highlight scala %}
+val data: DataSet[String] = // [...]
+data.filter { _.startsWith("http://") }
+{% endhighlight %}
+
+{% highlight scala %}
+val data: DataSet[Int] = // [...]
+data.reduce { (i1,i2) => i1 + i2 }
+// or
+data.reduce { _ + _ }
+{% endhighlight %}
+
+#### Rich functions
+
+All transformations that take as argument a lambda function can
+instead take as argument a *rich* function. For example, instead of
+
+{% highlight scala %}
+data.map { x => x.toInt }
+{% endhighlight %}
+
+you can write
+
+{% highlight scala %}
+class MyMapFunction extends RichMapFunction[String, Int] {
+  def map(in: String):Int = { in.toInt }
+})
+{% endhighlight %}
+
+and pass the function to a `map` transformation:
+
+{% highlight scala %}
+data.map(new MyMapFunction())
+{% endhighlight %}
+
+Rich functions can also be defined as an anonymous class:
+{% highlight scala %}
+data.map (new RichMapFunction[String, Int] {
+  def map(in: String):Int = { in.toInt }
+})
+{% endhighlight %}
+</div>
+
+</div>
+
+Rich functions provide, in addition to the user-defined function (map,
+reduce, etc), four methods: `open`, `close`, `getRuntimeContext`, and
+`setRuntimeContext`. These are useful for creating and finalizing
+local state, accessing broadcast variables (see
+[Broadcast Variables](#broadcast-variables), and for accessing runtime
+information such as accumulators and counters (see
+[Accumulators and Counters](#accumulators--counters), and information
+on iterations (see [Iterations](iterations.html)).
+
+In particular for the `reduceGroup` transformation, using a rich
+function is the only way to define an optional `combine` function. See
+the
+[transformations documentation](dataset_transformations.html)
+for a complete example.
+
+[Back to top](#top)
+
+
+Data Types
+----------
+
+Flink places some restrictions on the type of elements that are used in DataSets and as results
+of transformations. The reason for this is that the system analyzes the types to determine
+efficient execution strategies.
+
+There are six different categories of data types:
+
+1. **Java Tuples** and **Scala Case Classes**
+2. **Java POJOs**
+3. **Primitive Types**
+4. **Regular Classes**
+5. **Values**
+6. **Hadoop Writables**
+
+#### Tuples and Case Classes
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+Tuples are composite types that contain a fixed number of fields with various types. 
+The Java API provides classes from `Tuple1` up to `Tuple25`. Every field of a tuple
+can be an arbitrary Flink type including further tuples, resulting in nested tuples. Fields of a
+tuple can be accessed directly using the field's name as `tuple.f4`, or using the generic getter method
+`tuple.getField(int position)`. The field indicies start at 0. Note that this stands in contrast
+to the Scala tuples, but it is more consistent with Java's general indexing.
+
+{% highlight java %}
+DataSet<Tuple2<String, Integer>> wordCounts = env.fromElements(
+    new Tuple2<String, Integer>("hello", 1),
+    new Tuple2<String, Integer>("world", 2));
+
+wordCounts.map(new MapFunction<Tuple2<String, Integer>, Integer>() {
+    @Override
+    public String map(Tuple2<String, Integer> value) throws Exception {
+        return value.f1;
+    }
+});
+{% endhighlight %}
+
+When grouping, sorting, or joining a data set of tuples, keys can be specified as field positions or field expressions. See the [key definition section](#specifying-keys) or [data transformation section](#transformations) for details.
+
+{% highlight java %}
+wordCounts
+    .groupBy(0) // also valid .groupBy("f0")
+    .reduce(new MyReduceFunction());
+{% endhighlight %}
+
+</div>
+<div data-lang="scala" markdown="1">
+
+Scala case classes (and Scala tuples which are a special case of case classes), are composite types that contain a fixed number of fields with various types. Tuple fields are addressed by their 1-offset names such as `_1` for the first field. Case class fields are accessed by their name.
+
+{% highlight scala %}
+case class WordCount(word: String, count: Int)
+val input = env.fromElements(
+    WordCount("hello", 1),
+    WordCount("world", 2)) // Case Class Data Set
+
+input.groupBy("word").reduce(...) // group by field expression "word"
+
+val input2 = env.fromElements(("hello", 1), ("world", 2)) // Tuple2 Data Set
+
+input2.groupBy(0, 1).reduce(...) // group by field positions 0 and 1
+{% endhighlight %}
+
+When grouping, sorting, or joining a data set of tuples, keys can be specified as field positions or field expressions. See the [key definition section](#specifying-keys) or [data transformation section](#transformations) for details.
+
+</div>
+</div>
+
+#### POJOs
+
+Java and Scala classes are treated by Flink as a special POJO data type if they fulfill the following requirements:
+
+- The class must be public.
+
+- It must have a public constructor without arguments (default constructor).
+
+- All fields are either public or must be accessible through getter and setter functions. For a field called `foo` the getter and setter methods must be named `getFoo()` and `setFoo()`.
+
+- The type of a field must be supported by Flink. At the moment, Flink uses [Avro](http://avro.apache.org) to serialize arbitrary objects (such as `Date`).
+
+Flink analyzes the structure of POJO types, i.e., it learns about the fields of a POJO. As a result POJO types are easier to use than general types. Moreover, they Flink can process POJOs more efficiently than general types.  
+
+The following example shows a simple POJO with two public fields.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+public class WordWithCount {
+
+    public String word;
+    public int count;
+
+    public WordCount() {}
+
+    public WordCount(String word, int count) {
+        this.word = word;
+        this.count = count;
+    }
+}
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+class WordWithCount(var word: String, var count: Int) {
+    def this() {
+      this(null, -1)
+    }
+}
+{% endhighlight %}
+</div>
+</div>
+
+When grouping, sorting, or joining a data set of POJO types, keys can be specified with field expressions. See the [key definition section](#specifying-keys) or [data transformation section](#transformations) for details.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+wordCounts
+    .groupBy("word")                    // group by field expression "word"
+    .reduce(new MyReduceFunction());
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+wordCounts groupBy { _.word } reduce(new MyReduceFunction())
+{% endhighlight %}
+</div>
+</div>
+
+#### Primitive Types
+
+Flink supports all Java and Scala primitive types such as `Integer`, `String`, and `Double`. 
+
+#### General Class Types
+
+Flink supports most Java and Scala classes (API and custom). 
+Restrictions apply to classes containing fields that cannot be serialized, like file pointers, I/O streams, or other native
+resources. Classes that follow the Java Beans conventions work well in general.
+
+All classes that are not identified as POJO types (see POJO requirements above) are handled by Flink as general class types. 
+Flink treats these data types as black boxes and is not able to access their their content (i.e., for efficient sorting). General types are de/serialized using the serialization framework [Kryo](https://github.com/EsotericSoftware/kryo). 
+
+When grouping, sorting, or joining a data set of generic types, keys must be specified with key selector functions. See the [key definition section](#specifying-keys) or [data transformation section](#transformations) for details.
+
+
+#### Values
+
+*Value* types describe their serialization and deserialization manually. Instead of going through a
+general purpose serialization framework, they provide custom code for those operations by means of
+implementing the `org.apache.flinktypes.Value` interface with the methods `read` and `write`. Using
+a Value type is reasonable when general purpose serialization would be highly inefficient. An
+example would be a data type that implements a sparse vector of elements as an array. Knowing that
+the array is mostly zero, one can use a special encoding for the non-zero elements, while the
+general purpose serialization would simply write all array elements.
+
+The `org.apache.flinktypes.CopyableValue` interface supports manual internal cloning logic in a
+similar way.
+
+Flink comes with pre-defined Value types that correspond to basic data types. (`ByteValue`,
+`ShortValue`, `IntValue`, `LongValue`, `FloatValue`, `DoubleValue`, `StringValue`, `CharValue`,
+`BooleanValue`). These Value types act as mutable variants of the basic data types: Their value can
+be altered, allowing programmers to reuse objects and take pressure off the garbage collector.
+
+
+#### Hadoop Writables
+
+You can use types that implement the `org.apache.hadoop.Writable` interface. The serialization logic
+defined in the `write()`and `readFields()` methods will be used for serialization.
+
+
+#### Type Erasure & Type Inferrence
+
+*Note: This Section is only relevant for Java.*
+
+The Java compiler throws away much of the generic type information after compilation. This is
+known as *type erasure* in Java. It means that at runtime, an instance of an object does not know
+its generic type any more. For example, instances of `DataSet<String>` and `DataSet<Long>` look the
+same to the JVM.
+
+Flink requires type information at the time when it prepares the program for execution (when the
+main method of the program is called). The Flink Java API tries to reconstruct the type information
+that was thrown away in various ways and store it explicitly in the data sets and operators. You can
+retrieve the type via `DataSet.getType()`. The method returns an instance of `TypeInformation`,
+which is Flink's internal way of representing types.
+
+The type inference has its limits and needs the "cooperation" of the programmer in some cases.
+Examples for that are methods that create data sets from collections, such as
+`ExecutionEnvironment.fromCollection(),` where you can pass an argument that describes the type. But
+also generic functions like `MapFunction<I, O>` may need extra type information.
+
+The
+{% gh_link /flink-java/src/main/java/org/apache/flink/api/java/typeutils/ResultTypeQueryable.java "ResultTypeQueryable" %}
+interface can be implemented by input formats and functions to tell the API
+explicitly about their return type. The *input types* that the functions are invoked with can
+usually be inferred by the result types of the previous operations.
+
+[Back to top](#top)
+
+
+Data Sources
+------------
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+Data sources create the initial data sets, such as from files or from Java collections. The general
+mechanism of creating data sets is abstracted behind an
+{% gh_link /flink-core/src/main/java/org/apache/flink/api/common/io/InputFormat.java "InputFormat"%}.
+Flink comes
+with several built-in formats to create data sets from common file formats. Many of them have
+shortcut methods on the *ExecutionEnvironment*.
+
+File-based:
+
+- `readTextFile(path)` / `TextInputFormat` - Reads files line wise and returns them as Strings.
+
+- `readTextFileWithValue(path)` / `TextValueInputFormat` - Reads files line wise and returns them as
+  StringValues. StringValues are mutable strings.
+
+- `readCsvFile(path)` / `CsvInputFormat` - Parses files of comma (or another char) delimited fields.
+  Returns a DataSet of tuples or POJOs. Supports the basic java types and their Value counterparts as field
+  types.
+
+- `readFileOfPrimitives(path, Class)` / `PrimitiveInputFormat` - Parses files of new-line (or another char sequence) delimited primitive data types such as `String` or `Integer`. 
+
+Collection-based:
+
+- `fromCollection(Collection)` - Creates a data set from the Java Java.util.Collection. All elements
+  in the collection must be of the same type.
+
+- `fromCollection(Iterator, Class)` - Creates a data set from an iterator. The class specifies the
+  data type of the elements returned by the iterator.
+
+- `fromElements(T ...)` - Creates a data set from the given sequence of objects. All objects must be
+  of the same type.
+
+- `fromParallelCollection(SplittableIterator, Class)` - Creates a data set from an iterator, in
+  parallel. The class specifies the data type of the elements returned by the iterator.
+
+- `generateSequence(from, to)` - Generates the squence of numbers in the given interval, in
+  parallel.
+
+Generic:
+
+- `readFile(inputFormat, path)` / `FileInputFormat` - Accepts a file input format.
+
+- `createInput(inputFormat)` / `InputFormat` - Accepts a generic input format.
+
+**Examples**
+
+{% highlight java %}
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+// read text file from local files system
+DataSet<String> localLines = env.readTextFile("file:///path/to/my/textfile");
+
+// read text file from a HDFS running at nnHost:nnPort
+DataSet<String> hdfsLines = env.readTextFile("hdfs://nnHost:nnPort/path/to/my/textfile");
+
+// read a CSV file with three fields
+DataSet<Tuple3<Integer, String, Double>> csvInput = env.readCsvFile("hdfs:///the/CSV/file")
+	                       .types(Integer.class, String.class, Double.class);
+
+// read a CSV file with five fields, taking only two of them
+DataSet<Tuple2<String, Double>> csvInput = env.readCsvFile("hdfs:///the/CSV/file")
+                               .includeFields("10010")  // take the first and the fourth field
+	                       .types(String.class, Double.class);
+
+// read a CSV file with three fields into a POJO (Person.class) with corresponding fields
+DataSet<Person>> csvInput = env.readCsvFile("hdfs:///the/CSV/file")
+                         .pojoType(Person.class, "name", "age", "zipcode");                         
+
+// create a set from some given elements
+DataSet<String> value = env.fromElements("Foo", "bar", "foobar", "fubar");
+
+// generate a number sequence
+DataSet<Long> numbers = env.generateSequence(1, 10000000);
+
+// Read data from a relational database using the JDBC input format
+DataSet<Tuple2<String, Integer> dbData = 
+    env.createInput(
+      // create and configure input format
+      JDBCInputFormat.buildJDBCInputFormat()
+                     .setDrivername("org.apache.derby.jdbc.EmbeddedDriver")
+                     .setDBUrl("jdbc:derby:memory:persons")
+                     .setQuery("select name, age from persons")
+                     .finish(),
+      // specify type information for DataSet
+      new TupleTypeInfo(Tuple2.class, STRING_TYPE_INFO, INT_TYPE_INFO)
+    );
+
+// Note: Flink's program compiler needs to infer the data types of the data items which are returned
+// by an InputFormat. If this information cannot be automatically inferred, it is necessary to
+// manually provide the type information as shown in the examples above.
+{% endhighlight %}
+
+#### Configuring CSV Parsing
+
+Flink offers a number of configuration options for CSV parsing:
+
+- `types(Class ... types)` specifies the types of the fields to parse. **It is mandatory to configure the types of the parsed fields.**
+
+- `lineDelimiter(String del)` specifies the delimiter of individual records. The default line delimiter is the new-line character `'\n'`.
+
+- `fieldDelimiter(String del)` specifies the delimiter that separates fields of a record. The default field delimiter is the comma character `','`.
+
+- `includeFields(boolean ... flag)`, `includeFields(String mask)`, or `includeFields(long bitMask)` defines which fields to read from the input file (and which to ignore). By default the first *n* fields (as defined by the number of types in the `types()` call) are parsed.
+
+- `parseQuotedStrings(char quoteChar)` enables quoted string parsing. Strings are parsed as quoted strings if the first character of the string field is the quote character (leading or tailing whitespaces are *not* trimmed). Field delimiters within quoted strings are ignored. Quoted string parsing fails if the last character of a quoted string field is not the quote character. If quoted string parsing is enabled and the first character of the field is *not* the quoting string, the string is parsed as unquoted string. By default, quoted string parsing is disabled.
+
+- `ignoreComments(String commentPrefix)` specifies a comment prefix. All lines that start with the specified comment prefix are not parsed and ignored. By default, no lines are ignored.
+
+- `ignoreInvalidLines()` enables lenient parsing, i.e., lines that cannot be correctly parsed are ignored. By default, lenient parsing is disabled and invalid lines raise an exception.
+
+- `ignoreFirstLine()` configures the InputFormat to ignore the first line of the input file. By default no line is ignored.
+
+
+#### Recursive Traversal of the Input Path Directory
+
+For file-based inputs, when the input path is a directory, nested files are not enumerated by default. Instead, only the files inside the base directory are read, while nested files are ignored. Recursive enumeration of nested files can be enabled through the `recursive.file.enumeration` configuration parameter, like in the following example.
+
+{% highlight java %}
+// enable recursive enumeration of nested input files
+ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+// create a configuration object
+Configuration parameters = new Configuration();
+
+// set the recursive enumeration parameter
+parameters.setBoolean("recursive.file.enumeration", true);
+
+// pass the configuration to the data source
+DataSet<String> logs = env.readTextFile("file:///path/with.nested/files")
+			  .withParameters(parameters);
+{% endhighlight %}
+
+</div>
+<div data-lang="scala" markdown="1">
+
+Data sources create the initial data sets, such as from files or from Java collections. The general
+mechanism of creating data sets is abstracted behind an
+{% gh_link /flink-core/src/main/java/org/apache/flink/api/common/io/InputFormat.java "InputFormat"%}.
+Flink comes
+with several built-in formats to create data sets from common file formats. Many of them have
+shortcut methods on the *ExecutionEnvironment*.
+
+File-based:
+
+- `readTextFile(path)` / `TextInputFormat` - Reads files line wise and returns them as Strings.
+
+- `readTextFileWithValue(path)` / `TextValueInputFormat` - Reads files line wise and returns them as
+  StringValues. StringValues are mutable strings.
+
+- `readCsvFile(path)` / `CsvInputFormat` - Parses files of comma (or another char) delimited fields.
+  Returns a DataSet of tuples, case class objects, or POJOs. Supports the basic java types and their Value counterparts as field
+  types.
+
+Collection-based:
+
+- `fromCollection(Seq)` - Creates a data set from a Seq. All elements
+  in the collection must be of the same type.
+
+- `fromCollection(Iterator)` - Creates a data set from an Iterator. The class specifies the
+  data type of the elements returned by the iterator.
+
+- `fromElements(elements: _*)` - Creates a data set from the given sequence of objects. All objects
+  must be of the same type.
+
+- `fromParallelCollection(SplittableIterator)` - Creates a data set from an iterator, in
+  parallel. The class specifies the data type of the elements returned by the iterator.
+
+- `generateSequence(from, to)` - Generates the squence of numbers in the given interval, in
+  parallel.
+
+Generic:
+
+- `readFile(inputFormat, path)` / `FileInputFormat` - Accepts a file input format.
+
+- `createInput(inputFormat)` / `InputFormat` - Accepts a generic input format.
+
+**Examples**
+
+{% highlight scala %}
+val env  = ExecutionEnvironment.getExecutionEnvironment
+
+// read text file from local files system
+val localLines = env.readTextFile("file:///path/to/my/textfile")
+
+// read text file from a HDFS running at nnHost:nnPort
+val hdfsLines = env.readTextFile("hdfs://nnHost:nnPort/path/to/my/textfile")
+
+// read a CSV file with three fields
+val csvInput = env.readCsvFile[(Int, String, Double)]("hdfs:///the/CSV/file")
+
+// read a CSV file with five fields, taking only two of them
+val csvInput = env.readCsvFile[(String, Double)](
+  "hdfs:///the/CSV/file",
+  includedFields = Array(0, 3)) // take the first and the fourth field
+
+// CSV input can also be used with Case Classes
+case class MyCaseClass(str: String, dbl: Double)
+val csvInput = env.readCsvFile[MyCaseClass](
+  "hdfs:///the/CSV/file",
+  includedFields = Array(0, 3)) // take the first and the fourth field
+
+// read a CSV file with three fields into a POJO (Person) with corresponding fields
+val csvInput = env.readCsvFile[Person](
+  "hdfs:///the/CSV/file",
+  pojoFields = Array("name", "age", "zipcode"))
+
+// create a set from some given elements
+val values = env.fromElements("Foo", "bar", "foobar", "fubar")
+
+// generate a number sequence
+val numbers = env.generateSequence(1, 10000000);
+{% endhighlight %}
+
+
+#### Configuring CSV Parsing
+
+Flink offers a number of configuration options for CSV parsing:
+
+- `lineDelimiter: String` specifies the delimiter of individual records. The default line delimiter is the new-line character `'\n'`.
+
+- `fieldDelimiter: String` specifies the delimiter that separates fields of a record. The default field delimiter is the comma character `','`.
+
+- `includeFields: Array[Int]` defines which fields to read from the input file (and which to ignore). By default the first *n* fields (as defined by the number of types in the `types()` call) are parsed.
+
+- `pojoFields: Array[String]` specifies the fields of a POJO that are mapped to CSV fields. Parsers for CSV fields are automatically initialized based on the type and order of the POJO fields.
+
+- `parseQuotedStrings: Character` enables quoted string parsing. Strings are parsed as quoted strings if the first character of the string field is the quote character (leading or tailing whitespaces are *not* trimmed). Field delimiters within quoted strings are ignored. Quoted string parsing fails if the last character of a quoted string field is not the quote character. If quoted string parsing is enabled and the first character of the field is *not* the quoting string, the string is parsed as unquoted string. By default, quoted string parsing is disabled.
+
+- `ignoreComments: String` specifies a comment prefix. All lines that start with the specified comment prefix are not parsed and ignored. By default, no lines are ignored.
+
+- `lenient: Boolean` enables lenient parsing, i.e., lines that cannot be correctly parsed are ignored. By default, lenient parsing is disabled and invalid lines raise an exception.
+
+- `ignoreFirstLine: Boolean` configures the InputFormat to ignore the first line of the input file. By default no line is ignored.
+
+#### Recursive Traversal of the Input Path Directory
+
+For file-based inputs, when the input path is a directory, nested files are not enumerated by default. Instead, only the files inside the base directory are read, while nested files are ignored. Recursive enumeration of nested files can be enabled through the `recursive.file.enumeration` configuration parameter, like in the following example.
+
+{% highlight scala %}
+// enable recursive enumeration of nested input files
+val env  = ExecutionEnvironment.getExecutionEnvironment
+
+// create a configuration object
+val parameters = new Configuration
+
+// set the recursive enumeration parameter
+parameters.setBoolean("recursive.file.enumeration", true)
+
+// pass the configuration to the data source
+env.readTextFile("file:///path/with.nested/files").withParameters(parameters)
+{% endhighlight %}
+
+</div>
+</div>
+[Back to top](#top)
+
+Data Sinks
+----------
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+Data sinks consume DataSets and are used to store or return them. Data sink operations are described
+using an
+{% gh_link /flink-core/src/main/java/org/apache/flink/api/common/io/OutputFormat.java "OutputFormat" %}.
+Flink comes with a variety of built-in output formats that are encapsulated behind operations on the
+DataSet:
+
+- `writeAsText()` / `TextOuputFormat` - Writes elements line-wise as Strings. The Strings are
+  obtained by calling the *toString()* method of each element.
+- `writeAsFormattedText()` / `TextOutputFormat` - Write elements line-wise as Strings. The Strings
+  are obtained by calling a user-defined *format()* method for each element.
+- `writeAsCsv(...)` / `CsvOutputFormat` - Writes tuples as comma-separated value files. Row and field
+  delimiters are configurable. The value for each field comes from the *toString()* method of the objects.
+- `print()` / `printToErr()` / `print(String msg)` / `printToErr(String msg)` - Prints the *toString()* value
+of each element on the standard out / strandard error stream. Optionally, a prefix (msg) can be provided which is
+prepended to the output. This can help to distinguish between different calls to *print*. If the parallelism is
+greater than 1, the output will also be prepended with the identifier of the task which produced the output.
+- `write()` / `FileOutputFormat` - Method and base class for custom file outputs. Supports
+  custom object-to-bytes conversion.
+- `output()`/ `OutputFormat` - Most generic output method, for data sinks that are not file based
+  (such as storing the result in a database).
+
+A DataSet can be input to multiple operations. Programs can write or print a data set and at the
+same time run additional transformations on them.
+
+**Examples**
+
+Standard data sink methods:
+
+{% highlight java %}
+// text data 
+DataSet<String> textData = // [...]
+
+// write DataSet to a file on the local file system
+textData.writeAsText("file:///my/result/on/localFS");
+
+// write DataSet to a file on a HDFS with a namenode running at nnHost:nnPort
+textData.writeAsText("hdfs://nnHost:nnPort/my/result/on/localFS");
+
+// write DataSet to a file and overwrite the file if it exists
+textData.writeAsText("file:///my/result/on/localFS", WriteMode.OVERWRITE);
+
+// tuples as lines with pipe as the separator "a|b|c"
+DataSet<Tuple3<String, Integer, Double>> values = // [...]
+values.writeAsCsv("file:///path/to/the/result/file", "\n", "|");
+
+// this writes tuples in the text formatting "(a, b, c)", rather than as CSV lines
+values.writeAsText("file:///path/to/the/result/file");
+
+// this wites values as strings using a user-defined TextFormatter object
+values.writeAsFormattedText("file:///path/to/the/result/file",
+    new TextFormatter<Tuple2<Integer, Integer>>() {
+        public String format (Tuple2<Integer, Integer> value) {
+            return value.f1 + " - " + value.f0;
+        }
+    });
+{% endhighlight %}
+
+Using a custom output format:
+
+{% highlight java %}
+DataSet<Tuple3<String, Integer, Double>> myResult = [...]
+
+// write Tuple DataSet to a relational database
+myResult.output(
+    // build and configure OutputFormat
+    JDBCOutputFormat.buildJDBCOutputFormat()
+                    .setDrivername("org.apache.derby.jdbc.EmbeddedDriver")
+                    .setDBUrl("jdbc:derby:memory:persons")
+                    .setQuery("insert into persons (name, age, height) values (?,?,?)")
+                    .finish()
+    );
+{% endhighlight %}
+
+#### Locally Sorted Output
+
+The output of a data sink can be locally sorted on specified fields in specified orders using [tuple field positions](#define-keys-for-tuples) or [field expressions](#define-keys-using-field-expressions). This works for every output format.
+
+The following examples show how to use this feature:
+
+{% highlight java %}
+
+DataSet<Tuple3<Integer, String, Double>> tData = // [...]
+DataSet<Tuple2<BookPojo, Double>> pData = // [...]
+DataSet<String> sData = // [...]
+
+// sort output on String field in ascending order
+tData.print().sortLocalOutput(1, Order.ASCENDING);
+
+// sort output on Double field in descending and Integer field in ascending order
+tData.print().sortLocalOutput(2, Order.DESCENDING).sortLocalOutput(0, Order.ASCENDING);
+
+// sort output on the "author" field of nested BookPojo in descending order
+pData.writeAsText(...).sortLocalOutput("f0.author", Order.DESCENDING);
+
+// sort output on the full tuple in ascending order
+tData.writeAsCsv(...).sortLocalOutput("*", Order.ASCENDING);
+
+// sort atomic type (String) output in descending order
+sData.writeAsText(...).sortLocalOutput("*", Order.DESCENDING);
+
+{% endhighlight %}
+
+Globally sorted output is not supported yet.
+
+</div>
+<div data-lang="scala" markdown="1">
+Data sinks consume DataSets and are used to store or return them. Data sink operations are described
+using an
+{% gh_link /flink-core/src/main/java/org/apache/flink/api/common/io/OutputFormat.java "OutputFormat" %}.
+Flink comes with a variety of built-in output formats that are encapsulated behind operations on the
+DataSet:
+
+- `writeAsText()` / `TextOuputFormat` - Writes elements line-wise as Strings. The Strings are
+  obtained by calling the *toString()* method of each element.
+- `writeAsCsv(...)` / `CsvOutputFormat` - Writes tuples as comma-separated value files. Row and field
+  delimiters are configurable. The value for each field comes from the *toString()* method of the objects.
+- `print()` / `printToErr()` - Prints the *toString()* value of each element on the
+  standard out / strandard error stream.
+- `write()` / `FileOutputFormat` - Method and base class for custom file outputs. Supports
+  custom object-to-bytes conversion.
+- `output()`/ `OutputFormat` - Most generic output method, for data sinks that are not file based
+  (such as storing the result in a database).
+
+A DataSet can be input to multiple operations. Programs can write or print a data set and at the
+same time run additional transformations on them.
+
+**Examples**
+
+Standard data sink methods:
+
+{% highlight scala %}
+// text data 
+val textData: DataSet[String] = // [...]
+
+// write DataSet to a file on the local file system
+textData.writeAsText("file:///my/result/on/localFS")
+
+// write DataSet to a file on a HDFS with a namenode running at nnHost:nnPort
+textData.writeAsText("hdfs://nnHost:nnPort/my/result/on/localFS")
+
+// write DataSet to a file and overwrite the file if it exists
+textData.writeAsText("file:///my/result/on/localFS", WriteMode.OVERWRITE)
+
+// tuples as lines with pipe as the separator "a|b|c"
+val values: DataSet[(String, Int, Double)] = // [...]
+values.writeAsCsv("file:///path/to/the/result/file", "\n", "|")
+
+// this writes tuples in the text formatting "(a, b, c)", rather than as CSV lines
+values.writeAsText("file:///path/to/the/result/file");
+
+// this wites values as strings using a user-defined formatting
+values map { tuple => tuple._1 + " - " + tuple._2 }
+  .writeAsText("file:///path/to/the/result/file")
+{% endhighlight %}
+
+
+#### Locally Sorted Output
+
+The output of a data sink can be locally sorted on specified fields in specified orders using [tuple field positions](#define-keys-for-tuples) or [field expressions](#define-keys-using-field-expressions). This works for every output format.
+
+The following examples show how to use this feature:
+
+{% highlight scala %}
+
+val tData: DataSet[(Int, String, Double)] = // [...]
+val pData: DataSet[(BookPojo, Double)] = // [...]
+val sData: DataSet[String] = // [...]
+
+// sort output on String field in ascending order
+tData.print.sortLocalOutput(1, Order.ASCENDING);
+
+// sort output on Double field in descending and Int field in ascending order
+tData.print.sortLocalOutput(2, Order.DESCENDING).sortLocalOutput(0, Order.ASCENDING);
+
+// sort output on the "author" field of nested BookPojo in descending order
+pData.writeAsText(...).sortLocalOutput("_1.author", Order.DESCENDING);
+
+// sort output on the full tuple in ascending order
+tData.writeAsCsv(...).sortLocalOutput("_", Order.ASCENDING);
+
+// sort atomic type (String) output in descending order
+sData.writeAsText(...).sortLocalOutput("_", Order.DESCENDING);
+
+{% endhighlight %}
+
+Globally sorted output is not supported yet.
+
+</div>
+</div>
+
+[Back to top](#top)
+
+Debugging
+---------
+
+Before running a data analysis program on a large data set in a distributed cluster, it is a good
+idea to make sure that the implemented algorithm works as desired. Hence, implementing data analysis
+programs is usually an incremental process of checking results, debugging, and improving.
+
+Flink provides a few nice features to significantly ease the development process of data analysis
+programs by supporting local debugging from within an IDE, injection of test data, and collection of
+result data. This section give some hints how to ease the development of Flink programs.
+
+### Local Execution Environment
+
+A `LocalEnvironment` starts a Flink system within the same JVM process it was created in. If you
+start the LocalEnvironement from an IDE, you can set breakpoint in your code and easily debug your
+program.
+
+A LocalEnvironment is created and used as follows:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+final ExecutionEnvironment env = ExecutionEnvironment.createLocalEnvironment();
+
+DataSet<String> lines = env.readTextFile(pathToTextFile);
+// build your program
+
+env.execute();
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+
+{% highlight scala %}
+val env = ExecutionEnvironment.createLocalEnvironment()
+
+val lines = env.readTextFile(pathToTextFile)
+// build your program
+
+env.execute();
+{% endhighlight %}
+</div>
+</div>
+
+### Collection Data Sources and Sinks
+
+Providing input for an analysis program and checking its output is cumbersome when done by creating
+input files and reading output files. Flink features special data sources and sinks which are backed
+by Java collections to ease testing. Once a program has been tested, the sources and sinks can be
+easily replaced by sources and sinks that read from / write to external data stores such as HDFS.
+
+Collection data sources can be used as follows:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+final ExecutionEnvironment env = ExecutionEnvironment.createLocalEnvironment();
+
+// Create a DataSet from a list of elements
+DataSet<Integer> myInts = env.fromElements(1, 2, 3, 4, 5);
+
+// Create a DataSet from any Java collection
+List<Tuple2<String, Integer>> data = ...
+DataSet<Tuple2<String, Integer>> myTuples = env.fromCollection(data);
+
+// Create a DataSet from an Iterator
+Iterator<Long> longIt = ...
+DataSet<Long> myLongs = env.fromCollection(longIt, Long.class);
+{% endhighlight %}
+
+A collection data sink is specified as follows:
+
+{% highlight java %}
+DataSet<Tuple2<String, Integer>> myResult = ...
+
+List<Tuple2<String, Integer>> outData = new ArrayList<Tuple2<String, Integer>>();
+myResult.output(new LocalCollectionOutputFormat(outData));
+{% endhighlight %}
+
+**Note:** Currently, the collection data sink is restricted to local execution, as a debugging tool.
+
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+val env = ExecutionEnvironment.createLocalEnvironment()
+
+// Create a DataSet from a list of elements
+val myInts = env.fromElements(1, 2, 3, 4, 5)
+
+// Create a DataSet from any Collection
+val data: Seq[(String, Int)] = ...
+val myTuples = env.fromCollection(data)
+
+// Create a DataSet from an Iterator
+val longIt: Iterator[Long] = ...
+val myLongs = env.fromCollection(longIt)
+{% endhighlight %}
+</div>
+</div>
+
+**Note:** Currently, the collection data source requires that data types and iterators implement
+`Serializable`. Furthermore, collection data sources can not be executed in parallel (
+parallelism = 1).
+
+[Back to top](#top)
+
+Iteration Operators
+-------------------
+
+Iterations implement loops in Flink programs. The iteration operators encapsulate a part of the
+program and execute it repeatedly, feeding back the result of one iteration (the partial solution)
+into the next iteration. There are two types of iterations in Flink: **BulkIteration** and
+**DeltaIteration**.
+
+This section provides quick examples on how to use both operators. Check out the [Introduction to
+Iterations](iterations.html) page for a more detailed introduction.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+#### Bulk Iterations
+
+To create a BulkIteration call the `iterate(int)` method of the DataSet the iteration should start
+at. This will return an `IterativeDataSet`, which can be transformed with the regular operators. The
+single argument to the iterate call specifies the maximum number of iterations.
+
+To specify the end of an iteration call the `closeWith(DataSet)` method on the `IterativeDataSet` to
+specify which transformation should be fed back to the next iteration. You can optionally specify a
+termination criterion with `closeWith(DataSet, DataSet)`, which evaluates the second DataSet and
+terminates the iteration, if this DataSet is empty. If no termination criterion is specified, the
+iteration terminates after the given maximum number iterations.
+
+The following example iteratively estimates the number Pi. The goal is to count the number of random
+points, which fall into the unit circle. In each iteration, a random point is picked. If this point
+lies inside the unit circle, we increment the count. Pi is then estimated as the resulting count
+divided by the number of iterations multiplied by 4.
+
+{% highlight java %}
+final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
+
+// Create initial IterativeDataSet
+IterativeDataSet<Integer> initial = env.fromElements(0).iterate(10000);
+
+DataSet<Integer> iteration = initial.map(new MapFunction<Integer, Integer>() {
+    @Override
+    public Integer map(Integer i) throws Exception {
+        double x = Math.random();
+        double y = Math.random();
+
+        return i + ((x * x + y * y < 1) ? 1 : 0);
+    }
+});
+
+// Iteratively transform the IterativeDataSet
+DataSet<Integer> count = initial.closeWith(iteration);
+
+count.map(new MapFunction<Integer, Double>() {
+    @Override
+    public Double map(Integer count) throws Exception {
+        return count / (double) 10000 * 4;
+    }
+}).print();
+
+env.execute("Iterative Pi Example");
+{% endhighlight %}
+
+You can also check out the
+{% gh_link /flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/clustering/KMeans.java "K-Means example" %},
+which uses a BulkIteration to cluster a set of unlabeled points.
+
+#### Delta Iterations
+
+Delta iterations exploit the fact that certain algorithms do not change every data point of the
+solution in each iteration.
+
+In addition to the partial solution that is fed back (called workset) in every iteration, delta
+iterations maintain state across iterations (called solution set), which can be updated through
+deltas. The result of the iterative computation is the state after the last iteration. Please refer
+to the [Introduction to Iterations](iterations.html) for an overview of the basic principle of delta
+iterations.
+
+Defining a DeltaIteration is similar to defining a BulkIteration. For delta iterations, two data
+sets form the input to each iteration (workset and solution set), and two data sets are produced as
+the result (new workset, solution set delta) in each iteration.
+
+To create a DeltaIteration call the `iterateDelta(DataSet, int, int)` (or `iterateDelta(DataSet,
+int, int[])` respectively). This method is called on the initial solution set. The arguments are the
+initial delta set, the maximum number of iterations and the key positions. The returned
+`DeltaIteration` object gives you access to the DataSets representing the workset and solution set
+via the methods `iteration.getWorkset()` and `iteration.getSolutionSet()`.
+
+Below is an example for the syntax of a delta iteration
+
+{% highlight java %}
+// read the initial data sets
+DataSet<Tuple2<Long, Double>> initialSolutionSet = // [...]
+
+DataSet<Tuple2<Long, Double>> initialDeltaSet = // [...]
+
+int maxIterations = 100;
+int keyPosition = 0;
+
+DeltaIteration<Tuple2<Long, Double>, Tuple2<Long, Double>> iteration = initialSolutionSet
+    .iterateDelta(initialDeltaSet, maxIterations, keyPosition);
+
+DataSet<Tuple2<Long, Double>> candidateUpdates = iteration.getWorkset()
+    .groupBy(1)
+    .reduceGroup(new ComputeCandidateChanges());
+
+DataSet<Tuple2<Long, Double>> deltas = candidateUpdates
+    .join(iteration.getSolutionSet())
+    .where(0)
+    .equalTo(0)
+    .with(new CompareChangesToCurrent());
+
+DataSet<Tuple2<Long, Double>> nextWorkset = deltas
+    .filter(new FilterByThreshold());
+
+iteration.closeWith(deltas, nextWorkset)
+	.writeAsCsv(outputPath);
+{% endhighlight %}
+
+</div>
+<div data-lang="scala" markdown="1">
+#### Bulk Iterations
+
+To create a BulkIteration call the `iterate(int)` method of the DataSet the iteration should start
+at and also specify a step function. The step function gets the input DataSet for the current
+iteration and must return a new DataSet. The parameter of the iterate call is the maximum number
+of iterations after which to stop.
+
+There is also the `iterateWithTermination(int)` function that accepts a step function that
+returns two DataSets: The result of the iteration step and a termination criterion. The iterations
+are stopped once the termination criterion DataSet is empty.
+
+The following example iteratively estimates the number Pi. The goal is to count the number of random
+points, which fall into the unit circle. In each iteration, a random point is picked. If this point
+lies inside the unit circle, we increment the count. Pi is then estimated as the resulting count
+divided by the number of iterations multiplied by 4.
+
+{% highlight scala %}
+val env = ExecutionEnvironment.getExecutionEnvironment()
+
+// Create initial DataSet
+val initial = env.fromElements(0)
+
+val count = initial.iterate(10000) { iterationInput: DataSet[Int] =>
+  val result = iterationInput.map { i => 
+    val x = Math.random()
+    val y = Math.random()
+    i + (if (x * x + y * y < 1) 1 else 0)
+  }
+  result
+}
+
+val result = count map { c => c / 10000.0 * 4 }
+
+result.print()
+
+env.execute("Iterative Pi Example");
+{% endhighlight %}
+
+You can also check out the
+{% gh_link /flink-examples/flink-scala-examples/src/main/scala/org/apache/flink/examples/scala/clustering/KMeans.scala "K-Means example" %},
+which uses a BulkIteration to cluster a set of unlabele

<TRUNCATED>

[23/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/css/bootstrap-lumen-custom.css
----------------------------------------------------------------------
diff --git a/docs/css/bootstrap-lumen-custom.css b/docs/css/bootstrap-lumen-custom.css
deleted file mode 100644
index 6d07201..0000000
--- a/docs/css/bootstrap-lumen-custom.css
+++ /dev/null
@@ -1,6191 +0,0 @@
-@import url("//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,400italic");
-/*!
- * Modified version based on bootwatch's lumen theme
- *
- * Bootswatch v3.1.1+1
- * Homepage: http://bootswatch.com
- * Copyright 2012-2014 Thomas Park
- * Licensed under MIT
- * Based on Bootstrap
-*/
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
-html {
-  font-family: sans-serif;
-  -ms-text-size-adjust: 100%;
-  -webkit-text-size-adjust: 100%;
-}
-body {
-  margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section,
-summary {
-  display: block;
-}
-audio,
-canvas,
-progress,
-video {
-  display: inline-block;
-  vertical-align: baseline;
-}
-audio:not([controls]) {
-  display: none;
-  height: 0;
-}
-[hidden],
-template {
-  display: none;
-}
-a {
-  background: transparent;
-}
-a:active,
-a:hover {
-  outline: 0;
-}
-abbr[title] {
-  border-bottom: 1px dotted;
-}
-b,
-strong {
-  font-weight: bold;
-}
-dfn {
-  font-style: italic;
-}
-h1 {
-  font-size: 2em;
-  margin: 0.67em 0;
-}
-mark {
-  background: #ff0;
-  color: #000;
-}
-small {
-  font-size: 80%;
-}
-sub,
-sup {
-  font-size: 75%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-sup {
-  top: -0.5em;
-}
-sub {
-  bottom: -0.25em;
-}
-img {
-  border: 0;
-}
-svg:not(:root) {
-  overflow: hidden;
-}
-figure {
-  margin: 1em 40px;
-}
-hr {
-  -moz-box-sizing: content-box;
-  box-sizing: content-box;
-  height: 0;
-}
-pre {
-  overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
-  color: inherit;
-  font: inherit;
-  margin: 0;
-}
-button {
-  overflow: visible;
-}
-button,
-select {
-  text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button;
-  cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
-  cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  border: 0;
-  padding: 0;
-}
-input {
-  line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
-  box-sizing: border-box;
-  padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-input[type="search"] {
-  -webkit-appearance: textfield;
-  -moz-box-sizing: content-box;
-  -webkit-box-sizing: content-box;
-  box-sizing: content-box;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-fieldset {
-  border: 1px solid #c0c0c0;
-  margin: 0 2px;
-  padding: 0.35em 0.625em 0.75em;
-}
-legend {
-  border: 0;
-  padding: 0;
-}
-textarea {
-  overflow: auto;
-}
-optgroup {
-  font-weight: bold;
-}
-table {
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-td,
-th {
-  padding: 0;
-}
-@media print {
-  * {
-    text-shadow: none !important;
-    color: #000 !important;
-    background: transparent !important;
-    box-shadow: none !important;
-  }
-  a,
-  a:visited {
-    text-decoration: underline;
-  }
-  a[href]:after {
-    content: " (" attr(href) ")";
-  }
-  abbr[title]:after {
-    content: " (" attr(title) ")";
-  }
-  a[href^="javascript:"]:after,
-  a[href^="#"]:after {
-    content: "";
-  }
-  pre,
-  blockquote {
-    border: 1px solid #999;
-    page-break-inside: avoid;
-  }
-  thead {
-    display: table-header-group;
-  }
-  tr,
-  img {
-    page-break-inside: avoid;
-  }
-  img {
-    max-width: 100% !important;
-  }
-  p,
-  h2,
-  h3 {
-    orphans: 3;
-    widows: 3;
-  }
-  h2,
-  h3 {
-    page-break-after: avoid;
-  }
-  select {
-    background: #fff !important;
-  }
-  .navbar {
-    display: none;
-  }
-  .table td,
-  .table th {
-    background-color: #fff !important;
-  }
-  .btn > .caret,
-  .dropup > .btn > .caret {
-    border-top-color: #000 !important;
-  }
-  .label {
-    border: 1px solid #000;
-  }
-  .table {
-    border-collapse: collapse !important;
-  }
-  .table-bordered th,
-  .table-bordered td {
-    border: 1px solid #ddd !important;
-  }
-}
-* {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-*:before,
-*:after {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-html {
-  font-size: 62.5%;
-  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-body {
-  font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 18px;
-  line-height: 1.42857143;
-  color: #555555;
-  background-color: #ffffff;
-}
-input,
-button,
-select,
-textarea {
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
-}
-a {
-  color: #158cba;
-  text-decoration: none;
-}
-a:hover,
-a:focus {
-  color: #158cba;
-  text-decoration: underline;
-}
-a:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-figure {
-  margin: 0;
-}
-img {
-  vertical-align: middle;
-}
-.img-responsive,
-.thumbnail > img,
-.thumbnail a > img,
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
-  display: block;
-  max-width: 100%;
-  height: auto;
-}
-.img-rounded {
-  border-radius: 5px;
-}
-.img-thumbnail {
-  padding: 4px;
-  line-height: 1.42857143;
-  background-color: #ffffff;
-  border: 1px solid #eeeeee;
-  border-radius: 4px;
-  -webkit-transition: all 0.2s ease-in-out;
-  transition: all 0.2s ease-in-out;
-  display: inline-block;
-  max-width: 100%;
-  height: auto;
-}
-.img-circle {
-  border-radius: 50%;
-}
-hr {
-  margin-top: 25px;
-  margin-bottom: 25px;
-  border: 0;
-  border-top: 1px solid #eeeeee;
-}
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  margin: -1px;
-  padding: 0;
-  overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
-  font-family: inherit;
-  font-weight: 400;
-  line-height: 1.1;
-  color: #333333;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
-  font-weight: normal;
-  line-height: 1;
-  color: #999999;
-}
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
-  margin-top: 25px;
-  margin-bottom: 12.5px;
-}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
-  font-size: 65%;
-}
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
-  margin-top: 12.5px;
-  margin-bottom: 12.5px;
-}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
-  font-size: 75%;
-}
-h1,
-.h1 {
-  font-size: 43px;
-}
-h2,
-.h2 {
-  font-size: 38px;
-}
-h3,
-.h3 {
-  font-size: 31px;
-}
-h4,
-.h4 {
-  font-size: 23px;
-}
-h5,
-.h5 {
-  font-size: 18px;
-}
-h6,
-.h6 {
-  font-size: 16px;
-}
-p {
-  margin: 0 0 12.5px;
-}
-.lead {
-  margin-bottom: 25px;
-  font-size: 20px;
-  font-weight: 200;
-  line-height: 1.4;
-}
-@media (min-width: 768px) {
-  .lead {
-    font-size: 27px;
-  }
-}
-small,
-.small {
-  font-size: 85%;
-}
-cite {
-  font-style: normal;
-}
-.text-left {
-  text-align: left;
-}
-.text-right {
-  text-align: right;
-}
-.text-center {
-  text-align: center;
-}
-.text-justify {
-  text-align: justify;
-}
-.text-muted {
-  color: #999999;
-}
-.text-primary {
-  color: #158cba;
-}
-a.text-primary:hover {
-  color: #106a8c;
-}
-.text-success {
-  color: #ffffff;
-}
-a.text-success:hover {
-  color: #e6e6e6;
-}
-.text-info {
-  color: #ffffff;
-}
-a.text-info:hover {
-  color: #e6e6e6;
-}
-.text-warning {
-  color: #ffffff;
-}
-a.text-warning:hover {
-  color: #e6e6e6;
-}
-.text-danger {
-  color: #ffffff;
-}
-a.text-danger:hover {
-  color: #e6e6e6;
-}
-.bg-primary {
-  color: #fff;
-  background-color: #158cba;
-}
-a.bg-primary:hover {
-  background-color: #106a8c;
-}
-.bg-success {
-  background-color: #28b62c;
-}
-a.bg-success:hover {
-  background-color: #1f8c22;
-}
-.bg-info {
-  background-color: #75caeb;
-}
-a.bg-info:hover {
-  background-color: #48b9e5;
-}
-.bg-warning {
-  background-color: #ff851b;
-}
-a.bg-warning:hover {
-  background-color: #e76b00;
-}
-.bg-danger {
-  background-color: #ff4136;
-}
-a.bg-danger:hover {
-  background-color: #ff1103;
-}
-.page-header {
-  padding-bottom: 11.5px;
-  margin: 50px 0 25px;
-  border-bottom: 1px solid #eeeeee;
-}
-ul,
-ol {
-  margin-top: 0;
-  margin-bottom: 12.5px;
-}
-ul ul,
-ol ul,
-ul ol,
-ol ol {
-  margin-bottom: 0;
-}
-.list-unstyled {
-  padding-left: 0;
-  list-style: none;
-}
-.list-inline {
-  padding-left: 0;
-  list-style: none;
-  margin-left: -5px;
-}
-.list-inline > li {
-  display: inline-block;
-  padding-left: 5px;
-  padding-right: 5px;
-}
-dl {
-  margin-top: 0;
-  margin-bottom: 25px;
-}
-dt,
-dd {
-  line-height: 1.42857143;
-}
-dt {
-  font-weight: bold;
-}
-dd {
-  margin-left: 0;
-}
-@media (min-width: 768px) {
-  .dl-horizontal dt {
-    float: left;
-    width: 160px;
-    clear: left;
-    text-align: right;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-  }
-  .dl-horizontal dd {
-    margin-left: 180px;
-  }
-}
-abbr[title],
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted #999999;
-}
-.initialism {
-  font-size: 90%;
-  text-transform: uppercase;
-}
-blockquote {
-  padding: 12.5px 25px;
-  margin: 0 0 25px;
-  font-size: 22.5px;
-  border-left: 5px solid #eeeeee;
-}
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
-  margin-bottom: 0;
-}
-blockquote footer,
-blockquote small,
-blockquote .small {
-  display: block;
-  font-size: 80%;
-  line-height: 1.42857143;
-  color: #999999;
-}
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
-  content: '\2014 \00A0';
-}
-.blockquote-reverse,
-blockquote.pull-right {
-  padding-right: 15px;
-  padding-left: 0;
-  border-right: 5px solid #eeeeee;
-  border-left: 0;
-  text-align: right;
-}
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
-  content: '';
-}
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
-  content: '\00A0 \2014';
-}
-blockquote:before,
-blockquote:after {
-  content: "";
-}
-address {
-  margin-bottom: 25px;
-  font-style: normal;
-  line-height: 1.42857143;
-}
-code,
-kbd,
-pre,
-samp {
-  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-}
-code {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #c7254e;
-  background-color: #f9f2f4;
-  white-space: nowrap;
-  border-radius: 4px;
-}
-kbd {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #ffffff;
-  background-color: #333333;
-  border-radius: 2px;
-  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-pre {
-  display: block;
-  padding: 12px;
-  margin: 0 0 12.5px;
-  font-size: 17px;
-  line-height: 1.42857143;
-  word-break: break-all;
-  word-wrap: break-word;
-  color: #333333;
-  background-color: #f5f5f5;
-  border: 1px solid #cccccc;
-  border-radius: 4px;
-}
-pre code {
-  padding: 0;
-  font-size: inherit;
-  color: inherit;
-  white-space: pre-wrap;
-  background-color: transparent;
-  border-radius: 0;
-}
-.pre-scrollable {
-  max-height: 340px;
-  overflow-y: scroll;
-}
-.container {
-  margin-right: auto;
-  margin-left: auto;
-  padding-left: 15px;
-  padding-right: 15px;
-}
-@media (min-width: 768px) {
-  .container {
-    width: 750px;
-  }
-}
-@media (min-width: 992px) {
-  .container {
-    width: 970px;
-  }
-}
-@media (min-width: 1200px) {
-  .container {
-    width: 1170px;
-  }
-}
-.container-fluid {
-  margin-right: auto;
-  margin-left: auto;
-  padding-left: 15px;
-  padding-right: 15px;
-}
-.row {
-  margin-left: -15px;
-  margin-right: -15px;
-}
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
-  position: relative;
-  min-height: 1px;
-  padding-left: 15px;
-  padding-right: 15px;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
-  float: left;
-}
-.col-xs-12 {
-  width: 100%;
-}
-.col-xs-11 {
-  width: 91.66666667%;
-}
-.col-xs-10 {
-  width: 83.33333333%;
-}
-.col-xs-9 {
-  width: 75%;
-}
-.col-xs-8 {
-  width: 66.66666667%;
-}
-.col-xs-7 {
-  width: 58.33333333%;
-}
-.col-xs-6 {
-  width: 50%;
-}
-.col-xs-5 {
-  width: 41.66666667%;
-}
-.col-xs-4 {
-  width: 33.33333333%;
-}
-.col-xs-3 {
-  width: 25%;
-}
-.col-xs-2 {
-  width: 16.66666667%;
-}
-.col-xs-1 {
-  width: 8.33333333%;
-}
-.col-xs-pull-12 {
-  right: 100%;
-}
-.col-xs-pull-11 {
-  right: 91.66666667%;
-}
-.col-xs-pull-10 {
-  right: 83.33333333%;
-}
-.col-xs-pull-9 {
-  right: 75%;
-}
-.col-xs-pull-8 {
-  right: 66.66666667%;
-}
-.col-xs-pull-7 {
-  right: 58.33333333%;
-}
-.col-xs-pull-6 {
-  right: 50%;
-}
-.col-xs-pull-5 {
-  right: 41.66666667%;
-}
-.col-xs-pull-4 {
-  right: 33.33333333%;
-}
-.col-xs-pull-3 {
-  right: 25%;
-}
-.col-xs-pull-2 {
-  right: 16.66666667%;
-}
-.col-xs-pull-1 {
-  right: 8.33333333%;
-}
-.col-xs-pull-0 {
-  right: 0%;
-}
-.col-xs-push-12 {
-  left: 100%;
-}
-.col-xs-push-11 {
-  left: 91.66666667%;
-}
-.col-xs-push-10 {
-  left: 83.33333333%;
-}
-.col-xs-push-9 {
-  left: 75%;
-}
-.col-xs-push-8 {
-  left: 66.66666667%;
-}
-.col-xs-push-7 {
-  left: 58.33333333%;
-}
-.col-xs-push-6 {
-  left: 50%;
-}
-.col-xs-push-5 {
-  left: 41.66666667%;
-}
-.col-xs-push-4 {
-  left: 33.33333333%;
-}
-.col-xs-push-3 {
-  left: 25%;
-}
-.col-xs-push-2 {
-  left: 16.66666667%;
-}
-.col-xs-push-1 {
-  left: 8.33333333%;
-}
-.col-xs-push-0 {
-  left: 0%;
-}
-.col-xs-offset-12 {
-  margin-left: 100%;
-}
-.col-xs-offset-11 {
-  margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
-  margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
-  margin-left: 75%;
-}
-.col-xs-offset-8 {
-  margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
-  margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
-  margin-left: 50%;
-}
-.col-xs-offset-5 {
-  margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
-  margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
-  margin-left: 25%;
-}
-.col-xs-offset-2 {
-  margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
-  margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
-  margin-left: 0%;
-}
-@media (min-width: 768px) {
-  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
-    float: left;
-  }
-  .col-sm-12 {
-    width: 100%;
-  }
-  .col-sm-11 {
-    width: 91.66666667%;
-  }
-  .col-sm-10 {
-    width: 83.33333333%;
-  }
-  .col-sm-9 {
-    width: 75%;
-  }
-  .col-sm-8 {
-    width: 66.66666667%;
-  }
-  .col-sm-7 {
-    width: 58.33333333%;
-  }
-  .col-sm-6 {
-    width: 50%;
-  }
-  .col-sm-5 {
-    width: 41.66666667%;
-  }
-  .col-sm-4 {
-    width: 33.33333333%;
-  }
-  .col-sm-3 {
-    width: 25%;
-  }
-  .col-sm-2 {
-    width: 16.66666667%;
-  }
-  .col-sm-1 {
-    width: 8.33333333%;
-  }
-  .col-sm-pull-12 {
-    right: 100%;
-  }
-  .col-sm-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-sm-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-sm-pull-9 {
-    right: 75%;
-  }
-  .col-sm-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-sm-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-sm-pull-6 {
-    right: 50%;
-  }
-  .col-sm-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-sm-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-sm-pull-3 {
-    right: 25%;
-  }
-  .col-sm-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-sm-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-sm-pull-0 {
-    right: 0%;
-  }
-  .col-sm-push-12 {
-    left: 100%;
-  }
-  .col-sm-push-11 {
-    left: 91.66666667%;
-  }
-  .col-sm-push-10 {
-    left: 83.33333333%;
-  }
-  .col-sm-push-9 {
-    left: 75%;
-  }
-  .col-sm-push-8 {
-    left: 66.66666667%;
-  }
-  .col-sm-push-7 {
-    left: 58.33333333%;
-  }
-  .col-sm-push-6 {
-    left: 50%;
-  }
-  .col-sm-push-5 {
-    left: 41.66666667%;
-  }
-  .col-sm-push-4 {
-    left: 33.33333333%;
-  }
-  .col-sm-push-3 {
-    left: 25%;
-  }
-  .col-sm-push-2 {
-    left: 16.66666667%;
-  }
-  .col-sm-push-1 {
-    left: 8.33333333%;
-  }
-  .col-sm-push-0 {
-    left: 0%;
-  }
-  .col-sm-offset-12 {
-    margin-left: 100%;
-  }
-  .col-sm-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-sm-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-sm-offset-9 {
-    margin-left: 75%;
-  }
-  .col-sm-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-sm-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-sm-offset-6 {
-    margin-left: 50%;
-  }
-  .col-sm-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-sm-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-sm-offset-3 {
-    margin-left: 25%;
-  }
-  .col-sm-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-sm-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-sm-offset-0 {
-    margin-left: 0%;
-  }
-}
-@media (min-width: 992px) {
-  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
-    float: left;
-  }
-  .col-md-12 {
-    width: 100%;
-  }
-  .col-md-11 {
-    width: 91.66666667%;
-  }
-  .col-md-10 {
-    width: 83.33333333%;
-  }
-  .col-md-9 {
-    width: 75%;
-  }
-  .col-md-8 {
-    width: 66.66666667%;
-  }
-  .col-md-7 {
-    width: 58.33333333%;
-  }
-  .col-md-6 {
-    width: 50%;
-  }
-  .col-md-5 {
-    width: 41.66666667%;
-  }
-  .col-md-4 {
-    width: 33.33333333%;
-  }
-  .col-md-3 {
-    width: 25%;
-  }
-  .col-md-2 {
-    width: 16.66666667%;
-  }
-  .col-md-1 {
-    width: 8.33333333%;
-  }
-  .col-md-pull-12 {
-    right: 100%;
-  }
-  .col-md-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-md-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-md-pull-9 {
-    right: 75%;
-  }
-  .col-md-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-md-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-md-pull-6 {
-    right: 50%;
-  }
-  .col-md-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-md-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-md-pull-3 {
-    right: 25%;
-  }
-  .col-md-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-md-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-md-pull-0 {
-    right: 0%;
-  }
-  .col-md-push-12 {
-    left: 100%;
-  }
-  .col-md-push-11 {
-    left: 91.66666667%;
-  }
-  .col-md-push-10 {
-    left: 83.33333333%;
-  }
-  .col-md-push-9 {
-    left: 75%;
-  }
-  .col-md-push-8 {
-    left: 66.66666667%;
-  }
-  .col-md-push-7 {
-    left: 58.33333333%;
-  }
-  .col-md-push-6 {
-    left: 50%;
-  }
-  .col-md-push-5 {
-    left: 41.66666667%;
-  }
-  .col-md-push-4 {
-    left: 33.33333333%;
-  }
-  .col-md-push-3 {
-    left: 25%;
-  }
-  .col-md-push-2 {
-    left: 16.66666667%;
-  }
-  .col-md-push-1 {
-    left: 8.33333333%;
-  }
-  .col-md-push-0 {
-    left: 0%;
-  }
-  .col-md-offset-12 {
-    margin-left: 100%;
-  }
-  .col-md-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-md-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-md-offset-9 {
-    margin-left: 75%;
-  }
-  .col-md-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-md-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-md-offset-6 {
-    margin-left: 50%;
-  }
-  .col-md-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-md-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-md-offset-3 {
-    margin-left: 25%;
-  }
-  .col-md-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-md-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-md-offset-0 {
-    margin-left: 0%;
-  }
-}
-@media (min-width: 1200px) {
-  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
-    float: left;
-  }
-  .col-lg-12 {
-    width: 100%;
-  }
-  .col-lg-11 {
-    width: 91.66666667%;
-  }
-  .col-lg-10 {
-    width: 83.33333333%;
-  }
-  .col-lg-9 {
-    width: 75%;
-  }
-  .col-lg-8 {
-    width: 66.66666667%;
-  }
-  .col-lg-7 {
-    width: 58.33333333%;
-  }
-  .col-lg-6 {
-    width: 50%;
-  }
-  .col-lg-5 {
-    width: 41.66666667%;
-  }
-  .col-lg-4 {
-    width: 33.33333333%;
-  }
-  .col-lg-3 {
-    width: 25%;
-  }
-  .col-lg-2 {
-    width: 16.66666667%;
-  }
-  .col-lg-1 {
-    width: 8.33333333%;
-  }
-  .col-lg-pull-12 {
-    right: 100%;
-  }
-  .col-lg-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-lg-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-lg-pull-9 {
-    right: 75%;
-  }
-  .col-lg-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-lg-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-lg-pull-6 {
-    right: 50%;
-  }
-  .col-lg-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-lg-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-lg-pull-3 {
-    right: 25%;
-  }
-  .col-lg-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-lg-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-lg-pull-0 {
-    right: 0%;
-  }
-  .col-lg-push-12 {
-    left: 100%;
-  }
-  .col-lg-push-11 {
-    left: 91.66666667%;
-  }
-  .col-lg-push-10 {
-    left: 83.33333333%;
-  }
-  .col-lg-push-9 {
-    left: 75%;
-  }
-  .col-lg-push-8 {
-    left: 66.66666667%;
-  }
-  .col-lg-push-7 {
-    left: 58.33333333%;
-  }
-  .col-lg-push-6 {
-    left: 50%;
-  }
-  .col-lg-push-5 {
-    left: 41.66666667%;
-  }
-  .col-lg-push-4 {
-    left: 33.33333333%;
-  }
-  .col-lg-push-3 {
-    left: 25%;
-  }
-  .col-lg-push-2 {
-    left: 16.66666667%;
-  }
-  .col-lg-push-1 {
-    left: 8.33333333%;
-  }
-  .col-lg-push-0 {
-    left: 0%;
-  }
-  .col-lg-offset-12 {
-    margin-left: 100%;
-  }
-  .col-lg-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-lg-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-lg-offset-9 {
-    margin-left: 75%;
-  }
-  .col-lg-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-lg-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-lg-offset-6 {
-    margin-left: 50%;
-  }
-  .col-lg-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-lg-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-lg-offset-3 {
-    margin-left: 25%;
-  }
-  .col-lg-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-lg-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-lg-offset-0 {
-    margin-left: 0%;
-  }
-}
-table {
-  max-width: 100%;
-  background-color: transparent;
-}
-th {
-  text-align: left;
-}
-.table {
-  width: 100%;
-  margin-bottom: 25px;
-}
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
-  padding: 8px;
-  line-height: 1.42857143;
-  vertical-align: top;
-  border-top: 1px solid #dddddd;
-}
-.table > thead > tr > th {
-  vertical-align: bottom;
-  border-bottom: 2px solid #dddddd;
-}
-.table > caption + thead > tr:first-child > th,
-.table > colgroup + thead > tr:first-child > th,
-.table > thead:first-child > tr:first-child > th,
-.table > caption + thead > tr:first-child > td,
-.table > colgroup + thead > tr:first-child > td,
-.table > thead:first-child > tr:first-child > td {
-  border-top: 0;
-}
-.table > tbody + tbody {
-  border-top: 2px solid #dddddd;
-}
-.table .table {
-  background-color: #ffffff;
-}
-.table-condensed > thead > tr > th,
-.table-condensed > tbody > tr > th,
-.table-condensed > tfoot > tr > th,
-.table-condensed > thead > tr > td,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > td {
-  padding: 5px;
-}
-.table-bordered {
-  border: 1px solid #dddddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
-  border: 1px solid #dddddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
-  border-bottom-width: 2px;
-}
-.table-striped > tbody > tr:nth-child(odd) > td,
-.table-striped > tbody > tr:nth-child(odd) > th {
-  background-color: #f9f9f9;
-}
-.table-hover > tbody > tr:hover > td,
-.table-hover > tbody > tr:hover > th {
-  background-color: #f5f5f5;
-}
-table col[class*="col-"] {
-  position: static;
-  float: none;
-  display: table-column;
-}
-table td[class*="col-"],
-table th[class*="col-"] {
-  position: static;
-  float: none;
-  display: table-cell;
-}
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
-  background-color: #f5f5f5;
-}
-.table-hover > tbody > tr > td.active:hover,
-.table-hover > tbody > tr > th.active:hover,
-.table-hover > tbody > tr.active:hover > td,
-.table-hover > tbody > tr.active:hover > th {
-  background-color: #e8e8e8;
-}
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
-  background-color: #28b62c;
-}
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td,
-.table-hover > tbody > tr.success:hover > th {
-  background-color: #23a127;
-}
-.table > thead > tr > td.info,
-.table > tbody > tr > td.info,
-.table > tfoot > tr > td.info,
-.table > thead > tr > th.info,
-.table > tbody > tr > th.info,
-.table > tfoot > tr > th.info,
-.table > thead > tr.info > td,
-.table > tbody > tr.info > td,
-.table > tfoot > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr.info > th,
-.table > tfoot > tr.info > th {
-  background-color: #75caeb;
-}
-.table-hover > tbody > tr > td.info:hover,
-.table-hover > tbody > tr > th.info:hover,
-.table-hover > tbody > tr.info:hover > td,
-.table-hover > tbody > tr.info:hover > th {
-  background-color: #5fc1e8;
-}
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
-  background-color: #ff851b;
-}
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td,
-.table-hover > tbody > tr.warning:hover > th {
-  background-color: #ff7701;
-}
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
-  background-color: #ff4136;
-}
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td,
-.table-hover > tbody > tr.danger:hover > th {
-  background-color: #ff291c;
-}
-@media (max-width: 767px) {
-  .table-responsive {
-    width: 100%;
-    margin-bottom: 18.75px;
-    overflow-y: hidden;
-    overflow-x: scroll;
-    -ms-overflow-style: -ms-autohiding-scrollbar;
-    border: 1px solid #dddddd;
-    -webkit-overflow-scrolling: touch;
-  }
-  .table-responsive > .table {
-    margin-bottom: 0;
-  }
-  .table-responsive > .table > thead > tr > th,
-  .table-responsive > .table > tbody > tr > th,
-  .table-responsive > .table > tfoot > tr > th,
-  .table-responsive > .table > thead > tr > td,
-  .table-responsive > .table > tbody > tr > td,
-  .table-responsive > .table > tfoot > tr > td {
-    white-space: nowrap;
-  }
-  .table-responsive > .table-bordered {
-    border: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr > th:first-child,
-  .table-responsive > .table-bordered > tbody > tr > th:first-child,
-  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-  .table-responsive > .table-bordered > thead > tr > td:first-child,
-  .table-responsive > .table-bordered > tbody > tr > td:first-child,
-  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-    border-left: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr > th:last-child,
-  .table-responsive > .table-bordered > tbody > tr > th:last-child,
-  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-  .table-responsive > .table-bordered > thead > tr > td:last-child,
-  .table-responsive > .table-bordered > tbody > tr > td:last-child,
-  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-    border-right: 0;
-  }
-  .table-responsive > .table-bordered > tbody > tr:last-child > th,
-  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
-  .table-responsive > .table-bordered > tbody > tr:last-child > td,
-  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
-    border-bottom: 0;
-  }
-}
-fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
-  min-width: 0;
-}
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 25px;
-  font-size: 27px;
-  line-height: inherit;
-  color: #333333;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5;
-}
-label {
-  display: inline-block;
-  margin-bottom: 5px;
-  font-weight: bold;
-}
-input[type="search"] {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 4px 0 0;
-  margin-top: 1px \9;
-  /* IE8-9 */
-  line-height: normal;
-}
-input[type="file"] {
-  display: block;
-}
-input[type="range"] {
-  display: block;
-  width: 100%;
-}
-select[multiple],
-select[size] {
-  height: auto;
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-output {
-  display: block;
-  padding-top: 7px;
-  font-size: 18px;
-  line-height: 1.42857143;
-  color: #555555;
-}
-.form-control {
-  display: block;
-  width: 100%;
-  height: 41px;
-  padding: 6px 12px;
-  font-size: 18px;
-  line-height: 1.42857143;
-  color: #555555;
-  background-color: #ffffff;
-  background-image: none;
-  border: 1px solid #e7e7e7;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-.form-control:focus {
-  border-color: #66afe9;
-  outline: 0;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
-  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
-}
-.form-control::-moz-placeholder {
-  color: #999999;
-  opacity: 1;
-}
-.form-control:-ms-input-placeholder {
-  color: #999999;
-}
-.form-control::-webkit-input-placeholder {
-  color: #999999;
-}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
-  cursor: not-allowed;
-  background-color: #eeeeee;
-  opacity: 1;
-}
-textarea.form-control {
-  height: auto;
-}
-input[type="search"] {
-  -webkit-appearance: none;
-}
-input[type="date"] {
-  line-height: 41px;
-}
-.form-group {
-  margin-bottom: 15px;
-}
-.radio,
-.checkbox {
-  display: block;
-  min-height: 25px;
-  margin-top: 10px;
-  margin-bottom: 10px;
-  padding-left: 20px;
-}
-.radio label,
-.checkbox label {
-  display: inline;
-  font-weight: normal;
-  cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
-  float: left;
-  margin-left: -20px;
-}
-.radio + .radio,
-.checkbox + .checkbox {
-  margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
-  display: inline-block;
-  padding-left: 20px;
-  margin-bottom: 0;
-  vertical-align: middle;
-  font-weight: normal;
-  cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
-  margin-top: 0;
-  margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-.radio[disabled],
-.radio-inline[disabled],
-.checkbox[disabled],
-.checkbox-inline[disabled],
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"],
-fieldset[disabled] .radio,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox,
-fieldset[disabled] .checkbox-inline {
-  cursor: not-allowed;
-}
-.input-sm {
-  height: 36px;
-  padding: 5px 10px;
-  font-size: 16px;
-  line-height: 1.5;
-  border-radius: 2px;
-}
-select.input-sm {
-  height: 36px;
-  line-height: 36px;
-}
-textarea.input-sm,
-select[multiple].input-sm {
-  height: auto;
-}
-.input-lg {
-  height: 53px;
-  padding: 10px 16px;
-  font-size: 23px;
-  line-height: 1.33;
-  border-radius: 5px;
-}
-select.input-lg {
-  height: 53px;
-  line-height: 53px;
-}
-textarea.input-lg,
-select[multiple].input-lg {
-  height: auto;
-}
-.has-feedback {
-  position: relative;
-}
-.has-feedback .form-control {
-  padding-right: 51.25px;
-}
-.has-feedback .form-control-feedback {
-  position: absolute;
-  top: 30px;
-  right: 0;
-  display: block;
-  width: 41px;
-  height: 41px;
-  line-height: 41px;
-  text-align: center;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline {
-  color: #ffffff;
-}
-.has-success .form-control {
-  border-color: #ffffff;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.has-success .form-control:focus {
-  border-color: #e6e6e6;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
-}
-.has-success .input-group-addon {
-  color: #ffffff;
-  border-color: #ffffff;
-  background-color: #28b62c;
-}
-.has-success .form-control-feedback {
-  color: #ffffff;
-}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline {
-  color: #ffffff;
-}
-.has-warning .form-control {
-  border-color: #ffffff;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.has-warning .form-control:focus {
-  border-color: #e6e6e6;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
-}
-.has-warning .input-group-addon {
-  color: #ffffff;
-  border-color: #ffffff;
-  background-color: #ff851b;
-}
-.has-warning .form-control-feedback {
-  color: #ffffff;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline {
-  color: #ffffff;
-}
-.has-error .form-control {
-  border-color: #ffffff;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.has-error .form-control:focus {
-  border-color: #e6e6e6;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
-}
-.has-error .input-group-addon {
-  color: #ffffff;
-  border-color: #ffffff;
-  background-color: #ff4136;
-}
-.has-error .form-control-feedback {
-  color: #ffffff;
-}
-.form-control-static {
-  margin-bottom: 0;
-}
-.help-block {
-  display: block;
-  margin-top: 5px;
-  margin-bottom: 10px;
-  color: #959595;
-}
-@media (min-width: 768px) {
-  .form-inline .form-group {
-    display: inline-block;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .form-control {
-    display: inline-block;
-    width: auto;
-    vertical-align: middle;
-  }
-  .form-inline .input-group > .form-control {
-    width: 100%;
-  }
-  .form-inline .control-label {
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .radio,
-  .form-inline .checkbox {
-    display: inline-block;
-    margin-top: 0;
-    margin-bottom: 0;
-    padding-left: 0;
-    vertical-align: middle;
-  }
-  .form-inline .radio input[type="radio"],
-  .form-inline .checkbox input[type="checkbox"] {
-    float: none;
-    margin-left: 0;
-  }
-  .form-inline .has-feedback .form-control-feedback {
-    top: 0;
-  }
-}
-.form-horizontal .control-label,
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
-  margin-top: 0;
-  margin-bottom: 0;
-  padding-top: 7px;
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox {
-  min-height: 32px;
-}
-.form-horizontal .form-group {
-  margin-left: -15px;
-  margin-right: -15px;
-}
-.form-horizontal .form-control-static {
-  padding-top: 7px;
-}
-@media (min-width: 768px) {
-  .form-horizontal .control-label {
-    text-align: right;
-  }
-}
-.form-horizontal .has-feedback .form-control-feedback {
-  top: 0;
-  right: 15px;
-}
-.btn {
-  display: inline-block;
-  margin-bottom: 0;
-  font-weight: normal;
-  text-align: center;
-  vertical-align: middle;
-  cursor: pointer;
-  background-image: none;
-  border: 1px solid transparent;
-  white-space: nowrap;
-  padding: 6px 12px;
-  font-size: 18px;
-  line-height: 1.42857143;
-  border-radius: 4px;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus {
-  color: #555555;
-  text-decoration: none;
-}
-.btn:active,
-.btn.active {
-  outline: 0;
-  background-image: none;
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
-  cursor: not-allowed;
-  pointer-events: none;
-  opacity: 0.65;
-  filter: alpha(opacity=65);
-  -webkit-box-shadow: none;
-  box-shadow: none;
-}
-.btn-default {
-  color: #555555;
-  background-color: #eeeeee;
-  border-color: #e2e2e2;
-}
-.btn-default:hover,
-.btn-default:focus,
-.btn-default:active,
-.btn-default.active,
-.open .dropdown-toggle.btn-default {
-  color: #555555;
-  background-color: #dadada;
-  border-color: #c3c3c3;
-}
-.btn-default:active,
-.btn-default.active,
-.open .dropdown-toggle.btn-default {
-  background-image: none;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
-  background-color: #eeeeee;
-  border-color: #e2e2e2;
-}
-.btn-default .badge {
-  color: #eeeeee;
-  background-color: #555555;
-}
-.btn-primary {
-  color: #ffffff;
-  background-color: #158cba;
-  border-color: #127ba3;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
-  color: #ffffff;
-  background-color: #117095;
-  border-color: #0c516c;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
-  background-image: none;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
-  background-color: #158cba;
-  border-color: #127ba3;
-}
-.btn-primary .badge {
-  color: #158cba;
-  background-color: #ffffff;
-}
-.btn-success {
-  color: #ffffff;
-  background-color: #28b62c;
-  border-color: #23a127;
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.open .dropdown-toggle.btn-success {
-  color: #ffffff;
-  background-color: #219524;
-  border-color: #186f1b;
-}
-.btn-success:active,
-.btn-success.active,
-.open .dropdown-toggle.btn-success {
-  background-image: none;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
-  background-color: #28b62c;
-  border-color: #23a127;
-}
-.btn-success .badge {
-  color: #28b62c;
-  background-color: #ffffff;
-}
-.btn-info {
-  color: #ffffff;
-  background-color: #75caeb;
-  border-color: #5fc1e8;
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.open .dropdown-toggle.btn-info {
-  color: #ffffff;
-  background-color: #51bce6;
-  border-color: #29ade0;
-}
-.btn-info:active,
-.btn-info.active,
-.open .dropdown-toggle.btn-info {
-  background-image: none;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
-  background-color: #75caeb;
-  border-color: #5fc1e8;
-}
-.btn-info .badge {
-  color: #75caeb;
-  background-color: #ffffff;
-}
-.btn-warning {
-  color: #ffffff;
-  background-color: #ff851b;
-  border-color: #ff7701;
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.open .dropdown-toggle.btn-warning {
-  color: #ffffff;
-  background-color: #f17000;
-  border-color: #c35b00;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open .dropdown-toggle.btn-warning {
-  background-image: none;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
-  background-color: #ff851b;
-  border-color: #ff7701;
-}
-.btn-warning .badge {
-  color: #ff851b;
-  background-color: #ffffff;
-}
-.btn-danger {
-  color: #ffffff;
-  background-color: #ff4136;
-  border-color: #ff291c;
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.open .dropdown-toggle.btn-danger {
-  color: #ffffff;
-  background-color: #ff1a0d;
-  border-color: #de0c00;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open .dropdown-toggle.btn-danger {
-  background-image: none;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
-  background-color: #ff4136;
-  border-color: #ff291c;
-}
-.btn-danger .badge {
-  color: #ff4136;
-  background-color: #ffffff;
-}
-.btn-link {
-  color: #158cba;
-  font-weight: normal;
-  cursor: pointer;
-  border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
-  background-color: transparent;
-  -webkit-box-shadow: none;
-  box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
-  border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
-  color: #158cba;
-  text-decoration: underline;
-  background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
-  color: #999999;
-  text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
-  padding: 10px 16px;
-  font-size: 23px;
-  line-height: 1.33;
-  border-radius: 5px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
-  padding: 5px 10px;
-  font-size: 16px;
-  line-height: 1.5;
-  border-radius: 2px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
-  padding: 1px 5px;
-  font-size: 16px;
-  line-height: 1.5;
-  border-radius: 2px;
-}
-.btn-block {
-  display: block;
-  width: 100%;
-  padding-left: 0;
-  padding-right: 0;
-}
-.btn-block + .btn-block {
-  margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
-  width: 100%;
-}
-.fade {
-  opacity: 0;
-  -webkit-transition: opacity 0.15s linear;
-  transition: opacity 0.15s linear;
-}
-.fade.in {
-  opacity: 1;
-}
-.collapse {
-  display: none;
-}
-.collapse.in {
-  display: block;
-}
-.collapsing {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  -webkit-transition: height 0.35s ease;
-  transition: height 0.35s ease;
-}
-@font-face {
-  font-family: 'Glyphicons Halflings';
-  src: url('../fonts/glyphicons-halflings-regular.eot');
-  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
-  position: relative;
-  top: 1px;
-  display: inline-block;
-  font-family: 'Glyphicons Halflings';
-  font-style: normal;
-  font-weight: normal;
-  line-height: 1;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
-  content: "\2a";
-}
-.glyphicon-plus:before {
-  content: "\2b";
-}
-.glyphicon-euro:before {
-  content: "\20ac";
-}
-.glyphicon-minus:before {
-  content: "\2212";
-}
-.glyphicon-cloud:before {
-  content: "\2601";
-}
-.glyphicon-envelope:before {
-  content: "\2709";
-}
-.glyphicon-pencil:before {
-  content: "\270f";
-}
-.glyphicon-glass:before {
-  content: "\e001";
-}
-.glyphicon-music:before {
-  content: "\e002";
-}
-.glyphicon-search:before {
-  content: "\e003";
-}
-.glyphicon-heart:before {
-  content: "\e005";
-}
-.glyphicon-star:before {
-  content: "\e006";
-}
-.glyphicon-star-empty:before {
-  content: "\e007";
-}
-.glyphicon-user:before {
-  content: "\e008";
-}
-.glyphicon-film:before {
-  content: "\e009";
-}
-.glyphicon-th-large:before {
-  content: "\e010";
-}
-.glyphicon-th:before {
-  content: "\e011";
-}
-.glyphicon-th-list:before {
-  content: "\e012";
-}
-.glyphicon-ok:before {
-  content: "\e013";
-}
-.glyphicon-remove:before {
-  content: "\e014";
-}
-.glyphicon-zoom-in:before {
-  content: "\e015";
-}
-.glyphicon-zoom-out:before {
-  content: "\e016";
-}
-.glyphicon-off:before {
-  content: "\e017";
-}
-.glyphicon-signal:before {
-  content: "\e018";
-}
-.glyphicon-cog:before {
-  content: "\e019";
-}
-.glyphicon-trash:before {
-  content: "\e020";
-}
-.glyphicon-home:before {
-  content: "\e021";
-}
-.glyphicon-file:before {
-  content: "\e022";
-}
-.glyphicon-time:before {
-  content: "\e023";
-}
-.glyphicon-road:before {
-  content: "\e024";
-}
-.glyphicon-download-alt:before {
-  content: "\e025";
-}
-.glyphicon-download:before {
-  content: "\e026";
-}
-.glyphicon-upload:before {
-  content: "\e027";
-}
-.glyphicon-inbox:before {
-  content: "\e028";
-}
-.glyphicon-play-circle:before {
-  content: "\e029";
-}
-.glyphicon-repeat:before {
-  content: "\e030";
-}
-.glyphicon-refresh:before {
-  content: "\e031";
-}
-.glyphicon-list-alt:before {
-  content: "\e032";
-}
-.glyphicon-lock:before {
-  content: "\e033";
-}
-.glyphicon-flag:before {
-  content: "\e034";
-}
-.glyphicon-headphones:before {
-  content: "\e035";
-}
-.glyphicon-volume-off:before {
-  content: "\e036";
-}
-.glyphicon-volume-down:before {
-  content: "\e037";
-}
-.glyphicon-volume-up:before {
-  content: "\e038";
-}
-.glyphicon-qrcode:before {
-  content: "\e039";
-}
-.glyphicon-barcode:before {
-  content: "\e040";
-}
-.glyphicon-tag:before {
-  content: "\e041";
-}
-.glyphicon-tags:before {
-  content: "\e042";
-}
-.glyphicon-book:before {
-  content: "\e043";
-}
-.glyphicon-bookmark:before {
-  content: "\e044";
-}
-.glyphicon-print:before {
-  content: "\e045";
-}
-.glyphicon-camera:before {
-  content: "\e046";
-}
-.glyphicon-font:before {
-  content: "\e047";
-}
-.glyphicon-bold:before {
-  content: "\e048";
-}
-.glyphicon-italic:before {
-  content: "\e049";
-}
-.glyphicon-text-height:before {
-  content: "\e050";
-}
-.glyphicon-text-width:before {
-  content: "\e051";
-}
-.glyphicon-align-left:before {
-  content: "\e052";
-}
-.glyphicon-align-center:before {
-  content: "\e053";
-}
-.glyphicon-align-right:before {
-  content: "\e054";
-}
-.glyphicon-align-justify:before {
-  content: "\e055";
-}
-.glyphicon-list:before {
-  content: "\e056";
-}
-.glyphicon-indent-left:before {
-  content: "\e057";
-}
-.glyphicon-indent-right:before {
-  content: "\e058";
-}
-.glyphicon-facetime-video:before {
-  content: "\e059";
-}
-.glyphicon-picture:before {
-  content: "\e060";
-}
-.glyphicon-map-marker:before {
-  content: "\e062";
-}
-.glyphicon-adjust:before {
-  content: "\e063";
-}
-.glyphicon-tint:before {
-  content: "\e064";
-}
-.glyphicon-edit:before {
-  content: "\e065";
-}
-.glyphicon-share:before {
-  content: "\e066";
-}
-.glyphicon-check:before {
-  content: "\e067";
-}
-.glyphicon-move:before {
-  content: "\e068";
-}
-.glyphicon-step-backward:before {
-  content: "\e069";
-}
-.glyphicon-fast-backward:before {
-  content: "\e070";
-}
-.glyphicon-backward:before {
-  content: "\e071";
-}
-.glyphicon-play:before {
-  content: "\e072";
-}
-.glyphicon-pause:before {
-  content: "\e073";
-}
-.glyphicon-stop:before {
-  content: "\e074";
-}
-.glyphicon-forward:before {
-  content: "\e075";
-}
-.glyphicon-fast-forward:before {
-  content: "\e076";
-}
-.glyphicon-step-forward:before {
-  content: "\e077";
-}
-.glyphicon-eject:before {
-  content: "\e078";
-}
-.glyphicon-chevron-left:before {
-  content: "\e079";
-}
-.glyphicon-chevron-right:before {
-  content: "\e080";
-}
-.glyphicon-plus-sign:before {
-  content: "\e081";
-}
-.glyphicon-minus-sign:before {
-  content: "\e082";
-}
-.glyphicon-remove-sign:before {
-  content: "\e083";
-}
-.glyphicon-ok-sign:before {
-  content: "\e084";
-}
-.glyphicon-question-sign:before {
-  content: "\e085";
-}
-.glyphicon-info-sign:before {
-  content: "\e086";
-}
-.glyphicon-screenshot:before {
-  content: "\e087";
-}
-.glyphicon-remove-circle:before {
-  content: "\e088";
-}
-.glyphicon-ok-circle:before {
-  content: "\e089";
-}
-.glyphicon-ban-circle:before {
-  content: "\e090";
-}
-.glyphicon-arrow-left:before {
-  content: "\e091";
-}
-.glyphicon-arrow-right:before {
-  content: "\e092";
-}
-.glyphicon-arrow-up:before {
-  content: "\e093";
-}
-.glyphicon-arrow-down:before {
-  content: "\e094";
-}
-.glyphicon-share-alt:before {
-  content: "\e095";
-}
-.glyphicon-resize-full:before {
-  content: "\e096";
-}
-.glyphicon-resize-small:before {
-  content: "\e097";
-}
-.glyphicon-exclamation-sign:before {
-  content: "\e101";
-}
-.glyphicon-gift:before {
-  content: "\e102";
-}
-.glyphicon-leaf:before {
-  content: "\e103";
-}
-.glyphicon-fire:before {
-  content: "\e104";
-}
-.glyphicon-eye-open:before {
-  content: "\e105";
-}
-.glyphicon-eye-close:before {
-  content: "\e106";
-}
-.glyphicon-warning-sign:before {
-  content: "\e107";
-}
-.glyphicon-plane:before {
-  content: "\e108";
-}
-.glyphicon-calendar:before {
-  content: "\e109";
-}
-.glyphicon-random:before {
-  content: "\e110";
-}
-.glyphicon-comment:before {
-  content: "\e111";
-}
-.glyphicon-magnet:before {
-  content: "\e112";
-}
-.glyphicon-chevron-up:before {
-  content: "\e113";
-}
-.glyphicon-chevron-down:before {
-  content: "\e114";
-}
-.glyphicon-retweet:before {
-  content: "\e115";
-}
-.glyphicon-shopping-cart:before {
-  content: "\e116";
-}
-.glyphicon-folder-close:before {
-  content: "\e117";
-}
-.glyphicon-folder-open:before {
-  content: "\e118";
-}
-.glyphicon-resize-vertical:before {
-  content: "\e119";
-}
-.glyphicon-resize-horizontal:before {
-  content: "\e120";
-}
-.glyphicon-hdd:before {
-  content: "\e121";
-}
-.glyphicon-bullhorn:before {
-  content: "\e122";
-}
-.glyphicon-bell:before {
-  content: "\e123";
-}
-.glyphicon-certificate:before {
-  content: "\e124";
-}
-.glyphicon-thumbs-up:before {
-  content: "\e125";
-}
-.glyphicon-thumbs-down:before {
-  content: "\e126";
-}
-.glyphicon-hand-right:before {
-  content: "\e127";
-}
-.glyphicon-hand-left:before {
-  content: "\e128";
-}
-.glyphicon-hand-up:before {
-  content: "\e129";
-}
-.glyphicon-hand-down:before {
-  content: "\e130";
-}
-.glyphicon-circle-arrow-right:before {
-  content: "\e131";
-}
-.glyphicon-circle-arrow-left:before {
-  content: "\e132";
-}
-.glyphicon-circle-arrow-up:before {
-  content: "\e133";
-}
-.glyphicon-circle-arrow-down:before {
-  content: "\e134";
-}
-.glyphicon-globe:before {
-  content: "\e135";
-}
-.glyphicon-wrench:before {
-  content: "\e136";
-}
-.glyphicon-tasks:before {
-  content: "\e137";
-}
-.glyphicon-filter:before {
-  content: "\e138";
-}
-.glyphicon-briefcase:before {
-  content: "\e139";
-}
-.glyphicon-fullscreen:before {
-  content: "\e140";
-}
-.glyphicon-dashboard:before {
-  content: "\e141";
-}
-.glyphicon-paperclip:before {
-  content: "\e142";
-}
-.glyphicon-heart-empty:before {
-  content: "\e143";
-}
-.glyphicon-link:before {
-  content: "\e144";
-}
-.glyphicon-phone:before {
-  content: "\e145";
-}
-.glyphicon-pushpin:before {
-  content: "\e146";
-}
-.glyphicon-usd:before {
-  content: "\e148";
-}
-.glyphicon-gbp:before {
-  content: "\e149";
-}
-.glyphicon-sort:before {
-  content: "\e150";
-}
-.glyphicon-sort-by-alphabet:before {
-  content: "\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
-  content: "\e152";
-}
-.glyphicon-sort-by-order:before {
-  content: "\e153";
-}
-.glyphicon-sort-by-order-alt:before {
-  content: "\e154";
-}
-.glyphicon-sort-by-attributes:before {
-  content: "\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
-  content: "\e156";
-}
-.glyphicon-unchecked:before {
-  content: "\e157";
-}
-.glyphicon-expand:before {
-  content: "\e158";
-}
-.glyphicon-collapse-down:before {
-  content: "\e159";
-}
-.glyphicon-collapse-up:before {
-  content: "\e160";
-}
-.glyphicon-log-in:before {
-  content: "\e161";
-}
-.glyphicon-flash:before {
-  content: "\e162";
-}
-.glyphicon-log-out:before {
-  content: "\e163";
-}
-.glyphicon-new-window:before {
-  content: "\e164";
-}
-.glyphicon-record:before {
-  content: "\e165";
-}
-.glyphicon-save:before {
-  content: "\e166";
-}
-.glyphicon-open:before {
-  content: "\e167";
-}
-.glyphicon-saved:before {
-  content: "\e168";
-}
-.glyphicon-import:before {
-  content: "\e169";
-}
-.glyphicon-export:before {
-  content: "\e170";
-}
-.glyphicon-send:before {
-  content: "\e171";
-}
-.glyphicon-floppy-disk:before {
-  content: "\e172";
-}
-.glyphicon-floppy-saved:before {
-  content: "\e173";
-}
-.glyphicon-floppy-remove:before {
-  content: "\e174";
-}
-.glyphicon-floppy-save:before {
-  content: "\e175";
-}
-.glyphicon-floppy-open:before {
-  content: "\e176";
-}
-.glyphicon-credit-card:before {
-  content: "\e177";
-}
-.glyphicon-transfer:before {
-  content: "\e178";
-}
-.glyphicon-cutlery:before {
-  content: "\e179";
-}
-.glyphicon-header:before {
-  content: "\e180";
-}
-.glyphicon-compressed:before {
-  content: "\e181";
-}
-.glyphicon-earphone:before {
-  content: "\e182";
-}
-.glyphicon-phone-alt:before {
-  content: "\e183";
-}
-.glyphicon-tower:before {
-  content: "\e184";
-}
-.glyphicon-stats:before {
-  content: "\e185";
-}
-.glyphicon-sd-video:before {
-  content: "\e186";
-}
-.glyphicon-hd-video:before {
-  content: "\e187";
-}
-.glyphicon-subtitles:before {
-  content: "\e188";
-}
-.glyphicon-sound-stereo:before {
-  content: "\e189";
-}
-.glyphicon-sound-dolby:before {
-  content: "\e190";
-}
-.glyphicon-sound-5-1:before {
-  content: "\e191";
-}
-.glyphicon-sound-6-1:before {
-  content: "\e192";
-}
-.glyphicon-sound-7-1:before {
-  content: "\e193";
-}
-.glyphicon-copyright-mark:before {
-  content: "\e194";
-}
-.glyphicon-registration-mark:before {
-  content: "\e195";
-}
-.glyphicon-cloud-download:before {
-  content: "\e197";
-}
-.glyphicon-cloud-upload:before {
-  content: "\e198";
-}
-.glyphicon-tree-conifer:before {
-  content: "\e199";
-}
-.glyphicon-tree-deciduous:before {
-  content: "\e200";
-}
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  margin-left: 2px;
-  vertical-align: middle;
-  border-top: 4px solid;
-  border-right: 4px solid transparent;
-  border-left: 4px solid transparent;
-}
-.dropdown {
-  position: relative;
-}
-.dropdown-toggle:focus {
-  outline: 0;
-}
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: 1000;
-  display: none;
-  float: left;
-  min-width: 160px;
-  padding: 5px 0;
-  margin: 2px 0 0;
-  list-style: none;
-  font-size: 18px;
-  background-color: #ffffff;
-  border: 1px solid #cccccc;
-  border: 1px solid #e7e7e7;
-  border-radius: 4px;
-  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-  background-clip: padding-box;
-}
-.dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-.dropdown-menu .divider {
-  height: 1px;
-  margin: 11.5px 0;
-  overflow: hidden;
-  background-color: #eeeeee;
-}
-.dropdown-menu > li > a {
-  display: block;
-  padding: 3px 20px;
-  clear: both;
-  font-weight: normal;
-  line-height: 1.42857143;
-  color: #999999;
-  white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-  text-decoration: none;
-  color: #333333;
-  background-color: transparent;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  color: #ffffff;
-  text-decoration: none;
-  outline: 0;
-  background-color: #158cba;
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  color: #eeeeee;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  background-color: transparent;
-  background-image: none;
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  cursor: not-allowed;
-}
-.open > .dropdown-menu {
-  display: block;
-}
-.open > a {
-  outline: 0;
-}
-.dropdown-menu-right {
-  left: auto;
-  right: 0;
-}
-.dropdown-menu-left {
-  left: 0;
-  right: auto;
-}
-.dropdown-header {
-  display: block;
-  padding: 3px 20px;
-  font-size: 16px;
-  line-height: 1.42857143;
-  color: #999999;
-}
-.dropdown-backdrop {
-  position: fixed;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  top: 0;
-  z-index: 990;
-}
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-  border-top: 0;
-  border-bottom: 4px solid;
-  content: "";
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 1px;
-}
-@media (min-width: 768px) {
-  .navbar-right .dropdown-menu {
-    left: auto;
-    right: 0;
-  }
-  .navbar-right .dropdown-menu-left {
-    left: 0;
-    right: auto;
-  }
-}
-.btn-group,
-.btn-group-vertical {
-  position: relative;
-  display: inline-block;
-  vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
-  position: relative;
-  float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
-  z-index: 2;
-}
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus {
-  outline: none;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
-  margin-left: -1px;
-}
-.btn-toolbar {
-  margin-left: -5px;
-}
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
-  float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
-  margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
-  border-radius: 0;
-}
-.btn-group > .btn:first-child {
-  margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
-  border-bottom-right-radius: 0;
-  border-top-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
-  border-bottom-left-radius: 0;
-  border-top-left-radius: 0;
-}
-.btn-group > .btn-group {
-  float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-.btn-group > .btn-group:first-child > .btn:last-child,
-.btn-group > .btn-group:first-child > .dropdown-toggle {
-  border-bottom-right-radius: 0;
-  border-top-right-radius: 0;
-}
-.btn-group > .btn-group:last-child > .btn:first-child {
-  border-bottom-left-radius: 0;
-  border-top-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
-  padding-left: 8px;
-  padding-right: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
-  padding-left: 12px;
-  padding-right: 12px;
-}
-.btn-group.open .dropdown-toggle {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
-  -webkit-box-shadow: none;
-  box-shadow: none;
-}
-.btn .caret {
-  margin-left: 0;
-}
-.btn-lg .caret {
-  border-width: 5px 5px 0;
-  border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
-  border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
-  display: block;
-  float: none;
-  width: 100%;
-  max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
-  float: none;
-}
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
-  margin-top: -1px;
-  margin-left: 0;
-}
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
-  border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
-  border-top-right-radius: 4px;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
-  border-bottom-left-radius: 4px;
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-}
-.btn-group-justified {
-  display: table;
-  width: 100%;
-  table-layout: fixed;
-  border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
-  float: none;
-  display: table-cell;
-  width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
-  width: 100%;
-}
-[data-toggle="buttons"] > .btn > input[type="radio"],
-[data-toggle="buttons"] > .btn > input[type="checkbox"] {
-  display: none;
-}
-.input-group {
-  position: relative;
-  display: table;
-  border-collapse: separate;
-}
-.input-group[class*="col-"] {
-  float: none;
-  padding-left: 0;
-  padding-right: 0;
-}
-.input-group .form-control {
-  position: relative;
-  z-index: 2;
-  float: left;
-  width: 100%;
-  margin-bottom: 0;
-}
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
-  height: 53px;
-  padding: 10px 16px;
-  font-size: 23px;
-  line-height: 1.33;
-  border-radius: 5px;
-}
-select.input-group-lg > .form-control,
-select.input-group-lg > .input-group-addon,
-select.input-group-lg > .input-group-btn > .btn {
-  height: 53px;
-  line-height: 53px;
-}
-textarea.input-group-lg > .form-control,
-textarea.input-group-lg > .input-group-addon,
-textarea.input-group-lg > .input-group-btn > .btn,
-select[multiple].input-group-lg > .form-control,
-select[multiple].input-group-lg > .input-group-addon,
-select[multiple].input-group-lg > .input-group-btn > .btn {
-  height: auto;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
-  height: 36px;
-  padding: 5px 10px;
-  font-size: 16px;
-  line-height: 1.5;
-  border-radius: 2px;
-}
-select.input-group-sm > .form-control,
-select.input-group-sm > .input-group-addon,
-select.input-group-sm > .input-group-btn > .btn {
-  height: 36px;
-  line-height: 36px;
-}
-textarea.input-group-sm > .form-control,
-textarea.input-group-sm > .input-group-addon,
-textarea.input-group-sm > .input-group-btn > .btn,
-select[multiple].input-group-sm > .form-control,
-select[multiple].input-group-sm > .input-group-addon,
-select[multiple].input-group-sm > .input-group-btn > .btn {
-  height: auto;
-}
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
-  display: table-cell;
-}
-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
-  border-radius: 0;
-}
-.input-group-addon,
-.input-group-btn {
-  width: 1%;
-  white-space: nowrap;
-  vertical-align: middle;
-}
-.input-group-addon {
-  padding: 6px 12px;
-  font-size: 18px;
-  font-weight: normal;
-  line-height: 1;
-  color: #555555;
-  text-align: center;
-  background-color: #eeeeee;
-  border: 1px solid #e7e7e7;
-  border-radius: 4px;
-}
-.input-group-addon.input-sm {
-  padding: 5px 10px;
-  font-size: 16px;
-  border-radius: 2px;
-}
-.input-group-addon.input-lg {
-  padding: 10px 16px;
-  font-size: 23px;
-  border-radius: 5px;
-}
-.input-group-addon input[type="radio"],
-.input-group-addon input[type="checkbox"] {
-  margin-top: 0;
-}
-.input-group .form-control:first-child,
-.input-group-addon:first-child,
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group > .btn,
-.input-group-btn:first-child > .dropdown-toggle,
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
-  border-bottom-right-radius: 0;
-  border-top-right-radius: 0;
-}
-.input-group-addon:first-child {
-  border-right: 0;
-}
-.input-group .form-control:last-child,
-.input-group-addon:last-child,
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group > .btn,
-.input-group-btn:last-child > .dropdown-toggle,
-.input-group-btn:first-child > .btn:not(:first-child),
-.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
-  border-bottom-left-radius: 0;
-  border-top-left-radius: 0;
-}
-.input-group-addon:last-child {
-  border-left: 0;
-}
-.input-group-btn {
-  position: relative;
-  font-size: 0;
-  white-space: nowrap;
-}
-.input-group-btn > .btn {
-  position: relative;
-}
-.input-group-btn > .btn + .btn {
-  margin-left: -1px;
-}
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:focus,
-.input-group-btn > .btn:active {
-  z-index: 2;
-}
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
-  margin-right: -1px;
-}
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group {
-  margin-left: -1px;
-}
-.nav {
-  margin-bottom: 0;
-  padding-left: 0;
-  list-style: none;
-}
-.nav > li {
-  position: relative;
-  display: block;
-}
-.nav > li > a {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
-  text-decoration: none;
-  background-color: #ffffff;
-}
-.nav > li.disabled > a {
-  color: #999999;
-}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
-  color: #999999;
-  text-decoration: none;
-  background-color: transparent;
-  cursor: not-allowed;
-}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
-  background-color: #ffffff;
-  border-color: #158cba;
-}
-.nav .nav-divider {
-  height: 1px;
-  margin: 11.5px 0;
-  overflow: hidden;
-  background-color: #e5e5e5;
-}
-.nav > li > a > img {
-  max-width: none;
-}
-.nav-tabs {
-  border-bottom: 1px solid #e7e7e7;
-}
-.nav-tabs > li {
-  float: left;
-  margin-bottom: -1px;
-}
-.nav-tabs > li > a {
-  margin-right: 2px;
-  line-height: 1.42857143;
-  border: 1px solid transparent;
-  border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
-  border-color: #eeeeee #eeeeee #e7e7e7;
-}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
-  color: #555555;
-  background-color: #ffffff;
-  border: 1px solid #e7e7e7;
-  border-bottom-color: transparent;
-  cursor: default;
-}
-.nav-tabs.nav-justified {
-  width: 100%;
-  border-bottom: 0;
-}
-.nav-tabs.nav-justified > li {
-  float: none;
-}
-.nav-tabs.nav-justified > li > a {
-  text-align: center;
-  margin-bottom: 5px;
-}
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
-  top: auto;
-  left: auto;
-}
-@media (min-width: 768px) {
-  .nav-tabs.nav-justified > li {
-    display: table-cell;
-    width: 1%;
-  }
-  .nav-tabs.nav-justified > li > a {
-    margin-bottom: 0;
-  }
-}
-.nav-tabs.nav-justified > li > a {
-  margin-right: 0;
-  border-radius: 4px;
-}
-.nav-tabs.nav-justified > .active > a,
-.nav-tabs.nav-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:focus {
-  border: 1px solid #e7e7e7;
-}
-@media (min-width: 768px) {
-  .nav-tabs.nav-justified > li > a {
-    border-bottom: 1px solid #e7e7e7;
-    border-radius: 4px 4px 0 0;
-  }
-  .nav-tabs.nav-justified > .active > a,
-  .nav-tabs.nav-justified > .active > a:hover,
-  .nav-tabs.nav-justified > .active > a:focus {
-    border-bottom-color: #ffffff;
-  }
-}
-.nav-pills > li {
-  float: left;
-}
-.nav-pills > li > a {
-  border-radius: 4px;
-}
-.nav-pills > li + li {
-  margin-left: 2px;
-}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
-  color: #ffffff;
-  background-color: #158cba;
-}
-.nav-stacked > li {
-  float: none;
-}
-.nav-stacked > li + li {
-  margin-top: 2px;
-  margin-left: 0;
-}
-.nav-justified {
-  width: 100%;
-}
-.nav-justified > li {
-  float: none;
-}
-.nav-justified > li > a {
-  text-align: center;
-  margin-bottom: 5px;
-}
-.nav-justified > .dropdown .dropdown-menu {
-  top: auto;
-  left: auto;
-}
-@media (min-width: 768px) {
-  .nav-justified > li {
-    display: table-cell;
-    width: 1%;
-  }
-  .nav-justified > li > a {
-    margin-bottom: 0;
-  }
-}
-.nav-tabs-justified {
-  border-bottom: 0;
-}
-.nav-tabs-justified > li > a {
-  margin-right: 0;
-  border-radius: 4px;
-}
-.nav-tabs-justified > .active > a,
-.nav-tabs-justified > .active > a:hover,
-.nav-tabs-justified > .active > a:focus {
-  border: 1px solid #e7e7e7;
-}
-@media (min-width: 768px) {
-  .nav-tabs-justified > li > a {
-    border-bottom: 1px solid #e7e7e7;
-    border-radius: 4px 4px 0 0;
-  }
-  .nav-tabs-justified > .active > a,
-  .nav-tabs-justified > .active > a:hover,
-  .nav-tabs-justified > .active > a:focus {
-    border-bottom-color: #ffffff;
-  }
-}
-.tab-content > .tab-pane {
-  display: none;
-}
-.tab-content > .active {
-  display: block;
-}
-.nav-tabs .dropdown-menu {
-  margin-top: -1px;
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-}
-.navbar {
-  position: relative;
-  min-height: 50px;
-  margin-bottom: 25px;
-  border: 1px solid transparent;
-}
-@media (min-width: 768px) {
-  .navbar {
-    border-radius: 4px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-header {
-    float: left;
-  }
-}
-.navbar-collapse {
-  max-height: 340px;
-  overflow-x: visible;
-  padding-right: 15px;
-  padding-left: 15px;
-  border-top: 1px solid transparent;
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
-  -webkit-overflow-scrolling: touch;
-}
-.navbar-collapse.in {
-  overflow-y: auto;
-}
-@media (min-width: 768px) {
-  .navbar-collapse {
-    width: auto;
-    border-top: 0;
-    box-shadow: none;
-  }
-  .navbar-collapse.collapse {
-    display: block !important;
-    height: auto !important;
-    padding-bottom: 0;
-    overflow: visible !important;
-  }
-  .navbar-collapse.in {
-    overflow-y: visible;
-  }
-  .navbar-fixed-top .navbar-collapse,
-  .navbar-static-top .navbar-collapse,
-  .navbar-fixed-bottom .navbar-collapse {
-    padding-left: 0;
-    padding-right: 0;
-  }
-}
-.container > .navbar-header,
-.container-fluid > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-collapse {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-@media (min-width: 768px) {
-  .container > .navbar-header,
-  .container-fluid > .navbar-header,
-  .container > .navbar-collapse,
-  .container-fluid > .navbar-collapse {
-    margin-right: 0;
-    margin-left: 0;
-  }
-}
-.navbar-static-top {
-  z-index: 1000;
-  border-width: 0 0 1px;
-}
-@media (min-width: 768px) {
-  .navbar-static-top {
-    border-radius: 0;
-  }
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  position: fixed;
-  right: 0;
-  left: 0;
-  z-index: 1030;
-}
-@media (min-width: 768px) {
-  .navbar-fixed-top,
-  .navbar-fixed-bottom {
-    border-radius: 0;
-  }
-}
-.navbar-fixed-top {
-  top: 0;
-  border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
-  bottom: 0;
-  margin-bottom: 0;
-  border-width: 1px 0 0;
-}
-.navbar-brand {
-  float: left;
-  padding: 12.5px 15px;
-  font-size: 23px;
-  line-height: 25px;
-  height: 50px;
-}
-.navbar-brand:hover,
-.navbar-brand:focus {
-  text-decoration: none;
-}
-@media (min-width: 768px) {
-  .navbar > .container .navbar-brand,
-  .navbar > .container-fluid .navbar-brand {
-    margin-left: -15px;
-  }
-}
-.navbar-toggle {
-  position: relative;
-  float: right;
-  margin-right: 15px;
-  padding: 9px 10px;
-  margin-top: 8px;
-  margin-bottom: 8px;
-  background-color: transparent;
-  background-image: none;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-.navbar-toggle:focus {
-  outline: none;
-}
-.navbar-toggle .icon-bar {
-  display: block;
-  width: 22px;
-  height: 2px;
-  border-radius: 1px;
-}
-.navbar-toggle .icon-bar + .icon-bar {
-  margin-top: 4px;
-}
-@media (min-width: 768px) {
-  .navbar-toggle {
-    display: none;
-  }
-}
-.navbar-nav {
-  margin: 6.25px -15px;
-}
-.navbar-nav > li > a {
-  padding-top: 10px;
-  padding-bottom: 10px;
-  line-height: 25px;
-}
-@media (max-width: 767px) {
-  .navbar-nav .open .dropdown-menu {
-    position: static;
-    float: none;
-    width: auto;
-    margin-top: 0;
-    background-color: transparent;
-    border: 0;
-    box-shadow: none;
-  }
-  .navbar-nav .open .dropdown-menu > li > a,
-  .navbar-nav .open .dropdown-menu .dropdown-header {
-    padding: 5px 15px 5px 25px;
-  }
-  .navbar-nav .open .dropdown-menu > li > a {
-    line-height: 25px;
-  }
-  .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-nav .open .dropdown-menu > li > a:focus {
-    background-image: none;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-nav {
-    float: left;
-    margin: 0;
-  }
-  .navbar-nav > li {
-    float: left;
-  }
-  .navbar-nav > li > a {
-    padding-top: 12.5px;
-    padding-bottom: 12.5px;
-  }
-  .navbar-nav.navbar-right:last-child {
-    margin-right: -15px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-left {
-    float: left !important;
-  }
-  .navbar-right {
-    float: right !important;
-  }
-}
-.navbar-form {
-  margin-left: -15px;
-  margin-right: -15px;
-  padding: 10px 15px;
-  border-top: 1px solid transparent;
-  border-bottom: 1px solid transparent;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-  margin-top: 4.5px;
-  margin-bottom: 4.5px;
-}
-@media (min-width: 768px) {
-  .navbar-form .form-group {
-    display: inline-block;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .form-control {
-    display: inline-block;
-    width: auto;
-    vertical-align: middle;
-  }
-  .navbar-form .input-group > .form-control {
-    width: 100%;
-  }
-  .navbar-form .control-label {
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .radio,
-  .navbar-form .checkbox {
-    display: inline-block;
-    margin-top: 0;
-    margin-bottom: 0;
-    padding-left: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .radio input[type="radio"],
-  .navbar-form .checkbox input[type="checkbox"] {
-    float: none;
-    margin-left: 0;
-  }
-  .navbar-form .has-feedback .form-control-feedback {
-    top: 0;
-  }
-}
-@media (max-width: 767px) {
-  .navbar-form .form-group {
-    margin-bottom: 5px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-form {
-    width: auto;
-    border: 0;
-    margin-left: 0;
-    margin-right: 0;
-    padding-top: 0;
-    padding-bottom: 0;
-    -webkit-box-shadow: none;
-    box-shadow: none;
-  }
-  .navbar-form.navbar-right:last-child {
-    margin-right: -15px;
-  }
-}
-.navbar-nav > li > .dropdown-menu {
-  margin-top: 0;
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-}
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.navbar-btn {
-  margin-top: 4.5px;
-  margin-bottom: 4.5px;
-}
-.navbar-btn.btn-sm {
-  margin-top: 7px;
-  margin-bottom: 7px;
-}
-.navbar-btn.btn-xs {
-  margin-top: 14px;
-  margin-bottom: 14px;
-}
-.navbar-text {
-  margin-top: 12.5px;
-  margin-bottom: 12.5px;
-}
-@media (min-width: 768px) {
-  .navbar-text {
-    float: left;
-    margin-left: 15px;
-    margin-right: 15px;
-  }
-  .navbar-text.navbar-right:last-child {
-    margin-right: 0;
-  }
-}
-.navbar-default {
-  background-color: #f8f8f8;
-  border-color: #e7e7e7;
-}
-.navbar-default .navbar-brand {
-  color: #222222;
-}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
-  color: #222222;
-  background-color: transparent;
-}
-.navbar-default .navbar-text {
-  color: #555555;
-}
-.navbar-default .navbar-nav > li > a {
-  color: #333333;
-}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
-  color: #222222;
-  background-color: transparent;
-}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
-  color: #222222;
-  background-color: transparent;
-}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
-  color: #eeeeee;
-  background-color: transparent;
-}
-.navbar-default .navbar-toggle {
-  border-color: #eeeeee;
-}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
-  background-color: #ffffff;
-}
-.navbar-default .navbar-toggle .icon-bar {
-  background-color: #999999;
-}
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
-  border-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
-  background-color: transparent;
-  color: #222222;
-}
-@media (max-width: 767px) {
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
-    color: #333333;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
-    color: #222222;
-    background-color: transparent;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #222222;
-    background-color: transparent;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-    color: #eeeeee;
-    background-color: transparent;
-  }
-}
-.navbar-default .navbar-link {
-  color: #333333;
-}
-.navbar-default .navbar-link:hover {
-  color: #222222;
-}
-.navbar-inverse {
-  background-color: #ffffff;
-  border-color: #e6e6e6;
-}
-.navbar-inverse .navbar-brand {
-  color: #999999;
-}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
-  color: #333333;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-text {
-  color: #999999;
-}
-.navbar-inverse .navbar-nav > li > a {
-  color: #999999;
-}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
-  color: #333333;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
-  color: #333333;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
-  color: #eeeeee;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-toggle {
-  border-color: #eeeeee;
-}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
-  background-color: #eeeeee;
-}
-.navbar-inverse .navbar-toggle .icon-bar {
-  background-color: #999999;
-}
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
-  border-color: #ededed;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
-  background-color: transparent;
-  color: #333333;
-}
-@media (max-width: 767px) {
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
-    border-color: #e6e6e6;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
-    background-color: #e6e6e6;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
-    color: #999999;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
-    color: #333333;
-    background-color: transparent;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #333333;
-    background-color: transparent;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-    color: #eeeeee;
-    background-color: transparent;
-  }
-}
-.navbar-inverse .navbar-link {
-  color: #999999;
-}
-.navbar-inverse .navbar-link:hover {
-  color: #333333;
-}
-.breadcrumb {
-  padding: 8px 15px;
-  margin-bottom: 25px;
-  list-style: none;
-  background-color: #fafafa;
-  border-radius: 4px;
-}
-.breadcrumb > li {
-  display: inline-block;
-}
-.breadcrumb > li + li:before {
-  content: ">\00a0";
-  padding: 0 5px;
-  color: #999999;
-}
-.breadcrumb > .active {
-  color: #999999;
-}
-.pagination {
-  display: inline-block;
-  padding-left: 0;
-  margin: 25px 0;
-  border-radius: 4px;
-}
-.pagination > li {
-  display: inline;
-}
-.pagination > li > a,
-.pagination > li > span {
-  position: relative;
-  float: left;
-  padding: 6px 12px;
-  line-height: 1.42857143;
-  text-decoration: none;
-  color: #555555;
-  background-color: #eeeeee;
-  border: 1px solid #e2e2e2;
-  margin-left: -1px;
-}
-.pagination > li:first-child > a,
-.pagination > li:first-child > span {
-  margin-left: 0;
-  border-bottom-left-radius: 4px;
-  border-top-left-radius: 4px;
-}
-.pagination > li:last-child > a,
-.pagination > li:last-child > span {
-  border-bottom-right-radius: 4px;
-  border-top-right-radius: 4px;
-}
-.pagination > li > a:hover,
-.pagination > li > span:hover,
-.pagination > li > a:focus,
-.pagination > li > span:focus {
-  color: #555555;
-  background-color: #eeeeee;
-  border-color: #e2e2e2;
-}
-.pagination > .active > a,
-.pagination > .active > span,
-.pagination > .active > a:hover,
-.pagination > .active > span:hover,
-.pagination > .active > a:focus,
-.pagination > .active > span:focus {
-  z-index: 2;
-  color: #ffffff;
-  background-color: #158cba;
-  border-color: #127ba3;
-  cursor: default;
-}
-.pagination > .disabled > span,
-.pagination > .disabled > span:hover,
-.pagination > .disabled > span:focus,
-.pagination > .disabled > a,
-.pagination > .disabled > a:hover,
-.pagination > .disabled > a:focus {
-  color: #999999;
-  background-color: #eeeeee;
-  border-color: #e2e2e2;
-  cursor: not-allowed;
-}
-.pagination-lg > li > a,
-.pagination-lg > li > span {
-  padding: 10px 16px;
-  font-size: 23px;
-}
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
-  border-bottom-left-radius: 5px;
-  border-top-left-radius: 5px;
-}
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
-  border-bottom-right-radius: 5px;
-  border-top-right-radius: 5px;
-}
-.pagination-sm > li > a,
-.pagination-sm > li > span {
-  padding: 5px 10px;
-  font-size: 16px;
-}
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
-  border-bottom-left-radius: 2px;
-  border-top-left-radius: 2px;
-}
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
-  border-bottom-right-radius: 2px;
-  border-top-right-radius: 2px;
-}
-.pager {
-  padding-left: 0;
-  margin: 25px 0;
-  list-style: none;
-  text-align: center;
-}
-.pager li {
-  display: inline;
-}
-.pager li > a,
-.pager li > span {
-  display: inline-block;
-  padding: 5px 14px;
-  background-color: #eeeeee;
-  border: 1px solid #e2e2e2;
-  border-radius: 15px;
-}
-.pager li > a:hover,
-.pager li > a:focus {
-  text-decoration: none;
-  background-color: #eeeeee;
-}
-.pager .next > a,
-.pager .next > span {
-  fl

<TRUNCATED>

[14/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/state_machine.svg
----------------------------------------------------------------------
diff --git a/docs/img/state_machine.svg b/docs/img/state_machine.svg
deleted file mode 100644
index 8d0f570..0000000
--- a/docs/img/state_machine.svg
+++ /dev/null
@@ -1,318 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="664.92505"
-   height="445.67966"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.5 r10040">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.35"
-     inkscape:cx="332.46252"
-     inkscape:cy="222.83984"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1600"
-     inkscape:window-height="838"
-     inkscape:window-x="1912"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-42.537478,-309.52235)">
-    <g
-       id="g2989"
-       transform="translate(-103.51453,206.80922)">
-      <path
-         id="path2991"
-         d="m 146.68029,340.95994 c 0,-20.55512 16.69166,-37.20927 37.28429,-37.20927 20.59263,0 37.26553,16.65415 37.26553,37.20927 0,20.53637 -16.6729,37.19052 -37.26553,37.19052 -20.59263,0 -37.28429,-16.65415 -37.28429,-37.19052"
-         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path2993"
-         d="m 146.68029,340.95994 c 0,-20.55512 16.69166,-37.20927 37.28429,-37.20927 20.59263,0 37.26553,16.65415 37.26553,37.20927 0,20.53637 -16.6729,37.19052 -37.26553,37.19052 -20.59263,0 -37.28429,-16.65415 -37.28429,-37.19052"
-         style="fill:none;stroke:#41719c;stroke-width:1.25656307px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text2995"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="346.5697"
-         x="148.55054"
-         xml:space="preserve">CREATED</text>
-      <path
-         id="path2997"
-         d="m 321.56761,238.20309 c 0,-20.59263 16.69166,-37.28429 37.28429,-37.28429 20.59263,0 37.26553,16.69166 37.26553,37.28429 0,20.57388 -16.6729,37.26554 -37.26553,37.26554 -20.59263,0 -37.28429,-16.69166 -37.28429,-37.26554"
-         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path2999"
-         d="m 321.56761,238.20309 c 0,-20.59263 16.69166,-37.28429 37.28429,-37.28429 20.59263,0 37.26553,16.69166 37.26553,37.28429 0,20.57388 -16.6729,37.26554 -37.26553,37.26554 -20.59263,0 -37.28429,-16.69166 -37.28429,-37.26554"
-         style="fill:none;stroke:#41719c;stroke-width:1.25656307px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3001"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="234.7578"
-         x="335.63348"
-         xml:space="preserve">SCHE</text>
-      <text
-         id="text3003"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="234.7578"
-         x="377.34387"
-         xml:space="preserve">-</text>
-      <text
-         id="text3005"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="252.76228"
-         x="333.53293"
-         xml:space="preserve">DULED</text>
-      <path
-         id="path3007"
-         d="m 295.94873,509.20811 c 0,-20.59263 16.69166,-37.28429 37.26553,-37.28429 20.59263,0 37.28429,16.69166 37.28429,37.28429 0,20.57387 -16.69166,37.26553 -37.28429,37.26553 -20.57387,0 -37.26553,-16.69166 -37.26553,-37.26553"
-         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3009"
-         d="m 294.11077,511.15859 -0.0375,-1.95048 0.0563,-2.02551 0.15003,-1.98799 0.24381,-1.95049 0.33759,-1.91298 0.4126,-1.78169 3.65716,0.82521 -0.39385,1.74418 0.0188,-0.0938 -0.33759,1.83795 0.0188,-0.11252 -0.22506,1.87546 0,-0.0938 -0.15004,1.89422 0,-0.0938 -0.0375,1.91298 0,-0.075 0.0375,1.91297 -3.75093,0.075 z m 2.36309,-15.45385 0.67517,-1.74418 0.78769,-1.74419 0.86272,-1.66916 0.93773,-1.63166 1.01275,-1.59415 1.10653,-1.53788 0.28132,-0.37509 2.96324,2.30682 -0.26257,0.33759 0.0375,-0.075 -1.0315,1.46286 0.0563,-0.075 -0.97524,1.51913 0.0563,-0.0563 -0.90022,1.55664 0.0375,-0.0938 -0.82521,1.6129 0.0375,-0.0938 -0.75019,1.65041 0.0375,-0.0938 -0.65641,1.70667 -3.48837,-1.36909 z m 8.21455,-13.29706 0.84396,-0.88147 1.36909,-1.31283 1.42535,-1.21905 1.48162,-1.16279 1.51913,-1.08777 1.59415,-1.01275 1.01275,-0.5814 1.85671,3.24456 -0.95649,0.56264 0.075,-0.0563 -1.50037,0.97524 0.0563,-0.0375 -1.46286,1.03151 0.075,-0.0563 -1.4066,1.10653 0.075,-0.0563 -1.36909,1.16
 279 0.075,-0.0563 -1.29407,1.23781 0.0563,-0.075 -0.80645,0.86271 -2.71942,-2.58814 z m 12.73442,-9.021 0.56264,-0.26256 1.78169,-0.69393 1.81921,-0.6189 1.85671,-0.52513 1.89422,-0.43136 1.91298,-0.33758 1.53788,-0.2063 0.48762,3.71342 -1.50037,0.2063 0.0938,-0.0188 -1.8192,0.31883 0.075,-0.0188 -1.80045,0.41261 0.0938,-0.0188 -1.76294,0.50638 0.075,-0.0188 -1.72543,0.5814 0.0938,-0.0375 -1.68792,0.65641 0.075,-0.0375 -0.50637,0.24381 -1.55664,-3.41335 z m 15.30381,-3.31957 0.48762,-0.0188 2.02551,0.0563 1.98799,0.15004 1.95049,0.26257 1.93173,0.33758 1.89422,0.43136 1.38785,0.39385 -1.03151,3.60089 -1.35034,-0.37509 0.11253,0.0188 -1.80045,-0.41261 0.075,0.0188 -1.83796,-0.31883 0.0938,0.0188 -1.85672,-0.24381 0.0938,0.0188 -1.89422,-0.15004 0.11252,0 -1.93173,-0.0563 0.0938,0 -0.45012,0.0188 -0.0938,-3.75093 z m 15.37883,2.92572 0.35634,0.13129 1.72543,0.78769 1.70668,0.88147 1.63165,0.93774 1.57539,1.01275 1.53789,1.08777 1.48162,1.16279 0.11252,0.0938 -2.4381,2.85071 -0.0938,-0
 .075 0.075,0.0563 -1.4066,-1.10653 0.075,0.0563 -1.46286,-1.03151 0.0563,0.0375 -1.50037,-0.97524 0.075,0.0563 -1.55664,-0.90022 0.075,0.0375 -1.61291,-0.82521 0.0938,0.0375 -1.65041,-0.75019 0.075,0.0375 -0.31883,-0.11253 1.38784,-3.48837 z m 13.0345,8.75844 1.06902,1.12528 1.21905,1.42535 1.16279,1.48162 1.08777,1.53788 1.01275,1.59415 0.95649,1.63166 0.37509,0.71268 -3.33833,1.72543 -0.35634,-0.69393 0.0375,0.0938 -0.90022,-1.55664 0.0563,0.0563 -0.97524,-1.51913 0.0563,0.075 -1.05026,-1.46286 0.0563,0.075 -1.10653,-1.4066 0.0563,0.075 -1.16279,-1.35033 0.0563,0.0563 -1.03151,-1.08777 2.71943,-2.58814 z m 8.49587,13.09076 0.35633,0.90022 0.61891,1.81921 0.52513,1.85671 0.43136,1.91297 0.35634,1.91298 0.24381,1.95049 0.0938,1.12528 -3.75093,0.30007 -0.075,-1.08777 0,0.0938 -0.22506,-1.87546 0.0188,0.11252 -0.33759,-1.83795 0.0188,0.0938 -0.41261,-1.8192 0.0188,0.11253 -0.50638,-1.76294 0.0375,0.075 -0.58139,-1.74418 0.0375,0.0938 -0.33759,-0.84396 3.46962,-1.38784 z m 2.71942,15.4
 1634 -0.0375,0.97524 -0.15003,1.96924 -0.24381,1.95049 -0.35634,1.93173 -0.43136,1.89422 -0.52513,1.87547 -0.33759,0.994 -3.54463,-1.2003 0.31883,-0.95649 -0.0375,0.075 0.50638,-1.76294 -0.0188,0.0938 0.41261,-1.80045 -0.0188,0.0938 0.33759,-1.83796 -0.0188,0.0938 0.22506,-1.87547 0,0.0938 0.15003,-1.87547 -0.0188,0.0938 0.0375,-0.91898 3.75093,0.0938 z m -3.54463,15.24755 -0.30007,0.67516 -0.86272,1.68793 -0.95649,1.63165 -1.01275,1.59415 -1.08777,1.53788 -1.16279,1.48162 -1.05026,1.21905 -2.83196,-2.45686 1.01275,-1.18154 -0.0563,0.0563 1.10653,-1.4066 -0.0563,0.075 1.05026,-1.46286 -0.0563,0.075 0.97524,-1.50038 -0.0563,0.0563 0.90022,-1.55664 -0.0375,0.0938 0.82521,-1.6129 -0.0375,0.075 0.28132,-0.63766 3.41335,1.55664 z m -9.18979,12.62189 -0.075,0.0563 -1.42535,1.2378 -1.48162,1.16279 -1.53789,1.08777 -1.57539,1.01276 -1.65041,0.93773 -1.68792,0.88147 -0.43136,0.18755 -1.53788,-3.41335 0.39385,-0.18755 -0.0938,0.0563 1.61291,-0.8252 -0.075,0.0375 1.55664,-0.90023 -0.075,0.0375
  1.51913,-0.95649 -0.0938,0.0375 1.46287,-1.0315 -0.0563,0.0563 1.4066,-1.10653 -0.075,0.0563 1.3691,-1.18155 -0.075,0.0563 0.0375,-0.0188 2.58814,2.71943 z m -13.50336,8.04576 -1.25657,0.4126 -1.85671,0.54388 -1.89422,0.43136 -1.93173,0.33759 -1.95049,0.24381 -1.98799,0.16879 -0.69393,0.0187 -0.0938,-3.75093 0.63766,-0.0188 -0.0938,0 1.89422,-0.15003 -0.0938,0.0188 1.85672,-0.24381 -0.0938,0.0188 1.83796,-0.31882 -0.075,0 1.80045,-0.41261 -0.11253,0.0375 1.7817,-0.50637 -0.075,0.0188 1.2003,-0.4126 1.2003,3.56339 z m -15.51012,2.08176 -1.38784,-0.11252 -1.95049,-0.24381 -1.93173,-0.33759 -1.89422,-0.43136 -1.85671,-0.54388 -1.81921,-0.60015 -0.65641,-0.26257 1.38784,-3.48837 0.60015,0.24382 -0.0938,-0.0375 1.72543,0.58139 -0.075,-0.0188 1.76294,0.50637 -0.0938,-0.0375 1.80045,0.41261 -0.075,0 1.83796,0.31882 -0.11253,-0.0188 1.87546,0.24381 -0.0938,-0.0188 1.35034,0.11252 -0.30008,3.73218 z m -15.07875,-4.12602 -0.97525,-0.50638 -1.63165,-0.93773 -1.59415,-1.01276 -1.51913,-1.08777
  -1.48162,-1.16279 -1.42535,-1.2378 -0.93774,-0.88147 2.58815,-2.71943 0.90022,0.84396 -0.075,-0.0563 1.36909,1.18155 -0.075,-0.0563 1.4066,1.10653 -0.075,-0.0563 1.46286,1.0315 -0.075,-0.0375 1.51913,0.95649 -0.075,-0.0375 1.55664,0.90023 -0.075,-0.0563 0.91898,0.48762 -1.70667,3.33834 z m -12.2468,-9.71492 -0.26257,-0.30008 -1.16279,-1.48162 -1.08777,-1.53788 -1.03151,-1.59415 -0.93773,-1.63165 -0.86272,-1.68793 -0.78769,-1.74418 -0.0563,-0.11253 3.50713,-1.36909 0.0188,0.075 -0.0375,-0.0938 0.75019,1.65041 -0.0375,-0.075 0.82521,1.59415 -0.0375,-0.0563 0.88147,1.55664 -0.0563,-0.0938 0.97524,1.51913 -0.0375,-0.075 1.0315,1.46286 -0.0375,-0.075 1.10653,1.4066 -0.0563,-0.0563 0.24382,0.28132 -2.85071,2.43811 z m -7.50187,-13.78469 -0.46887,-1.65041 -0.45011,-1.89422 -0.33759,-1.91298 -0.26256,-1.96924 -0.13128,-1.95048 3.73217,-0.26257 0.15004,1.89422 -0.0187,-0.11253 0.24381,1.87547 -0.0188,-0.0938 0.33759,1.83796 -0.0188,-0.0938 0.41261,1.80045 -0.0188,-0.0938 0.45011,1.59414 -3.
 60089,1.03151 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3011"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="505.84799"
-         x="300.4566"
-         xml:space="preserve">CANCEL</text>
-      <text
-         id="text3013"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="505.84799"
-         x="361.37177"
-         xml:space="preserve">-</text>
-      <text
-         id="text3015"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="523.85248"
-         x="322.81216"
-         xml:space="preserve">ED</text>
-      <path
-         id="path3017"
-         d="m 681.84486,143.17317 c 0,-20.59263 16.65415,-37.28429 37.17177,-37.28429 20.55512,0 37.20926,16.69166 37.20926,37.28429 0,20.59263 -16.65414,37.28429 -37.20926,37.28429 -20.51762,0 -37.17177,-16.69166 -37.17177,-37.28429"
-         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3019"
-         d="m 680.00691,145.16116 -0.0375,-1.98799 0.0375,-2.02551 0.15003,-1.95048 0.26257,-1.988 0.33758,-1.91297 0.41261,-1.76294 3.6384,0.8252 -0.37509,1.72543 0,-0.075 -0.33758,1.83796 0.0375,-0.11253 -0.26256,1.87547 0.0375,-0.11253 -0.15004,1.91298 0,-0.11253 -0.0375,1.91298 0,-0.075 0.0375,1.91298 -3.75093,0.11252 z m 2.32558,-15.41634 0,-0.0375 0.71267,-1.76294 0.75019,-1.72543 0.86272,-1.68792 0.93773,-1.65041 1.05026,-1.57539 1.08777,-1.53788 0.30008,-0.3751 2.92573,2.32558 -0.26257,0.33759 0.0375,-0.075 -1.01275,1.46286 0.0375,-0.075 -0.97525,1.50038 0.075,-0.075 -0.90022,1.53788 0.0375,-0.075 -0.82521,1.61291 0.0375,-0.075 -0.75019,1.65041 0.0375,-0.075 -0.67516,1.68792 0.0375,-0.075 0,0 -3.52587,-1.23781 z m 8.21454,-13.35332 0.86272,-0.90023 1.35033,-1.27532 1.42536,-1.2378 1.46286,-1.16279 1.53789,-1.08777 1.57539,-1.05027 1.01275,-0.56264 1.87547,3.26332 -0.97524,0.56264 0.075,-0.075 -1.50037,0.97524 0.075,-0.0375 -1.46287,1.05026 0.075,-0.075 -1.38784,1.12528 0.037
 5,-0.075 -1.35034,1.16279 0.075,-0.0375 -1.27532,1.2378 0.0375,-0.075 -0.7877,0.86271 -2.73818,-2.58814 z m 12.75318,-9.03976 0.52513,-0.26256 1.76294,-0.67517 1.83796,-0.63766 1.83796,-0.52513 1.87546,-0.4126 1.95049,-0.33759 1.53788,-0.22505 0.48762,3.71342 -1.50037,0.22506 0.075,-0.0375 -1.83796,0.33758 0.11253,-0.0375 -1.80045,0.41261 0.075,0 -1.76294,0.48762 0.075,0 -1.72543,0.56264 0.11253,-0.0375 -1.68792,0.67517 0.075,-0.0375 -0.48762,0.22505 -1.53788,-3.41335 z m 15.2663,-3.30082 0.45012,-0.0375 2.0255,0.075 1.98799,0.15004 1.95049,0.26256 1.91298,0.33759 1.91297,0.4126 1.42536,0.4126 -1.01275,3.6009 -1.42536,-0.37509 0.11253,0 -1.80045,-0.41261 0.075,0.0375 -1.80045,-0.33758 0.075,0.0375 -1.83796,-0.26257 0.075,0.0375 -1.87547,-0.15003 0.075,0 -1.91297,-0.075 0.11252,0 -0.4126,0.0375 -0.11253,-3.75094 z m 15.37883,2.92573 0.30008,0.11253 1.72543,0.78769 1.68792,0.90023 1.65041,0.93773 1.57539,1.01276 1.53789,1.08777 1.46286,1.16279 0.18755,0.15003 -2.47562,2.85071 -0.15004
 ,-0.15003 0.075,0.075 -1.38784,-1.12528 0.075,0.075 -1.46286,-1.05026 0.075,0.0375 -1.50037,-0.93773 0.075,0.0375 -1.57539,-0.90023 0.075,0.0375 -1.57539,-0.8252 0.075,0.0375 -1.65041,-0.75019 0.075,0.0375 -0.26256,-0.11253 1.38784,-3.48837 z m 13.01575,8.8147 1.01275,1.05026 1.2003,1.42535 1.16279,1.50038 1.08777,1.53788 1.01275,1.57539 0.93773,1.65041 0.45012,0.82521 -3.37584,1.68792 -0.3751,-0.7877 0.0375,0.075 -0.90022,-1.53788 0.0375,0.075 -0.93774,-1.50038 0.0375,0.075 -1.05026,-1.46286 0.075,0.075 -1.12528,-1.42536 0.0375,0.075 -1.16279,-1.38785 0.075,0.075 -0.97525,-1.01275 2.73819,-2.58814 z m 8.4396,13.12827 0.33758,0.78769 0.60015,1.83796 0.52513,1.83796 0.45012,1.91298 0.33758,1.91297 0.22506,1.95049 0.11252,1.23781 -3.75093,0.30007 -0.075,-1.2003 0,0.11253 -0.22506,-1.87547 0,0.11253 -0.33758,-1.83796 0.0375,0.075 -0.4126,-1.80045 0.0375,0.075 -0.52513,-1.76294 0.0375,0.11253 -0.60015,-1.72543 0.0375,0.075 -0.30007,-0.75019 3.48837,-1.38784 z m 2.66316,15.41634 0,0.8627
 1 -0.15003,1.988 -0.26257,1.95048 -0.33758,1.91298 -0.45012,1.91298 -0.52513,1.87546 -0.37509,1.08778 -3.56339,-1.2003 0.3751,-1.05027 -0.0375,0.075 0.52513,-1.76294 -0.0375,0.11253 0.4126,-1.83796 -0.0375,0.11253 0.33758,-1.83796 0,0.075 0.22506,-1.87546 0,0.11252 0.15004,-1.87546 0,0.075 0,-0.7877 3.75093,0.075 z m -3.56339,15.22879 -0.26256,0.60015 -0.86272,1.68792 -0.93773,1.6129 -1.01275,1.61291 -1.08777,1.53788 -1.16279,1.46286 -1.12528,1.31283 -2.85071,-2.43811 1.12528,-1.27532 -0.075,0.075 1.12528,-1.42535 -0.075,0.075 1.05026,-1.46287 -0.0375,0.075 0.93774,-1.50037 -0.0375,0.075 0.90022,-1.5754 -0.0375,0.075 0.82521,-1.6129 -0.0375,0.11253 0.22505,-0.56264 3.41335,1.53788 z m -9.30231,12.67816 -1.31283,1.16279 -1.46286,1.16279 -1.53789,1.08777 -1.57539,1.01275 -1.65041,0.93774 -1.68792,0.86271 -0.56264,0.26257 -1.53788,-3.41335 0.52513,-0.26257 -0.075,0.075 1.57539,-0.82521 -0.075,0.0375 1.57539,-0.90022 -0.075,0.0375 1.50037,-0.97524 -0.075,0.075 1.46286,-1.05026 -0.075,0.
 0375 1.38784,-1.08777 -0.075,0.0375 1.31283,-1.08777 2.43811,2.8132 z m -13.42835,7.95198 -1.12528,0.37509 -1.83796,0.52514 -1.91297,0.45011 -1.91298,0.33758 -1.95049,0.22506 -1.98799,0.18754 -0.86272,0 -0.075,-3.75093 0.78769,0 -0.11253,0 1.91298,-0.15004 -0.11253,0 1.87547,-0.22505 -0.075,0 1.80045,-0.30008 -0.075,0 1.80045,-0.4126 -0.11253,0.0375 1.76294,-0.52513 -0.075,0.0375 1.08777,-0.3751 1.2003,3.56339 z m -15.52887,2.02551 -1.2003,-0.11253 -1.95048,-0.22506 -1.95049,-0.33758 -1.87546,-0.45011 -1.83796,-0.52514 -1.83796,-0.60015 -0.82521,-0.33758 1.38785,-3.48837 0.7877,0.30008 -0.11253,-0.0375 1.72543,0.60015 -0.075,-0.0375 1.76294,0.52513 -0.075,-0.0375 1.80045,0.4126 -0.11253,-0.0375 1.83796,0.33759 -0.075,0 1.83796,0.22505 -0.075,0 1.16279,0.075 -0.30008,3.75094 z m -15.04124,-4.20105 -0.7877,-0.4126 -1.65041,-0.93774 -1.57539,-1.01275 -1.53789,-1.08777 -1.46286,-1.16279 -1.42536,-1.23781 -1.08777,-1.05026 2.58815,-2.70067 1.05026,1.01275 -0.075,-0.075 1.35034,1.16279 -0
 .0375,-0.0375 1.38784,1.08777 -0.075,-0.0375 1.46287,1.01275 -0.075,-0.0375 1.50037,0.97524 -0.075,-0.0375 1.57539,0.90022 -0.075,-0.0375 0.71268,0.3751 -1.68792,3.33833 z m -12.19054,-9.78994 -0.11253,-0.15004 -1.16279,-1.46286 -1.12528,-1.53788 -1.01275,-1.61291 -0.90023,-1.6129 -0.90022,-1.68792 -0.75019,-1.72543 -0.15003,-0.33758 3.48837,-1.38785 0.11252,0.30008 -0.0375,-0.075 0.75019,1.65041 -0.0375,-0.11253 0.82521,1.6129 -0.0375,-0.075 0.90022,1.5754 -0.075,-0.075 0.97525,1.50037 -0.0375,-0.075 1.01275,1.46287 -0.0375,-0.075 1.12528,1.42535 -0.075,-0.075 0.11253,0.11253 -2.85071,2.43811 z m -7.42685,-13.84095 -0.37509,-1.42535 -0.45012,-1.87547 -0.33758,-1.95049 -0.26257,-1.95048 -0.15003,-1.95049 3.75093,-0.26256 0.15004,1.87546 -0.0375,-0.075 0.26256,1.83795 -0.0375,-0.075 0.33758,1.83796 -0.0375,-0.11253 0.45011,1.80045 -0.0375,-0.075 0.3751,1.35034 -3.6009,1.05026 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3021"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="148.84201"
-         x="693.09564"
-         xml:space="preserve">FAILED</text>
-      <path
-         id="path3023"
-         d="m 214.00957,303.30056 3.76968,-6.8267 3.86347,-6.75168 1.96924,-3.31958 2.04426,-3.26331 2.10052,-3.22581 2.17554,-3.11327 2.25056,-3.03826 2.34434,-2.94448 2.4381,-2.83196 2.56939,-2.70067 2.68192,-2.58815 2.83196,-2.41935 2.96324,-2.28807 3.11327,-2.10052 3.26331,-1.91298 3.41335,-1.76294 3.56339,-1.59414 3.67592,-1.42536 3.8072,-1.31283 3.88221,-1.16279 3.99475,-1.06901 4.08852,-0.93774 4.16353,-0.88147 4.21981,-0.76894 4.27606,-0.71268 4.33233,-0.67516 8.73968,-1.2003 6.97674,-0.86272 0.22505,1.85672 -6.95798,0.88146 0,-0.0188 -8.72092,1.2003 0,0 -4.31358,0.65641 0.0188,0 -4.25731,0.71268 0.0188,0 -4.20105,0.7877 0.0188,-0.0188 -4.14478,0.86272 0.0188,0 -4.05101,0.95649 0.0188,-0.0188 -3.95724,1.05026 0.0187,0 -3.86346,1.16279 0.0375,-0.0187 -3.75093,1.29407 0.0375,0 -3.63841,1.4066 0.0375,-0.0187 -3.52588,1.57539 0.0563,-0.0188 -3.37585,1.72543 0.0563,-0.0188 -3.22581,1.89422 0.0375,-0.0375 -3.05701,2.06301 0.0375,-0.0188 -2.90697,2.23181 0.0375,-0.0375 -2.77569,2.4
 0059 0.0375,-0.0375 -2.66316,2.55063 0.0375,-0.0375 -2.53188,2.68192 0.0188,-0.0375 -2.41935,2.8132 0.0375,-0.0375 -2.32558,2.92573 0.0188,-0.0375 -2.23181,3.0195 0.0188,-0.0375 -2.15679,3.11328 0,-0.0188 -2.08177,3.18829 0,-0.0188 -2.02551,3.24456 0.0188,0 -1.96924,3.30083 0,-0.0188 -3.84471,6.73293 0.0188,0 -3.76969,6.8267 z m 92.01042,-67.0292 9.47111,4.03226 -8.1958,6.2453 c -0.4126,0.31883 -0.99399,0.24381 -1.31282,-0.16879 -0.30008,-0.4126 -0.22506,-0.994 0.18754,-1.31283 l 6.90172,-5.27006 0.20631,1.6129 -7.98949,-3.41335 c -0.48763,-0.2063 -0.69393,-0.76894 -0.50638,-1.23781 0.2063,-0.48762 0.76894,-0.69392 1.23781,-0.48762 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3025"
-         d="m 217.92929,373.68684 8.32708,6.92048 8.27081,6.88296 4.06976,3.43211 4.0135,3.41335 3.95724,3.41335 3.90097,3.35709 3.8072,3.35708 3.71342,3.31958 3.61965,3.30082 3.50713,3.24456 3.39459,3.2258 3.26332,3.16954 3.11327,3.13203 2.96324,3.09452 2.8132,3.03826 2.66316,3.00075 2.51313,2.94448 2.38184,2.90698 2.26932,2.86946 2.15679,2.83196 2.04426,2.8132 1.95048,2.75693 1.87547,2.75694 1.80045,2.71943 1.74418,2.70067 1.68792,2.68192 3.26331,5.34508 2.21306,3.69467 -1.59415,0.95649 -2.23181,-3.69467 0,0.0188 -3.24456,-5.32632 0,0 -1.68792,-2.66317 0,0 -1.72543,-2.68191 0,0 -1.78169,-2.70068 0,0 -1.85671,-2.73818 0,0.0188 -1.95049,-2.75694 0.0188,0 -2.04426,-2.79445 0.0188,0.0188 -2.13803,-2.8132 0,0.0188 -2.25056,-2.86946 0,0.0187 -2.36309,-2.88822 0,0.0188 -2.49437,-2.94449 0.0188,0.0188 -2.64441,-2.982 0,0.0188 -2.79444,-3.03826 0.0188,0.0188 -2.96324,-3.07577 0.0188,0.0187 -3.11328,-3.13203 0.0188,0.0188 -3.24456,-3.16954 0,0 -3.37584,-3.20705 0,0 -3.50712,-3.24456 0.0187,
 0 -3.61965,-3.28207 0,0 -3.71343,-3.30082 0,0 -3.78844,-3.35708 0,0.0187 -3.88222,-3.37584 0,0 -3.95723,-3.3946 0,0.0188 -4.0135,-3.41335 0,0 -4.06977,-3.43211 0,0 -8.2333,-6.88296 -8.32707,-6.92048 z m 91.3165,88.10946 0.15004,10.29631 -9.03975,-4.95123 c -0.45012,-0.24381 -0.61891,-0.82521 -0.35634,-1.27532 0.24381,-0.45011 0.80645,-0.61891 1.25656,-0.37509 l 7.63315,4.18229 -1.4066,0.8252 -0.11253,-8.68341 c 0,-0.50638 0.41261,-0.93773 0.93774,-0.93773 0.50637,-0.0188 0.93773,0.39384 0.93773,0.91898 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3027"
-         d="m 451.44372,238.20309 c 0,-20.59263 16.69165,-37.28429 37.28428,-37.28429 20.59263,0 37.26554,16.69166 37.26554,37.28429 0,20.57388 -16.67291,37.26554 -37.26554,37.26554 -20.59263,0 -37.28428,-16.69166 -37.28428,-37.26554"
-         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3029"
-         d="m 451.44372,238.20309 c 0,-20.59263 16.69165,-37.28429 37.28428,-37.28429 20.59263,0 37.26554,16.69166 37.26554,37.28429 0,20.57388 -16.67291,37.26554 -37.26554,37.26554 -20.59263,0 -37.28428,-16.69166 -37.28428,-37.26554"
-         style="fill:none;stroke:#41719c;stroke-width:1.25656307px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3031"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="234.7578"
-         x="456.54681"
-         xml:space="preserve">DEPLOY</text>
-      <text
-         id="text3033"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="234.7578"
-         x="516.11163"
-         xml:space="preserve">-</text>
-      <text
-         id="text3035"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="252.76228"
-         x="475.45154"
-         xml:space="preserve">ING</text>
-      <path
-         id="path3037"
-         d="m 734.65802,356.82639 c 0,-20.59263 16.65415,-37.28428 37.20927,-37.28428 20.51761,0 37.17176,16.69165 37.17176,37.28428 0,20.59263 -16.65415,37.28429 -37.17176,37.28429 -20.55512,0 -37.20927,-16.69166 -37.20927,-37.28429"
-         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3039"
-         d="m 732.82006,358.77688 -0.0375,-1.95049 0.0375,-1.98799 0.15004,-2.02551 0.26257,-1.95048 0.33758,-1.91298 0.4126,-1.76294 3.63841,0.82521 -0.37509,1.72543 0,-0.075 -0.30008,1.83796 0,-0.11253 -0.22505,1.87547 0,-0.11253 -0.15004,1.91298 0,-0.11253 -0.0375,1.91297 0,-0.075 0.0375,1.91297 -3.75094,0.075 z m 2.36309,-15.45385 0.67517,-1.72543 0.7877,-1.72543 0.86271,-1.68792 0.93774,-1.65041 1.01275,-1.57539 1.08777,-1.5754 0.30007,-0.37509 2.92573,2.32558 -0.26256,0.33758 0.075,-0.075 -1.05027,1.46286 0.0375,-0.075 -0.93773,1.53788 0.0375,-0.075 -0.90023,1.53788 0.0375,-0.075 -0.8252,1.6129 0.0375,-0.075 -0.71268,1.65041 0.0375,-0.11252 -0.67517,1.72543 -3.48837,-1.38785 z m 8.21455,-13.27831 0.8252,-0.90022 1.35034,-1.31283 1.42536,-1.2003 1.46286,-1.16279 1.53788,-1.08777 1.5754,-1.05026 1.05026,-0.56264 1.83796,3.26331 -0.97525,0.56264 0.11253,-0.075 -1.53788,0.97525 0.075,-0.0375 -1.46287,1.05026 0.075,-0.075 -1.38785,1.08777 0.075,-0.0375 -1.35033,1.16279 0.075,-0.037
 5 -1.31283,1.23781 0.075,-0.075 -0.82521,0.86272 -2.70067,-2.58815 z m 12.71567,-9.03975 0.52513,-0.26257 1.80045,-0.67516 1.80044,-0.63766 1.83796,-0.52513 1.91298,-0.41261 1.91298,-0.33758 1.57539,-0.22506 0.48762,3.71343 -1.53788,0.22506 0.075,-0.0375 -1.83796,0.33758 0.11253,-0.0375 -1.80045,0.4126 0.11252,0 -1.76293,0.48762 0.075,0 -1.72543,0.56265 0.075,-0.0375 -1.68792,0.67516 0.075,-0.0375 -0.45011,0.22506 -1.57539,-3.41335 z m 15.30381,-3.30082 0.45011,-0.0375 1.988,0.075 1.98799,0.15003 1.95049,0.26257 1.95048,0.33758 1.87547,0.41261 1.46287,0.4126 -1.05027,3.63841 -1.38784,-0.41261 0.075,0 -1.80045,-0.4126 0.11253,0.0375 -1.83796,-0.33758 0.075,0.0375 -1.83796,-0.26257 0.075,0.0375 -1.87547,-0.15004 0.075,0 -1.91298,-0.075 0.11253,0 -0.4126,0.0375 -0.075,-3.75093 z m 15.37883,2.92573 0.26257,0.11252 1.76294,0.7877 1.65041,0.90023 1.65041,0.90022 1.57539,1.05026 1.53788,1.08777 1.46287,1.16279 0.22505,0.15004 -2.47561,2.85071 -0.15004,-0.15004 0.0375,0.0375 -1.38785,-1.087
 77 0.075,0.075 -1.46286,-1.05026 0.075,0.0375 -1.50038,-0.97525 0.075,0.075 -1.53788,-0.90022 0.075,0.0375 -1.61291,-0.82521 0.075,0.0375 -1.65041,-0.75019 0.075,0.0375 -0.22506,-0.11252 1.38785,-3.48837 z m 12.97823,8.81469 1.01276,1.05026 1.2378,1.42536 1.16279,1.50037 1.05027,1.53789 1.05026,1.57539 0.93773,1.65041 0.4126,0.82521 -3.33833,1.68792 -0.4126,-0.7877 0.0375,0.075 -0.86272,-1.53788 0.0375,0.075 -0.97524,-1.53788 0.0375,0.075 -1.01275,-1.46286 0.0375,0.075 -1.08777,-1.38784 0.0375,0.075 -1.16278,-1.35034 0.0375,0.0375 -0.93773,-1.01275 2.70067,-2.58815 z m 8.47712,13.12827 0.30007,0.7877 0.60015,1.83796 0.56264,1.83796 0.4126,1.91297 0.33759,1.91298 0.26256,1.95048 0.11253,1.23781 -3.75093,0.30008 -0.11253,-1.2003 0.0375,0.11253 -0.26257,-1.87547 0.0375,0.11253 -0.33758,-1.83796 0,0.075 -0.41261,-1.80045 0.0375,0.11253 -0.48762,-1.76294 0,0.075 -0.56264,-1.76294 0.0375,0.11253 -0.30007,-0.75019 3.48837,-1.38785 z m 2.66316,15.41634 -0.0375,0.86272 -0.15004,1.98799 -0.26
 256,1.95049 -0.33759,1.91298 -0.4126,1.91297 -0.52513,1.87547 -0.37509,1.08777 -3.56339,-1.2003 0.37509,-1.05026 -0.0375,0.075 0.48762,-1.76294 -0.0375,0.075 0.41261,-1.80045 0,0.11253 0.33758,-1.83796 -0.0375,0.075 0.26257,-1.87547 0,0.11253 0.11253,-1.87547 0,0.075 0.0375,-0.78769 3.75094,0.075 z m -3.56339,15.2288 -0.26256,0.60015 -0.86272,1.68792 -0.93773,1.6129 -1.05026,1.6129 -1.05027,1.53788 -1.16279,1.46287 -1.16279,1.31283 -2.8132,-2.43811 1.08777,-1.27532 -0.0375,0.0375 1.08777,-1.38785 -0.0375,0.075 1.01275,-1.46286 -0.0375,0.075 0.97524,-1.53789 -0.0375,0.11253 0.86272,-1.57539 -0.0375,0.075 0.8252,-1.6129 -0.0375,0.075 0.22505,-0.52514 3.45086,1.53789 z m -9.30232,12.67816 -1.35033,1.16279 -1.46287,1.12528 -1.53788,1.12528 -1.57539,1.01275 -1.65041,0.93773 -1.68792,0.86272 -0.56264,0.26256 -1.53789,-3.41335 0.52513,-0.26256 -0.075,0.075 1.61291,-0.82521 -0.11253,0.0375 1.57539,-0.90022 -0.075,0.0375 1.50038,-0.97524 -0.075,0.075 1.46286,-1.05026 -0.075,0.0375 1.42536,-1
 .08777 -0.075,0.0375 1.27532,-1.12528 2.47561,2.85071 z m -13.46585,7.95198 -1.08777,0.37509 -1.87547,0.52513 -1.91298,0.45011 -1.91297,0.33759 -1.95049,0.22505 -1.98799,0.18755 -0.86272,0 -0.075,-3.75093 0.7877,0 -0.075,0 1.87547,-0.15004 -0.075,0 1.83796,-0.22506 -0.075,0 1.83796,-0.33758 -0.11253,0.0375 1.80045,-0.4126 -0.075,0.0375 1.76294,-0.52513 -0.075,0.0375 1.05026,-0.37509 1.2003,3.56339 z m -15.52887,2.0255 -1.2003,-0.11253 -1.95048,-0.22505 -1.91298,-0.33759 -1.91298,-0.45011 -1.83796,-0.52513 -1.80044,-0.60015 -0.86272,-0.33758 1.38785,-3.48837 0.78769,0.30007 -0.075,-0.0375 1.72543,0.60015 -0.11252,-0.0375 1.80044,0.52513 -0.11252,-0.0375 1.80045,0.4126 -0.11253,-0.0375 1.83796,0.33758 -0.075,0 1.83795,0.22506 -0.075,0 1.16279,0.075 -0.30008,3.75093 z m -15.04125,-4.20104 -0.78769,-0.41261 -1.65041,-0.93773 -1.5754,-1.01275 -1.53788,-1.12528 -1.46286,-1.16279 -1.42536,-1.2003 -1.08777,-1.05026 2.58814,-2.70068 1.05027,0.97525 -0.0375,-0.0375 1.35033,1.16279 -0.075,-0.0
 375 1.38785,1.08777 -0.075,-0.0375 1.46287,1.01275 -0.075,-0.0375 1.50037,0.97524 -0.075,-0.0375 1.5754,0.90022 -0.075,-0.0375 0.75018,0.37509 -1.72543,3.33834 z m -12.19053,-9.78994 -0.11253,-0.15004 -1.16279,-1.46287 -1.08777,-1.53788 -1.01275,-1.6129 -0.93774,-1.6129 -0.86271,-1.68792 -0.7877,-1.76294 -0.15004,-0.30008 3.48837,-1.38784 0.15004,0.30007 -0.0375,-0.11253 0.71268,1.65042 -0.0375,-0.075 0.8252,1.6129 -0.0375,-0.075 0.90023,1.57539 -0.0375,-0.075 0.93773,1.50038 -0.0375,-0.075 1.05027,1.46286 -0.075,-0.075 1.12528,1.38785 -0.075,-0.0375 0.11253,0.11253 -2.85071,2.43811 z m -7.42685,-13.84095 -0.3751,-1.42536 -0.45011,-1.87546 -0.33758,-1.95049 -0.26257,-1.95049 -0.15004,-1.95048 3.75094,-0.26257 0.15004,1.87547 0,-0.11253 0.22505,1.87547 -0.0375,-0.075 0.33759,1.83796 0,-0.11253 0.4126,1.80045 -0.0375,-0.075 0.4126,1.38785 -3.6384,1.01275 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3041"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="362.3895"
-         x="736.9231"
-         xml:space="preserve">FINISHED</text>
-      <path
-         id="path3043"
-         d="m 586.49611,238.22185 c 0,-20.59263 16.69166,-37.28429 37.28429,-37.28429 20.59263,0 37.24678,16.69166 37.24678,37.28429 0,20.55512 -16.65415,37.24678 -37.24678,37.24678 -20.59263,0 -37.28429,-16.69166 -37.28429,-37.24678"
-         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3045"
-         d="m 586.49611,238.22185 c 0,-20.59263 16.69166,-37.28429 37.28429,-37.28429 20.59263,0 37.24678,16.69166 37.24678,37.28429 0,20.55512 -16.65415,37.24678 -37.24678,37.24678 -20.59263,0 -37.28429,-16.69166 -37.28429,-37.24678"
-         style="fill:none;stroke:#41719c;stroke-width:1.23780835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3047"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="243.76004"
-         x="588.8797"
-         xml:space="preserve">RUNNING</text>
-      <path
-         id="path3049"
-         d="m 400.97489,237.17159 38.40957,0 0,1.87546 -38.40957,0 z m 31.37657,-4.23856 8.88971,5.17629 -8.88971,5.19504 c -0.45011,0.26257 -1.03151,0.11253 -1.29407,-0.33758 -0.26257,-0.45011 -0.11253,-1.01275 0.33758,-1.27532 l 7.50187,-4.38859 0,1.63165 -7.50187,-4.38859 c -0.43136,-0.26256 -0.60015,-0.8252 -0.33758,-1.27532 0.26256,-0.45011 0.84396,-0.60015 1.29407,-0.33758 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3051"
-         d="m 535.53967,237.17159 38.40957,0 0,1.87546 -38.40957,0 z m 31.37656,-4.23856 8.88972,5.17629 -8.88972,5.19504 c -0.45011,0.26257 -1.0315,0.11253 -1.29407,-0.33758 -0.26256,-0.45011 -0.0938,-1.01275 0.33758,-1.27532 l 7.50187,-4.38859 0,1.63165 -7.50187,-4.38859 c -0.43135,-0.26256 -0.60014,-0.8252 -0.33758,-1.27532 0.26257,-0.45011 0.84396,-0.60015 1.29407,-0.33758 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3053"
-         d="m 672.58006,252.85049 6.60164,5.2138 6.52663,5.17629 6.4141,5.10127 3.15078,2.55064 3.07577,2.51312 3.03825,2.47562 2.96324,2.47562 2.88822,2.4381 2.8132,2.4006 2.70067,2.36309 2.58815,2.28807 2.51313,2.28807 2.40059,2.21305 2.25056,2.17554 2.17555,2.13804 2.0255,2.10052 1.95049,2.0255 1.87546,2.02551 1.76294,1.95048 1.68792,1.95049 1.61291,1.91298 1.57539,1.87546 1.50037,1.87547 2.85071,3.63841 2.77569,3.6384 1.5754,2.06302 -1.50038,1.12528 -1.57539,-2.06302 0,0 -2.73818,-3.60089 0,0 -2.85071,-3.63841 0,0 -1.50038,-1.83796 0,0 -1.53788,-1.87546 0,0 -1.6129,-1.87547 0,0 -1.68792,-1.95049 0.0375,0.0375 -1.76294,-1.98799 0,0.0375 -1.83796,-2.02551 0,0.0375 -1.95049,-2.06301 0.0375,0.0375 -2.06301,-2.10053 0.0375,0.0375 -2.17554,-2.13803 0.0375,0 -2.28807,-2.13803 0.0375,0 -2.4006,-2.21305 0,0 -2.47562,-2.28807 0,0.0375 -2.58814,-2.32557 0,0 -2.70068,-2.32558 0,0 -2.8132,-2.4006 0.0375,0 -2.88822,-2.43811 0,0 -2.96324,-2.43811 0,0 -3.00074,-2.47561 0,0 -3.11328,-2.51313 -3.
 15078,-2.55063 0.0375,0 -6.4141,-5.10128 0,0 -6.52663,-5.17629 -6.60164,-5.17628 z m 72.46805,60.69012 1.2003,10.24005 -9.48986,-3.97599 c -0.48763,-0.22505 -0.71268,-0.78769 -0.52514,-1.23781 0.22506,-0.48762 0.75019,-0.71267 1.23781,-0.52513 l 7.98949,3.37584 -1.27531,0.97525 -1.01276,-8.62715 c -0.0375,-0.48762 0.30008,-0.97525 0.82521,-1.01276 0.52513,-0.075 0.97524,0.30008 1.05026,0.7877 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3055"
-         d="m 350.97494,285.22106 -1.35034,12.71566 -1.33158,12.67816 -1.29407,12.56563 -1.27532,12.43435 -0.61891,6.15153 -0.58139,6.09527 -0.60015,6.03901 -0.56264,5.98274 -0.54389,5.88896 -0.52513,5.85146 -0.48762,5.73893 -0.48762,5.66391 -0.45011,5.57014 -0.43136,5.47636 -0.39385,5.40135 -0.39385,5.32633 -0.35633,5.2513 -0.33759,5.17629 -0.33758,5.13878 -0.31883,5.06377 -0.5814,10.03375 -0.56264,9.86495 -0.52513,9.78994 -0.4126,7.87696 1.87547,0.0938 0.4126,-7.87696 0.52513,-9.77119 0.54389,-9.88371 0.60015,-10.015 0,0.0188 0.31882,-5.08252 0.31883,-5.12002 0.35634,-5.19505 0.35634,-5.23255 0,0 0.3751,-5.32633 0.4126,-5.38259 0,0 0.43136,-5.47636 0.45011,-5.57014 0,0 0.46886,-5.64516 0.50638,-5.75768 0,0 0.52513,-5.81395 0.54389,-5.90772 0.56264,-5.96399 0,0 0.58139,-6.039 0.60015,-6.09527 0,0 0.61891,-6.15153 1.25656,-12.43435 1.31283,-12.56563 1.33158,-12.65941 1.33158,-12.71566 z m -18.64215,170.53623 4.70743,9.15228 5.66391,-8.60839 c 0.28132,-0.43136 0.15003,-1.01276 -0.281
 32,-1.29408 -0.43136,-0.28132 -1.01276,-0.16879 -1.29408,0.26257 l -4.76368,7.25806 1.6129,0.0938 -3.97599,-7.72692 c -0.22506,-0.46887 -0.7877,-0.63766 -1.25656,-0.41261 -0.46887,0.24381 -0.63766,0.80645 -0.41261,1.27532 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3057"
-         d="m 452.38145,422.93661 c 0,-20.59263 16.69166,-37.28428 37.28429,-37.28428 20.59263,0 37.26553,16.69165 37.26553,37.28428 0,20.57388 -16.6729,37.26554 -37.26553,37.26554 -20.59263,0 -37.28429,-16.69166 -37.28429,-37.26554"
-         style="fill:#5b9bd5;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3059"
-         d="m 452.38145,422.93661 c 0,-20.59263 16.69166,-37.28428 37.28429,-37.28428 20.59263,0 37.26553,16.69165 37.26553,37.28428 0,20.57388 -16.6729,37.26554 -37.26553,37.26554 -20.59263,0 -37.28429,-16.69166 -37.28429,-37.26554"
-         style="fill:none;stroke:#41719c;stroke-width:1.25656307px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3061"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="419.47919"
-         x="456.86319"
-         xml:space="preserve">CANCEL</text>
-      <text
-         id="text3063"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="419.47919"
-         x="517.77838"
-         xml:space="preserve">-</text>
-      <text
-         id="text3065"
-         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
-         y="437.48367"
-         x="476.36804"
-         xml:space="preserve">ING</text>
-      <path
-         id="path3067"
-         d="m 440.69729,443.60426 -69.86116,41.52285 0.95649,1.6129 69.86116,-41.52285 z m -65.99769,34.26479 -4.98875,9.00224 10.29632,-0.075 c 0.50638,0 0.93773,-0.43135 0.91898,-0.95649 0,-0.50637 -0.4126,-0.91897 -0.93774,-0.91897 l -8.68341,0.075 0.82521,1.38785 4.2198,-7.59564 c 0.24381,-0.45011 0.075,-1.03151 -0.3751,-1.27532 -0.45011,-0.24381 -1.01275,-0.0938 -1.27531,0.35634 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3069"
-         d="m 491.63498,285.23981 -1.01275,12.60314 -0.50638,6.22655 -0.46887,6.18904 -0.46886,6.05776 -0.43136,5.96399 -0.39385,5.8327 -0.37509,5.66391 -0.33759,5.47637 -0.30007,5.32632 -0.26257,5.17629 -0.24381,5.06376 -0.22505,4.96999 -0.2063,4.89497 -0.31883,7.83946 1.85671,0.075 0.31883,-7.82069 0.2063,-4.91373 0,0 0.22506,-4.95123 0.24381,-5.06376 0,0 0.28132,-5.17629 0,0 0.30007,-5.30758 0,0 0.31883,-5.47636 0,0 0.37509,-5.64516 0.41261,-5.81394 0.43135,-5.96399 0,0 0.45012,-6.07651 0.48762,-6.17029 0.48762,-6.22655 1.01275,-12.60314 z m -9.52737,80.08245 4.81995,9.09602 5.55138,-8.68342 c 0.28132,-0.43135 0.15004,-1.01275 -0.28132,-1.29407 -0.43136,-0.28132 -1.01275,-0.15004 -1.29407,0.28132 l -4.68867,7.33308 1.63165,0.0563 -4.06976,-7.67066 c -0.24381,-0.45011 -0.80645,-0.63766 -1.27532,-0.39385 -0.45011,0.24381 -0.6189,0.80645 -0.39384,1.27532 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3071"
-         d="m 610.01447,278.05677 -4.05101,8.73968 -4.05101,8.70217 -4.12603,8.55213 -2.10052,4.23855 -2.13803,4.16354 -2.13803,4.12603 -2.21306,4.05101 -2.21305,4.0135 -2.28807,3.90097 -2.32558,3.78844 -2.36309,3.75094 -2.40059,3.60089 -2.51313,3.52588 -2.51313,3.41335 -2.62565,3.30083 -2.62565,3.18829 -2.70068,3.07577 -2.73818,3.00074 -2.77569,2.92573 -2.8132,2.85071 -2.85071,2.77569 -2.88822,2.70068 -2.92573,2.66316 -5.85146,5.2138 -5.92647,5.06376 -4.53863,3.82595 -1.2003,-1.42535 4.50112,-3.82595 0,0 5.92647,-5.06377 0,0 5.85146,-5.17629 0,0 2.88822,-2.62565 0,0 2.85071,-2.70067 0,0 2.85071,-2.77569 -0.0375,0 2.8132,-2.81321 0,0 2.73819,-2.88821 0,0 2.73818,-3.00075 -0.0375,0.0375 2.70067,-3.07577 -0.0375,0 2.66316,-3.15078 -0.0375,0 2.58814,-3.26332 0,0.0375 2.51313,-3.37584 0,0 2.47561,-3.48837 -0.0375,0 2.4006,-3.60089 0,0.0375 2.36309,-3.71342 0,0 2.28807,-3.78844 0,0 2.25056,-3.86347 0,0 2.21305,-3.97599 0,0 2.17554,-4.0135 0,0 2.17555,-4.12603 -0.0375,0.0375 2.13803,-4.16
 353 0,0 2.10052,-4.23856 0,0.0375 4.12603,-8.58964 0,0.0375 4.05101,-8.70217 0,0 4.05101,-8.73968 z m -70.59259,107.87688 -10.12752,1.76293 3.45086,-9.67741 c 0.15004,-0.48762 0.71268,-0.75018 1.2003,-0.60015 0.48762,0.18755 0.75019,0.71268 0.56264,1.2003 l -2.92573,8.17704 -1.05026,-1.23781 8.58964,-1.46286 c 0.48762,-0.11253 0.97524,0.22505 1.08777,0.75018 0.075,0.52514 -0.26257,0.97525 -0.7877,1.08778 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3073"
-         d="m 637.47131,198.34941 2.70067,-3.56338 2.66317,-3.52588 2.70067,-3.41335 2.70067,-3.33833 2.70067,-3.1883 1.35034,-1.50037 1.38785,-1.46287 1.35033,-1.42535 1.38785,-1.35034 1.38784,-1.27532 1.38785,-1.2378 1.35034,-1.12528 1.42535,-1.05027 1.38785,-0.97524 1.38784,-0.93773 1.38785,-0.86272 1.42535,-0.8252 2.7757,-1.46287 2.8132,-1.31282 2.77569,-1.2003 2.8132,-1.12528 1.05026,-0.3751 0.63766,1.72543 -1.01275,0.4126 0,0 -2.77569,1.08778 0.0375,0 -2.7757,1.20029 0.0375,-0.0375 -2.77569,1.31282 0.0375,-0.0375 -2.73818,1.46287 0,0 -1.35034,0.78769 0,-0.0375 -1.35033,0.86272 0,0 -1.35034,0.90022 0,0 -1.35034,0.93774 0.0375,0 -1.38784,1.05026 0.0375,-0.0375 -1.35034,1.12528 0,-0.0375 -1.35034,1.2003 0,0 -1.35033,1.23781 0.0375,0 -1.38785,1.31283 0.0375,0 -1.35034,1.38784 0,0 -1.35033,1.42536 0.0375,0 -1.35034,1.50037 0,0 -2.70067,3.15078 0.0375,-0.0375 -2.70068,3.33833 0,0 -2.66316,3.41335 0,0 -2.70067,3.48837 0,0 -2.66317,3.56338 z m 34.20852,-37.99696 10.16503,1.65041 -6.45
 16,8.027 c -0.33759,0.4126 -0.93774,0.48762 -1.31283,0.15004 -0.4126,-0.33759 -0.48762,-0.90023 -0.15004,-1.31283 l 5.43886,-6.78919 0.56264,1.53788 -8.55213,-1.42535 c -0.52513,-0.075 -0.86272,-0.56264 -0.7877,-1.08778 0.11253,-0.48762 0.56264,-0.8252 1.08777,-0.75018 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3075"
-         d="m 499.737,198.08685 12.60314,-7.53938 6.30157,-3.75093 6.26406,-3.71343 6.26406,-3.63841 6.18904,-3.56338 6.18904,-3.48837 6.15153,-3.37584 6.07652,-3.30083 6.039,-3.11327 6.0015,-3.00075 5.88896,-2.8132 5.85146,-2.66316 5.77644,-2.47562 5.66391,-2.25056 2.8132,-1.08777 2.77569,-0.97524 2.7757,-0.93774 2.73818,-0.86271 5.40134,-1.61291 5.28882,-1.38784 5.25131,-1.2003 5.13878,-1.01275 5.10127,-0.86272 5.02625,-0.71267 4.95124,-0.56264 4.91372,-0.45012 4.87622,-0.37509 4.8387,-0.26257 4.8012,-0.22505 4.76368,-0.11253 4.76369,-0.11253 7.57689,-0.075 0.0375,1.87547 -7.57689,0.075 0,0 -4.76369,0.11253 0,0 -4.76368,0.11253 0.0375,0 -4.8012,0.22505 0.0375,0 -4.83871,0.26257 0.0375,0 -4.87621,0.33758 0.0375,0 -4.91373,0.48762 0.0375,0 -4.95123,0.56264 0,0 -4.98874,0.71268 0.0375,0 -5.06377,0.82521 0.0375,0 -5.13878,1.01275 0.0375,0 -5.2138,1.2003 0.0375,0 -5.28881,1.38784 0,-0.0375 -5.36384,1.61291 0.0375,0 -2.73818,0.86271 0,0 -2.73819,0.90022 0.0375,0 -2.77569,1.01276 0,-0.03
 75 -2.77569,1.05026 0,0 -5.66391,2.25056 0.0375,0 -5.73893,2.43811 0,0 -5.81395,2.66316 0.0375,0 -5.88897,2.8132 0,0 -5.96398,2.96324 0,0 -6.03901,3.15078 0.0375,-0.0375 -6.07651,3.26331 0,0 -6.11402,3.37584 0,0 -6.18905,3.48837 0,0 -6.18904,3.56339 0,0 -6.26406,3.6384 0,0 -6.26406,3.71343 0.0375,0 -6.30157,3.75093 -12.60314,7.53938 z m 168.00435,-65.67886 8.92723,5.06376 -8.8147,5.28882 c -0.45011,0.26256 -1.01275,0.15003 -1.27532,-0.30008 -0.26256,-0.45011 -0.15004,-1.01275 0.30008,-1.31283 l 0,0 7.46436,-4.46361 0,1.65041 -7.53938,-4.31357 c -0.45011,-0.26257 -0.60015,-0.82521 -0.33759,-1.27532 0.22506,-0.45011 0.82521,-0.60015 1.27532,-0.33758 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3077"
-         d="m 360.65235,197.14911 23.18077,-13.54087 23.06825,-13.31582 11.44035,-6.48911 11.40284,-6.30157 11.32782,-6.11403 11.25281,-5.88896 11.14027,-5.6264 11.02775,-5.36384 10.91522,-4.98874 10.76518,-4.65116 10.61514,-4.27607 10.4276,-3.86346 10.27756,-3.37584 10.09002,-2.88822 4.98874,-1.27532 4.91372,-1.12528 4.87622,-1.01275 4.8387,-0.90023 4.76369,-0.78769 4.72618,-0.63766 4.72617,-0.56264 4.65116,-0.45011 4.61365,-0.3751 4.57614,-0.26256 4.53863,-0.18755 4.53863,-0.075 4.46362,-0.0375 4.46361,0.075 4.4261,0.15004 4.38859,0.22506 4.35109,0.26256 4.35108,0.33759 4.31358,0.4126 4.31357,0.4126 8.51462,1.05026 8.4396,1.2003 8.43961,1.35034 8.36458,1.42535 8.32708,1.46287 6.48911,1.2003 -0.33758,1.83795 -6.48912,-1.16278 0,0 -8.32707,-1.50038 0,0 -8.32708,-1.42535 0,0 -8.40209,-1.31283 0,0 -8.4396,-1.2003 0,0 -8.47712,-1.05026 0,0 -4.27606,-0.45011 0,0 -4.31357,-0.3751 0.0375,0 -4.35108,-0.33758 0.0375,0 -4.35108,-0.26257 0,0 -4.3886,-0.22505 0.0375,0 -4.4261,-0.15004 0.0375,0
  -4.4261,-0.075 0,0 -4.46362,0.0375 0,0 -4.46361,0.075 0,0 -4.53863,0.18755 0.0375,0 -4.57614,0.26256 0.0375,0 -4.61365,0.33759 0.0375,0 -4.65116,0.45011 0,0 -4.65116,0.56264 0,0 -4.72618,0.67517 0.0375,0 -4.76368,0.75018 0.0375,0 -4.83871,0.90023 0.0375,0 -4.8387,1.01275 0,0 -4.91373,1.12528 0.0375,-0.0375 -4.95123,1.27532 0.0375,0 -10.05251,2.88822 0.0375,-0.0375 -10.27756,3.41335 0.0375,-0.0375 -10.4276,3.86346 0.0375,-0.0375 -10.57763,4.27607 0,0 -10.72768,4.61365 0,0 -10.87771,5.02625 0.0375,-0.0375 -11.02774,5.36384 0,0 -11.10277,5.6264 0,-0.0375 -11.21529,5.88897 0,0 -11.32783,6.11402 0,0 -11.36533,6.30157 0,0 -11.47786,6.45161 0,0 -23.03073,13.31581 0,0 -23.18078,13.54088 z m 311.17752,-90.24748 7.83945,6.71417 -9.71492,3.48837 c -0.48762,0.18755 -1.01275,-0.075 -1.2003,-0.56264 -0.15003,-0.48762 0.11253,-1.01275 0.60015,-1.2003 l 8.13953,-2.96323 -0.30007,1.6129 -6.56414,-5.66391 c -0.4126,-0.33759 -0.45011,-0.93774 -0.11253,-1.31283 0.33759,-0.4126 0.93774,-0.45011 1.31283
 ,-0.11253 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-    </g>
-  </g>
-</svg>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/index.md
----------------------------------------------------------------------
diff --git a/docs/index.md b/docs/index.md
index 7cac789..d218cc7 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,5 +1,5 @@
 ---
-title: Flink Overview
+title: "Overview"
 ---
 <!--
 Licensed to the Apache Software Foundation (ASF) under one
@@ -18,7 +18,7 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
---> 
+-->
 
 Apache Flink is a platform for efficient, distributed, general-purpose data processing.
 It features powerful programming abstractions in Java and Scala, a high-performance runtime, and
@@ -33,32 +33,32 @@ a thorough introduction of the Flink API please refer to the
 
 This is an overview of Flink's stack. Click on any component to go to the respective documentation.
 
-<img src="img/overview-stack-0.9.png" width="893" height="450" alt="Stack" usemap="#overview-stack">
+<img src="fig/overview-stack-0.9.png" width="893" height="450" alt="Stack" usemap="#overview-stack">
 
 <map name="overview-stack">
-  <area shape="rect" coords="188,0,263,200" alt="Graph API: Gelly" href="gelly_guide.html">
-  <!-- <area shape="rect" coords="268,0,343,200" alt="Flink ML" href="ml.htm"> -->
-  <area shape="rect" coords="348,0,423,200" alt="Table" href="table.html">
+  <area shape="rect" coords="188,0,263,200" alt="Graph API: Gelly" href="libs/gelly_guide.html">
+  <area shape="rect" coords="268,0,343,200" alt="Flink ML" href="libs/ml/">
+  <area shape="rect" coords="348,0,423,200" alt="Table" href="libs/table.html">
 
-  <area shape="rect" coords="188,205,538,260" alt="DataSet API (Java/Scala)" href="programming_guide.html">
-  <area shape="rect" coords="543,205,893,260" alt="DataStream API (Java/Scala)" href="streaming_guide.html">
+  <area shape="rect" coords="188,205,538,260" alt="DataSet API (Java/Scala)" href="apis/programming_guide.html">
+  <area shape="rect" coords="543,205,893,260" alt="DataStream API (Java/Scala)" href="apis/streaming_guide.html">
 
-  <area shape="rect" coords="188,275,538,330" alt="Optimizer" href="optimizer.html">
+  <!-- <area shape="rect" coords="188,275,538,330" alt="Optimizer" href="optimizer.html"> -->
   <!-- <area shape="rect" coords="543,275,893,330" alt="Stream Builder" href="streambuilder.html"> -->
 
-  <area shape="rect" coords="188,335,893,385" alt="Flink Runtime" href="internal_general_arch.html">
+  <area shape="rect" coords="188,335,893,385" alt="Flink Runtime" href="internals/general_arch.html">
 
-  <area shape="rect" coords="188,405,328,455" alt="Local" href="local_execution.html">
-  <area shape="rect" coords="333,405,473,455" alt="Remote" href="cluster_execution.html">
-  <area shape="rect" coords="478,405,638,455" alt="Embedded" href="local_execution.html">
-  <area shape="rect" coords="643,405,765,455" alt="YARN" href="yarn_setup.html">
-  <area shape="rect" coords="770,405,893,455" alt="Tez" href="flink_on_tez_guide.html">
+  <area shape="rect" coords="188,405,328,455" alt="Local" href="apis/local_execution.html">
+  <area shape="rect" coords="333,405,473,455" alt="Remote" href="apis/cluster_execution.html">
+  <area shape="rect" coords="478,405,638,455" alt="Embedded" href="apis/local_execution.html">
+  <area shape="rect" coords="643,405,765,455" alt="YARN" href="setup/yarn_setup.html">
+  <area shape="rect" coords="770,405,893,455" alt="Tez" href="setup/flink_on_tez.html">
 </map>
 
 ## Download
 
-This documentation is for the next upcoming major release version {{ site.FLINK_VERSION_THIS_SHORT }} of Apache Flink.
+This documentation is for Apache Flink version {{ site.version }}, which is the current development version of the next upcoming major release of Apache Flink.
 
-You can download the latest pre-built snapshot version from the [downloads]({{ site.FLINK_DOWNLOAD_URL }}#latest) page of the [project website]({{ site.FLINK_WEBSITE_URL }}).
+You can download the latest pre-built snapshot version from the [downloads]({{ site.download_url }}#latest) page of the [project website]({{ site.website_url }}).
 
-The Scala API uses Scala {{ site.FLINK_SCALA_VERSION_SHORT }}. Please make sure to use a compatible version.
+The Scala API uses Scala {{ site.scala_version }}. Please make sure to use a compatible version.

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_add_operator.md
----------------------------------------------------------------------
diff --git a/docs/internal_add_operator.md b/docs/internal_add_operator.md
deleted file mode 100644
index c564221..0000000
--- a/docs/internal_add_operator.md
+++ /dev/null
@@ -1,251 +0,0 @@
----
-title:  "How to add a new Operator"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-Operators in the Java API can be added in multiple different ways: 
-
-1. On the DataSet, as a specialization/combination of existing operators
-2. As a custom extension operator
-3. As a new runtime operator
-
-The first two approaches are typically more lightweight and easier to implement. Sometimes,
-new functionality does require a new runtime operator, or it is much more efficient to 
-
-
-## Implementing a new Operator on DataSet
-
-Many operators can be implemented as a specialization of another operator, or by means of a UDF.
-
-The simplest example are the `sum()`, `min()`, and `max()` functions on the
-{% gh_link /flink-java/src/main/java/org/apache/flink/api/java/DataSet.java "DataSet" %}.
-These functions simply call other operations with some pre-defined parameters:
-
-~~~java
-public AggregateOperator<T> sum (int field) {
-    return this.aggregate (Aggregations.SUM, field);
-}
-
-~~~
-
-Some operations can be implemented as compositions of multiple other operators. An example is to implement a
-*count()* function through a combination of *map* and *aggregate*. 
-
-A simple way to do this is to define a function on the {% gh_link /flink-java/src/main/java/org/apache/flink/api/java/DataSet.java "DataSet" %} that calls *map(...)* and *reduce(...)* in turn:
-
-~~~java
-public DataSet<Long> count() {
-    return this.map(new MapFunction<T, Long>() {
-                        public Long map(T value) {
-                            return 1L;
-                        }
-                    })
-               .reduce(new ReduceFunction<Long>() {
-                        public Long reduce(Long val1, Long val1) {
-                            return val1 + val2;
-                        }
-                    });
-}
-~~~
-
-To define a new operator without altering the DataSet class is possible by putting the functions as static members
-into another class. The example of the *count()* operator would look the following way:
-
-~~~java
-public static <T>DataSet<Long> count(DataSet<T> data) {
-    return data.map(...).reduce(...);
-}
-~~~
-
-### More Complex Operators
-
-A more complex example of an operation via specialization is the {% gh_link /flink-java/src/main/java/org/apache/flink/api/java/operators/AggregateOperator.java "Aggregation Operation" %} in the Java API. It is implemented by means of a *GroupReduce* UDF.
-
-The Aggregate Operation comes with its own operator in the *Java API*, but translates itself into a {% gh_link /flink-core/src/main/java/org/apache/flink/api/common/operators/base/GroupReduceOperatorBase.java "GroupReduceOperatorBase" %} in the *Common API*. (see [Program Life Cycle](internal_program_life_cycle.html) for details of how an operation from the *Java API* becomes an operation of the *Common API* and finally a runtime operation.)
-The Java API aggregation operator is only a builder that takes the types of aggregations and the field positions, and used that information to
-parameterize the GroupReduce UDF that performs the aggregations.
-
-Because the operation is translated into a GroupReduce operation, it appears as a GroupReduceOperator in the optimizer and runtime.
-
-
-
-## Implementing a Custom Extension Operator
-
-The DataSet offers a method for custom operators: `DataSet<X> runOperation(CustomUnaryOperation<T, X> operation)`.
-The *CustomUnaryOperation* interface defines operators by means of the two functions:
-
-~~~ java
-void setInput(DataSet<IN> inputData);
-	
-DataSet<OUT> createResult();
-~~~
-
-The {% gh_link /flink-staging/flink-spargel/src/main/java/org/apache/flink/spargel/java/VertexCentricIteration.java "VertexCentricIteration" %} operator is implemented that way. Below is an example how to implement the *count()* operator that way.
-
-~~~ java
-public class Counter<T> implements CustomUnaryOperation<T, Long> {
-
-    private DataSet<T> input;
-
-    public void setInput(DataSet<IN> inputData) { this.input = inputData; }
-
-    public DataSet<Long> createResult() {
-        return input.map(...).reduce(...);
-    }
-}
-~~~
-
-The CountOperator can be called in the following way:
-
-~~~ java
-DataSet<String> lines = ...;
-DataSet<Long> count = lines.runOperation(new Counter<String>());
-~~~
-
-
-## Implementing a new Runtime Operator
-
-Adding an new runtime operator requires changes throughout the entire stack, from the API to the runtime:
-
-- *Java API*
-- *Common API*
-- *Optimizer*
-- *Runtime*
-
-We start the description bottom up, at the example of the *mapPartition()* function, which is like a *map*
-function, but invoked only once per parallel partition.
-
-**Runtime**
-
-Runtime Operators are implemented using the {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/operators/PactDriver.java "Driver" %} interface. The interface defines the methods that describe the operator towards the runtime. The {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/operators/MapDriver.java "MapDriver" %} serves as a simple example of how those operators work.
-
-The runtime works with the `MutableObjectIterator`, which describes data streams with the ability to reuse objects, to reduce pressure on the garbage collector.
-
-An implementation of the central `run()` method for the *mapPartition* operator could look the following way:
-
-~~~ java
-public void run() throws Exception {
-    final MutableObjectIterator<IN> input = this.taskContext.getInput(0);
-    final MapPartitionFunction<IN, OUT> function = this.taskContext.getStub();
-    final Collector<OUT> output = this.taskContext.getOutputCollector();
-    final TypeSerializer<IN> serializer = this.taskContext.getInputSerializer(0);
-
-    // we assume that the UDF takes a java.util.Iterator, so we wrap the MutableObjectIterator
-    Iterator<IN> iterator = new MutableToRegularIteratorWrapper(input, serializer);
-
-    function.mapPartition(iterator, output);
-}
-~~~
-
-To increase efficiency, it is often beneficial to implement a *chained* version of an operator. Chained
-operators run in the same thread as their preceding operator, and work with nested function calls.
-This is very efficient, because it saves serialization/deserialization overhead.
-
-To learn how to implement a chained operator, take a look at the {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/operators/MapDriver.java "MapDriver" %} (regular) and the
-{% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/operators/chaining/ChainedMapDriver.java "ChainedMapDriver" %} (chained variant).
-
-
-### Optimizer/Compiler
-
-This section does a minimal discussion of the important steps to add an operator. Please see the [Optimizer](internal_optimizer.html) docs for more detail on how the optimizer works.
-To allow the optimizer to include a new operator in its planning, it needs a bit of information about it; in particular, the following information:
-
-- *{% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/operators/DriverStrategy.java "DriverStrategy" %}*: The operation needs to be added to the Enum, to make it available to the optimizer. The parameters to the Enum entry define which class implements the runtime operator, its chained version, whether the operator accumulates records (and needs memory for that), and whether it requires a comparator (works on keys). For our example, we can add the entry
-~~~ java
-MAP_PARTITION(MapPartitionDriver.class, null /* or chained variant */, PIPELINED, false)
-~~~
-
-- *Cost function*: The class {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/costs/CostEstimator.java "CostEstimator" %} needs to know how expensive the operation is to the system. The costs here refer to the non-UDF part of the operator. Since the operator does essentially no work (it forwards the record stream to the UDF), the costs are zero. We change the `costOperator(...)` method by adding the *MAP_PARTITION* constant to the switch statement similar to the *MAP* constant such that no cost is accounted for it.
-
-- *OperatorDescriptor*: The operator descriptors define how an operation needs to be treated by the optimizer. They describe how the operation requires the input data to be (e.g., sorted or partitioned) and that way allows the optimizer to optimize the data movement, sorting, grouping in a global fashion. They do that by describing which {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/dataproperties/RequestedGlobalProperties.java "RequestedGlobalProperties" %} (partitioning, replication, etc) and which {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/dataproperties/RequestedLocalProperties.java "RequestedLocalProperties" %} (sorting, grouping, uniqueness) the operator has, as well as how the operator affects the existing {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/dataproperties/GlobalProperties.java "GlobalProperties" %} and {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/dataproperties/LocalProperties.j
 ava "LocalProperties" %}. In addition, it defines a few utility methods, for example to instantiate an operator candidate.
-Since the *mapPartition()* function is very simple (no requirements on partitioning/grouping), the descriptor is very simple. Other operators have more complex requirements, for example the {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/operators/GroupReduceProperties.java "GroupReduce" %}. Some operators, like *join* have multiple ways in which they can be executed and therefore have multiple descriptors ({% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/operators/HashJoinBuildFirstProperties.java "Hash Join 1" %}, {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/operators/HashJoinBuildSecondProperties.java "Hash Join 2" %}, {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/operators/SortMergeJoinDescriptor.java "SortMerge Join" %}).
-The code sample below explains (with comments) how to create a descriptor for the *MapPartitionOperator* 
-
-  ~~~ java
-    public DriverStrategy getStrategy() {
-        return MAP_PARTITION;
-    }
-
-    // Instantiate the operator with the strategy over the input given in the form of the Channel
-    public SingleInputPlanNode instantiate(Channel in, SingleInputNode node) {
-        return new SingleInputPlanNode(node, "MapPartition", in, MAP_PARTITION);
-    }
-
-    // The operation accepts data with default global properties (arbitrary distribution)
-    protected List<RequestedGlobalProperties> createPossibleGlobalProperties() {
-        return Collections.singletonList(new RequestedGlobalProperties());
-    }
-
-    // The operation can accept data with any local properties. No grouping/sorting is necessary
-    protected List<RequestedLocalProperties> createPossibleLocalProperties() {
-        return Collections.singletonList(new RequestedLocalProperties());
-    }
-
-    // the operation itself does not affect the existing global properties.
-    // The effect of the UDF's semantics// are evaluated separately (by interpreting the
-    // semantic assertions)
-    public GlobalProperties computeGlobalProperties(GlobalProperties gProps) {
-        return gProps;
-    }
-
-    // since the operation can mess up all order, grouping, uniqueness, we cannot make any statements
-    // about how local properties are preserved
-    public LocalProperties computeLocalProperties(LocalProperties lProps) {
-        return LocalProperties.EMPTY;
-    }
-  ~~~
-
-- *OptimizerNode*: The optimizer node is the place where all comes together. It creates the list of *OperatorDescriptors*, implements the result data set size estimation, and assigns a name to the operation. It is a relatively small class and can be more or less copied again from the {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/dag/MapNode.java "MapNode" %}.
-
-
-### Common API
-
-To make the operation available to the higher-level APIs, it needs to be added to the Common API. The simplest way to do this is to add a
-base operator. Create a class `MapPartitionOperatorBase`, after the pattern of the {% gh_link /flink-core/src/main/java/org/apache/flink/api/common/operators/base/MapOperatorBase.java "MapOperatorBase" %}.
-
-In addition, the optimizer needs to know which OptimizerNode how to create an OptimizerNode from the OperatorBase. This happens in the class
-`GraphCreatingVisitor` in the {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/PactCompiler.java "Optimizer" %}.
-
-*Note:* A pending idea is to allow to skip this step by unifying the OptimizerNode and the Common API operator. They essentially fulfill the
-same function. The Common API operator exists only in order for the `flink-java` and `flink-scala` packages to not have a dependency on the
-optimizer.
-
-
-### Java API
-
-Create a Java API operator that is constructed in the same way as the {% gh_link /flink-java/src/main/java/org/apache/flink/api/java/operators/MapOperator.java "MapOperator" %}. The core method is the `translateToDataFlow(...)` method, which creates the Common API operator for the Java API operator.
-
-The final step is to add a function to the `DataSet` class:
-
-~~~ java
-public <R> DataSet<R> mapPartition(MapPartitionFunction<T, R> function) {
-    return new MapPartitionOperator<T, R>(this, function);
-}
-~~~
-
----
-
-*This documentation is maintained by the contributors of the individual components.
-We kindly ask anyone that adds and changes components to eventually provide a patch
-or pull request that updates these documents as well.*
-

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_distributed_akka.md
----------------------------------------------------------------------
diff --git a/docs/internal_distributed_akka.md b/docs/internal_distributed_akka.md
deleted file mode 100644
index 49497b2..0000000
--- a/docs/internal_distributed_akka.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title:  "Distributed Communication and Coordination via Akka"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-This page discusses the implementation of Flink's distributed communication
-via Akka (http://akka.io)
-
-
-## Actor Systems
-
-### JobManager
-
-### TaskManager
-
-### JobClient
-
-
-## Actors and Messages
-
-
-## Failure Detection
-
-
-
----
-
-*This documentation is maintained by the contributors of the individual components.
-We kindly ask anyone that adds and changes components to eventually provide a patch
-or pull request that updates these documents as well.*

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_distributed_runtime.md
----------------------------------------------------------------------
diff --git a/docs/internal_distributed_runtime.md b/docs/internal_distributed_runtime.md
deleted file mode 100644
index f6732d2..0000000
--- a/docs/internal_distributed_runtime.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title:  "Distributed Runtime"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-Pending...

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_general_arch.md
----------------------------------------------------------------------
diff --git a/docs/internal_general_arch.md b/docs/internal_general_arch.md
deleted file mode 100644
index 2386a2e..0000000
--- a/docs/internal_general_arch.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title:  "General Architecture and Process Model"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-## The Processes
-
-When the Flink system is started, it bring up the *JobManager* and one or more *TaskManagers*. The JobManager
-is the coordinator of the Flink system, while the TaskManagers are the workers that execute parts of the
-parallel programs. When starting the system in *local* mode, a single JobManager and TaskManager are brought
-up within the same JVM.
-
-When a program is submitted, a client is created that performs the pre-processing and turns the program
-into the parallel data flow form that is executed by the JobManager and TaskManagers. The figure below
-illustrates the different actors in the system very coarsely.
-
-<div style="text-align: center;">
-<img src="img/ClientJmTm.svg" alt="The Interactions between Client, JobManager and TaskManager" height="400px" style="text-align: center;"/>
-</div>
-
-## Component Stack
-
-An alternative view on the system is given by the stack below. The different layers of the stack build on
-top of each other and raise the abstraction level of the program representations they accept:
-
-- The **runtime** layer receives a program in the form of a *JobGraph*. A JobGraph is a generic parallel
-data flow with arbitrary tasks that consume and produce data streams.
-
-- The **optimizer** and **common api** layer takes programs in the form of operator DAGs. The operators are
-specific (e.g., Map, Join, Filter, Reduce, ...), but are data type agnostic. The concrete types and their
-interaction with the runtime is specified by the higher layers.
-
-- The **API layer** implements multiple APIs that create operator DAGs for their programs. Each API needs
-to provide utilities (serializers, comparators) that describe the interaction between its data types and
-the runtime.
-
-<div style="text-align: center;">
-<img src="img/stack.svg" alt="The Flink component stack" width="800px" />
-</div>
-
-## Projects and Dependencies
-
-The Flink system code is divided into multiple sub-projects. The goal is to reduce the number of
-dependencies that a project implementing a Flink progam needs, as well as to faciltate easier testing
-of smaller sub-modules.
-
-The individual projects and their dependencies are shown in the figure below.
-
-<div style="text-align: center;">
-<img src="img/projects_dependencies.svg" alt="The Flink sub-projects and their dependencies" height="600px" style="text-align: center;"/>
-</div>
-
-In addition to the projects listed in the figure above, Flink currently contains the following sub-projects:
-
-- `flink-dist`: The *distribution* project. It defines how to assemble the compiled code, scripts, and other resources
-into the final folder structure that is ready to use.
-
-- `flink-staging`: A series of projects that are in an early version. Currently contains
-among other things projects for YARN support, JDBC data sources and sinks, hadoop compatibility,
-graph specific operators, and HBase connectors.
-
-- `flink-quickstart`: Scripts, maven archetypes, and example programs for the quickstarts and tutorials.
-
-- `flink-contrib`: Useful tools contributed by users. The code is maintained mainly by external contributors. The requirements for code being accepted into `flink-contrib` are lower compared to the rest of the code.
-
-
-
-
-

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_howto.md
----------------------------------------------------------------------
diff --git a/docs/internal_howto.md b/docs/internal_howto.md
deleted file mode 100644
index 5cdb221..0000000
--- a/docs/internal_howto.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title:  "Overview of Flink System Architecture & Internals"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-This documentation provides an overview of the "How-To's" for
-Flink developers. It is intended as guide to contributors and people
-that are interested in the technology behind Flink.
-
-
-## Architectures and Components
-
-- [How-to: Adding a new Operator](internal_add_operator.html)
-
-- [How-to: Using logging in Flink](internal_logging.html)
-
-- [How-to: Setting up Eclipse to develop Flink](internal_setup_eclipse.html)
-
-- [How-to: Setting up IntelliJ to develop Flink](internal_setup_intellij.html)
-
----
-
-*This documentation is maintained by the contributors of the individual components.
-We kindly ask anyone that adds and changes components to eventually provide a patch
-or pull request that updates these documents as well.*
-

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_job_scheduling.md
----------------------------------------------------------------------
diff --git a/docs/internal_job_scheduling.md b/docs/internal_job_scheduling.md
deleted file mode 100644
index 2c55c01..0000000
--- a/docs/internal_job_scheduling.md
+++ /dev/null
@@ -1,82 +0,0 @@
----
-title:  "Jobs and Scheduling"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-This document briefly describes how Flink schedules jobs and 
-how it represents and tracks job status on the JobManager.
-
-* This will be replaced by the TOC
-{:toc}
-
-
-## Scheduling
-
-Execution resources in Flink are defined through _Task Slots_. Each TaskManager will have one or more task slots,
-each of which can run one pipeline of parallel tasks. A pipeline consists of multiple successive tasks, such as the
-*n-th* parallel instance of a MapFunction together with the *n-th* parallel instance of a ReduceFunction.
-Note that Flink often executes successive tasks concurrently: For Streaming programs, that happens in any case,
-but also for batch programs, it happens frequently.
-
-The figure below illustrates that. Consider a program with a data source, a *MapFunction*, and a *ReduceFunction*.
-The source and MapFunction are executed with a parallelism of 4, while the ReduceFunction is executed with a
-parallism of 3. A pipeline consists of the sequence Source - Map - Reduce. On a cluster with 2 TaskManagers with
-3 slots each, the program will be executed as described below.
-
-<div style="text-align: center;">
-<img src="img/slots.svg" alt="Assigning Pipelines of Tasks to Slots" height="250px" style="text-align: center;"/>
-</div>
-
-Internally, Flink defines through {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/jobmanager/scheduler/SlotSharingGroup.java "SlotSharingGroup" %} 
-and {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/jobmanager/scheduler/CoLocationGroup.java "CoLocationGroup" %}
-which tasks may share a slot (permissive), respectively which tasks must be strictly placed into the same slot.
-
-
-## JobManager Data Structures
-
-During job execution, the JobManager keeps track of distributed tasks, decides when to schedule the next task (or set of tasks),
-and reacts to finished tasks or execution failures.
-
-The JobManager receives the {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/jobgraph/ "JobGraph" %},
-which is a representation of the data flow consisting of operators ({% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/jobgraph/AbstractJobVertex.java "JobVertex" %})
-and intermediate results ({% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/jobgraph/IntermediateDataSet.java "IntermediateDataSet" %}).
-Each operator has properies, like the parallelism and the code that it executes.
-In addition, the JobGraph has a set of attached libraries, that are neccessary to execute the code of the operators.
-
-The JobManager transforms the JobGraph into an {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/executiongraph/ "ExecutionGraph" %}.
-The ExecutionGraph is a parallel version of the JobGraph: For each JobVertex, it contains an {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/executiongraph/ExecutionVertex.java "ExecutionVertex" %} per parallel subtask. An operator with a parallelism of 100 will have one JobVertex and 100 ExecutionVertices.
-The ExecutionVertex tracks the state of execution of a particular subtask. All ExecutionVertices from one JobVertex are held in an
-{% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/executiongraph/ExecutionJobVertex.java "ExecutionJobVertex" %},
-which tracks the status of the operator as a whole. 
-Besides the vertices, the ExecutionGraph also contains the {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/executiongraph/IntermediateResult.java "IntermediateResult" %} and the {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/executiongraph/IntermediateResultPartition.java "IntermediateResultPartition" %}. The former tracks the state of the *IntermediateDataSet*, the latter the state of each of its partitions.
-
-<div style="text-align: center;">
-<img src="img/job_and_execution_graph.svg" alt="JobGraph and ExecutionGraph" height="400px" style="text-align: center;"/>
-</div>
-
-During its execution, each parallel task goes through multiple stages, from *created* to *finished* or *failed*. The diagram below illustrates the 
-states and possible transitions between them. A task may be executed multiple times (for example in the course of failure recovery).
-For that reason, the execution of an ExecutionVertex is tracked in an {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/executiongraph/Execution.java "Execution" %}. Each ExecutionVertex has a current Execution, and prior Executions.
-
-<div style="text-align: center;">
-<img src="img/state_machine.svg" alt="States and Transitions of Task Executions" height="300px" style="text-align: center;"/>
-</div>
-
-

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_logging.md
----------------------------------------------------------------------
diff --git a/docs/internal_logging.md b/docs/internal_logging.md
deleted file mode 100644
index 42fd317..0000000
--- a/docs/internal_logging.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: "How to use logging"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-The logging in Flink is implemented using the slf4j logging interface. As underlying logging framework, log4j is used. We also provide logback configuration files and pass them to the JVM's as properties. Users willing to use logback instead of log4j can just exclude log4j (or delete it from the lib/ folder).
-
-## Configuring Log4j
-
-Log4j is controlled using property files. In Flink's case, the file is usually called `log4j.properties`. We pass the filename and location of this file using the `-Dlog4j.configuration=` parameter to the JVM.
-
-## Configuring logback
-
-For users and developers alike it is important to control the logging framework. 
-The configuration of the logging framework is exclusively done by configuration files.
-The configuration file either has to be specified by setting the environment property `-Dlogback.configurationFile=<file>` or by putting `logback.xml` in the classpath.
-The `conf` directory contains a `logback.xml` file which can be modified and is used if Flink is started outside of an IDE and with the provided starting scripts.
-The provided `logback.xml` has the following form:
-
-~~~ xml
-<configuration>
-    <appender name="file" class="ch.qos.logback.core.FileAppender">
-        <file>${log.file}</file>
-        <append>false</append>
-        <encoder>
-            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{60} %X{sourceThread} - %msg%n</pattern>
-        </encoder>
-    </appender>
-
-    <root level="INFO">
-        <appender-ref ref="file"/>
-    </root>
-</configuration>
-~~~
-
-In order to control the logging level of `org.apache.flink.runtime.jobgraph.JobGraph`, for example, one would have to add the following line to the configuration file.
-
-~~~ xml
-<logger name="org.apache.flink.runtime.jobgraph.JobGraph" level="DEBUG"/>
-~~~
-
-For further information on configuring logback see [LOGback's manual](http://logback.qos.ch/manual/configuration.html).
-
-## Best practices for developers
-
-The loggers using slf4j are created by calling
-
-~~~ java
-import org.slf4j.LoggerFactory
-import org.slf4j.Logger
-
-Logger LOG = LoggerFactory.getLogger(Foobar.class)
-~~~
-
-In order to benefit most from slf4j, it is recommended to use its placeholder mechanism.
-Using placeholders allows to avoid unnecessary string constructions in case that the logging level is set so high that the message would not be logged.
-The syntax of placeholders is the following:
-
-~~~ java
-LOG.info("This message contains {} placeholders. {}", 2, "Yippie");
-~~~
-
-Placeholders can also be used in conjunction with exceptions which shall be logged.
-
-~~~ java
-catch(Exception exception){
-	LOG.error("An {} occurred.", "error", exception);
-}
-~~~
-
----
-
-*This documentation is maintained by the contributors of the individual components.
-We kindly ask anyone that adds and changes components to eventually provide a patch
-or pull request that updates these documents as well.*
-

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_operators_and_memory.md
----------------------------------------------------------------------
diff --git a/docs/internal_operators_and_memory.md b/docs/internal_operators_and_memory.md
deleted file mode 100644
index 567bfc2..0000000
--- a/docs/internal_operators_and_memory.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title:  "Runtime Algorithms and Memory Management"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_optimizer.md
----------------------------------------------------------------------
diff --git a/docs/internal_optimizer.md b/docs/internal_optimizer.md
deleted file mode 100644
index 7bf45b1..0000000
--- a/docs/internal_optimizer.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title:  "Optimizer"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->


[25/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/streaming_guide.md
----------------------------------------------------------------------
diff --git a/docs/apis/streaming_guide.md b/docs/apis/streaming_guide.md
new file mode 100644
index 0000000..6dae978
--- /dev/null
+++ b/docs/apis/streaming_guide.md
@@ -0,0 +1,1707 @@
+---
+title: "Flink Stream Processing API"
+is_beta: true
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<a href="#top"></a>
+
+Flink Streaming is a system for high-throughput, low-latency data stream processing. The system can connect to and process data streams from different data sources like file sources, web sockets, message queues(Apache Kafka, RabbitMQ, Apache Flume, Twitter…) and also from any user defined data source using a very simple interface. Data streams can be transformed and modified to create new data streams using high-level functions similar to the ones provided by the batch processing API. Flink Streaming natively supports flexible, data-driven windowing semantics and iterative stream processing. The processed data can be pushed to different output types.
+
+* This will be replaced by the TOC
+{:toc}
+
+Flink Streaming API
+-----------
+
+The Streaming API is currently part of the *flink-staging* Maven project. All relevant classes are located in the *org.apache.flink.streaming* package.
+
+Add the following dependency to your `pom.xml` to use the Flink Streaming.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight xml %}
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-streaming-core</artifactId>
+  <version>{{site.version }}</version>
+</dependency>
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-clients</artifactId>
+  <version>{{site.version }}</version>
+</dependency>
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight xml %}
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-streaming-scala</artifactId>
+  <version>{{site.version }}</version>
+</dependency>
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-clients</artifactId>
+  <version>{{site.version }}</version>
+</dependency>
+{% endhighlight %}
+</div>
+</div>
+
+In order to create your own Flink Streaming program we encourage you to start with the [skeleton](#program-skeleton) and gradually add your own [transformations](#transformations). The remaining sections act as references for additional transformations and advanced features.
+
+
+Example Program
+---------------
+
+The following program is a complete, working example of streaming WordCount that incrementally counts the words coming from a web socket. You can copy &amp; paste the code to run it locally.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+{% highlight java %}
+public class StreamingWordCount {
+
+    public static void main(String[] args) {
+
+        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+        
+        DataStream<Tuple2<String, Integer>> dataStream = env
+                .socketTextStream("localhost", 9999)
+                .flatMap(new Splitter())
+                .groupBy(0)
+                .sum(1);
+        
+        dataStream.print();
+        
+        env.execute("Socket Stream WordCount");
+    }
+    
+    public static class Splitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
+        @Override
+        public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) throws Exception {
+            for (String word: sentence.split(" ")) {
+                out.collect(new Tuple2<String, Integer>(word, 1));
+            }
+        }
+    }
+    
+}
+{% endhighlight %}
+
+</div>
+
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+
+object WordCount {
+  def main(args: Array[String]) {
+
+    val env = StreamExecutionEnvironment.getExecutionEnvironment
+    val text = env.socketTextStream("localhost", 9999)
+
+    val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
+      .map { (_, 1) }
+      .groupBy(0)
+      .sum(1)
+
+    counts.print
+
+    env.execute("Scala Socket Stream WordCount")
+  }
+}
+{% endhighlight %}
+</div>
+
+</div>
+
+To run the example program start the input stream with netcat first from a terminal:
+
+~~~bash
+nc -lk 9999
+~~~
+
+The lines typed to this terminal will be the source data stream for your streaming job.
+
+[Back to top](#top)
+
+Program Skeleton
+----------------
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+As presented in the [example](#example-program) a Flink Streaming program looks almost identical to a regular Flink program. Each stream processing program consists of the following parts:
+
+1. Obtaining a `StreamExecutionEnvironment`,
+2. Connecting to data stream sources,
+3. Specifying transformations on the data streams,
+4. Specifying output for the processed data,
+5. Executing the program.
+
+As these steps are basically the same as in the batch API we will only note the important differences.
+For stream processing jobs, the user needs to obtain a `StreamExecutionEnvironment` in contrast with the [batch API](programming_guide.html#program-skeleton) where one would need an `ExecutionEnvironment`. The process otherwise is essentially the same:
+
+{% highlight java %}
+StreamExecutionEnvironment.getExecutionEnvironment();
+StreamExecutionEnvironment.createLocalEnvironment(parallelism);
+StreamExecutionEnvironment.createRemoteEnvironment(String host, int port, int parallelism, String... jarFiles);
+{% endhighlight %}
+
+For connecting to data streams the `StreamExecutionEnvironment` has many different methods, from basic file sources to completely general user defined data sources. We will go into details in the [basics](#basics) section.
+
+For example:
+
+{% highlight java %}
+env.socketTextStream(host, port);
+env.fromElements(elements…);
+env.addSource(sourceFunction)
+{% endhighlight %}
+
+After defining the data stream sources the user can specify transformations on the data streams to create a new data stream. Different data streams can be also combined together for joint transformations which are being showcased in the [transformations](#transformations) section.
+
+For example:
+
+{% highlight java %}
+dataStream.map(mapFunction).reduce(reduceFunction);
+{% endhighlight %}
+
+The processed data can be pushed to different outputs called sinks. The user can define their own sinks or use any predefined filesystem, message queue or database sink.
+
+For example:
+
+{% highlight java %}
+dataStream.writeAsCsv(path);
+dataStream.print();
+dataStream.addSink(sinkFunction)
+{% endhighlight %}
+
+Once the complete program is specified `execute(programName)` is to be called on the `StreamExecutionEnvironment`. This will either execute on the local machine or submit the program for execution on a cluster, depending on the chosen execution environment.
+
+{% highlight java %}
+env.execute(programName);
+{% endhighlight %}
+
+</div>
+
+<div data-lang="scala" markdown="1">
+
+As presented in the [example](#example-program) a Flink Streaming program looks almost identical to a regular Flink program. Each stream processing program consists of the following parts:
+
+1. Obtaining a `StreamExecutionEnvironment`,
+2. Connecting to data stream sources,
+3. Specifying transformations on the data streams,
+4. Specifying output for the processed data,
+5. Executing the program.
+
+As these steps are basically the same as in the batch API we will only note the important differences.
+For stream processing jobs, the user needs to obtain a `StreamExecutionEnvironment` in contrast with the [batch API](programming_guide.html#program-skeleton) where one would need an `ExecutionEnvironment`. The process otherwise is essentially the same:
+
+{% highlight scala %}
+StreamExecutionEnvironment.getExecutionEnvironment
+StreamExecutionEnvironment.createLocalEnvironment(parallelism)
+StreamExecutionEnvironment.createRemoteEnvironment(host: String, port: String, parallelism: Int, jarFiles: String*)
+{% endhighlight %}
+
+For connecting to data streams the `StreamExecutionEnvironment` has many different methods, from basic file sources to completely general user defined data sources. We will go into details in the [basics](#basics) section.
+
+For example:
+
+{% highlight scala %}
+env.socketTextStream(host, port)
+env.fromElements(elements…)
+env.addSource(sourceFunction)
+{% endhighlight %}
+
+After defining the data stream sources the user can specify transformations on the data streams to create a new data stream. Different data streams can be also combined together for joint transformations which are being showcased in the [transformations](#transformations) section.
+
+For example:
+
+{% highlight scala %}
+dataStream.map(mapFunction).reduce(reduceFunction)
+{% endhighlight %}
+
+The processed data can be pushed to different outputs called sinks. The user can define their own sinks or use any predefined filesystem, message queue or database sink.
+
+For example:
+
+{% highlight scala %}
+dataStream.writeAsCsv(path)
+dataStream.print
+dataStream.addSink(sinkFunction)
+{% endhighlight %}
+
+Once the complete program is specified `execute(programName)` is to be called on the `StreamExecutionEnvironment`. This will either execute on the local machine or submit the program for execution on a cluster, depending on the chosen execution environment.
+
+{% highlight scala %}
+env.execute(programName)
+{% endhighlight %}
+
+</div>
+
+</div>
+
+[Back to top](#top)
+
+Basics
+----------------
+
+### DataStream
+
+The `DataStream` is the basic data abstraction provided by the Flink Streaming. It represents a continuous, parallel, immutable stream of data of a certain type. By applying transformations the user can create new data streams or output the results of the computations. For instance the map transformation creates a new `DataStream` by applying a user defined function on each element of a given `DataStream`
+
+The transformations may return different data stream types allowing more elaborate transformations, for example the `groupBy(…)` method returns a `GroupedDataStream` which can be used for grouped transformations such as aggregating by key. We will discover more elaborate data stream types in the upcoming sections.
+
+### Partitioning
+
+Partitioning controls how individual data points of a stream are distributed among the parallel instances of the transformation operators. This also controls the ordering of the records in the `DataStream`. There is partial ordering guarantee for the outputs with respect to the partitioning scheme (outputs produced from each partition are guaranteed to arrive in the order they were produced).
+
+There are several partitioning types supported in Flink Streaming:
+
+ * *Forward(default)*: Forward partitioning directs the output data to the next operator on the same machine (if possible) avoiding expensive network I/O. If there are more processing nodes than inputs or vice verse the load is distributed among the extra nodes in a round-robin fashion. This is the default partitioner.
+Usage: `dataStream.forward()`
+ * *Shuffle*: Shuffle partitioning randomly partitions the output data stream to the next operator using uniform distribution. Use this only when it is important that the partitioning is randomised. If you only care about an even load use *Distribute*
+Usage: `dataStream.shuffle()`
+ * *Distribute*: Distribute partitioning directs the output data stream to the next operator in a round-robin fashion, achieving a balanced distribution.
+Usage: `dataStream.distribute()`
+ * *Field/Key*: Field/Key partitioning partitions the output data stream based on the hash code of a selected key of the tuples. Data points with the same key are directed to the same operator instance. 
+Usage: `dataStream.groupBy(fields…)`
+ * *Broadcast*: Broadcast partitioning sends the output data stream to all parallel instances of the next operator.
+Usage: `dataStream.broadcast()`
+ * *Global*: All data points are directed to the first instance of the operator. 
+Usage: `dataStream.global()`
+
+By default *Forward* partitioning is used. 
+
+Partitioning does not remain in effect after a transformation, so it needs to be set again for subsequent operations.
+
+### Connecting to the outside world
+
+The user is expected to connect to the outside world through the source and the sink interfaces. 
+
+#### Sources
+
+The user can create(connect to) data streams by the different implementations of `SourceFunction` interface using `StreamExecutionEnvironment.addSource(sourceFunction)`. By default, sources run with parallelism of 1.
+
+To create parallel sources the users source function needs to implement `ParallelSourceFunction` or extend `RichParallelSourceFunction` in which cases the source will have the parallelism of the environment. The parallelism for ParallelSourceFunctions can be changed afterwards using `source.setParallelism(parallelism)`.
+
+The `SourceFunction` interface contains only two methods: `run(Collector<T> out)` and `cancel()`.
+The `run` method will be called only once when the program starts, and should encapsulate the logic for generating the `DataStream`. Any object collected to the collector will be part of the `DataStream`. The `cancel` method will be called whenever the topology has failed for some reason.
+
+In addition to the static data sources (with similar method signatures as the [batch API](programming_guide.html#data-sources)) there are several predefined stream sources accessible from the `StreamExecutionEnvironment`:
+
+* *Socket text stream*: Creates a new `DataStream` that contains the strings received infinitely from the given socket. Strings are decoded by the system's default character set. The user can optionally set the delimiters or the number of connection retries in case of errors.
+Usage: `env.socketTextStream(hostname, port,…)`
+* *Text file stream*: Creates a new `DataStream` that contains the lines of the files created (or modified) in a given directory. The system continuously monitors the given path, and processes any new files or modifications based on the settings. The file will be read with the system's default character set.
+Usage: `env.readFileStream(String path, long checkFrequencyMillis, WatchType watchType)`
+* *Message queue connectors*: There are pre-implemented connectors for a number of the most popular message queue services, please refer to the section on [connectors](#stream-connectors) for more detail.
+* *Custom source*: Creates a new `DataStream` by using a user defined `SourceFunction` implementation.
+Usage: `env.addSource(sourceFunction)`
+
+#### Sinks
+
+`DataStreamSink` represents the different outputs of Flink Streaming programs. The user can either define his own `SinkFunction` implementation or chose one of the available implementations (methods of `DataStream`).
+
+For example:
+
+ * `dataStream.print()` – Writes the `DataStream` to the standard output, practical for testing purposes
+ * `dataStream.writeAsText(parameters)` – Writes the `DataStream` to a text file
+ * `dataStream.writeAsCsv(parameters)` – Writes the `DataStream` to CSV format
+ * `dataStream.addSink(sinkFunction)` – Custom sink implementation
+
+There are pre-implemented connectors for a number of the most popular message queue services, please refer to the section on [connectors](#stream-connectors) for more detail.
+
+[Back to top](#top)
+
+Transformations
+----------------
+
+Transformations, also called operators, represent the users' business logic on the data stream. Operators consume data streams and produce new data streams. The user can chain and combine multiple operators on the data stream to produce the desired processing steps. Most of the operators work very similar to the batch Flink API allowing developers to reason about `DataStream` the same way as they would about `DataSet`. At the same time there are operators that exploit the streaming nature of the data to allow advanced functionality.
+
+### Basic transformations
+
+Basic transformations can be seen as functions that operate on records of the data stream.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+<br />
+
+<table class="table table-bordered">
+  <thead>
+    <tr>
+      <th class="text-left" style="width: 20%">Transformation</th>
+      <th class="text-center">Description</th>
+    </tr>
+  </thead>
+
+  <tbody>
+    <tr>
+      <td><strong>Map</strong></td>
+      <td>
+        <p>Takes one element and produces one element. A map that doubles the values of the input stream:</p>
+{% highlight java %}
+dataStream.map(new MapFunction<Integer, Integer>() {
+            @Override
+            public Integer map(Integer value) throws Exception {
+                return 2 * value;
+            }
+        });
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>FlatMap</strong></td>
+      <td>
+        <p>Takes one element and produces zero, one, or more elements. A flatmap that splits sentences to words:</p>
+{% highlight java %}
+dataStream.flatMap(new FlatMapFunction<String, String>() {
+            @Override
+            public void flatMap(String value, Collector<String> out) 
+                throws Exception {
+                for(String word: value.split(" ")){
+                    out.collect(word);
+                }
+            }
+        });
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Filter</strong></td>
+      <td>
+        <p>Evaluates a boolean function for each element and retains those for which the function returns true.
+	<br/>
+	<br/>
+        A filter that filters out zero values:
+        </p>
+{% highlight java %}
+dataStream.filter(new FilterFunction<Integer>() { 
+            @Override
+            public boolean filter(Integer value) throws Exception {
+                return value != 0;
+            }
+        });
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Reduce</strong></td>
+      <td>
+        <p>Combines a stream of elements into another stream by repeatedly combining two elements
+        into one and emits the current state after every reduction. Reduce may be applied on a full, windowed or grouped data stream.
+        <br/>
+        
+        <strong>IMPORTANT:</strong> The streaming and the batch reduce functions have different semantics. A streaming reduce on a data stream emits the current reduced value for every new element on a data stream. On a windowed data stream it works as a batch reduce: it produces at most one value per window.
+        <br/>
+	<br/>
+         A reducer that sums up the incoming stream, the result is a stream of intermediate sums:</p>
+{% highlight java %}
+dataStream.reduce(new ReduceFunction<Integer>() {
+            @Override
+            public Integer reduce(Integer value1, Integer value2) 
+            throws Exception {
+                return value1 + value2;
+            }
+        });
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Merge</strong></td>
+      <td>
+        <p>Merges two or more data streams creating a new stream containing all the elements from all the streams.</p>
+{% highlight java %}
+dataStream.merge(otherStream1, otherStream2, …)
+{% endhighlight %}
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+----------
+
+The following transformations are available on data streams of Tuples:
+
+<table class="table table-bordered">
+  <thead>
+    <tr>
+      <th class="text-left" style="width: 20%">Transformation</th>
+      <th class="text-center">Description</th>
+    </tr>
+  </thead>
+  <tbody>
+   <tr>
+      <td><strong>Project</strong></td>
+      <td>
+        <p>Selects a subset of fields from the tuples</p>
+{% highlight java %}
+DataStream<Tuple3<Integer, Double, String>> in = // [...]
+DataStream<Tuple2<String, Integer>> out = in.project(2,0);
+{% endhighlight %}
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+</div>
+
+<div data-lang="scala" markdown="1">
+
+<br />
+
+
+
+<table class="table table-bordered">
+  <thead>
+    <tr>
+      <th class="text-left" style="width: 20%">Transformation</th>
+      <th class="text-center">Description</th>
+    </tr>
+  </thead>
+
+  <tbody>
+
+    <tr>
+      <td><strong>Map</strong></td>
+      <td>
+        <p>Takes one element and produces one element. A map that doubles the values of the input stream:</p>
+{% highlight scala %}
+dataStream.map{ x => x * 2 }
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>FlatMap</strong></td>
+      <td>
+        <p>Takes one element and produces zero, one, or more elements. A flatmap that splits sentences to words:</p>
+{% highlight scala %}
+data.flatMap { str => str.split(" ") }
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Filter</strong></td>
+      <td>
+        <p>Evaluates a boolean function for each element and retains those for which the function returns true.
+       	<br/>
+	<br/>
+        A filter that filters out zero values:
+        </p>
+{% highlight scala %}
+dataStream.filter{ _ != 0 }
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Reduce</strong></td>
+        <td>
+        <p>Combines a group of elements into a single element by repeatedly combining two elements
+        into one and emits the current state after every reduction. Reduce may be applied on a full, windowed or grouped data stream.
+        <br/>
+        
+        <strong>IMPORTANT:</strong> The streaming and the batch reduce functions have different semantics. A streaming reduce on a data stream emits the current reduced value for every new element on a data stream. On a windowed data stream it works as a batch reduce: it produces at most one value per window.
+        <br/>
+	<br/>
+         A reducer that sums up the incoming stream, the result is a stream of intermediate sums:</p>
+{% highlight scala %}
+dataStream.reduce{ _ + _ }
+{% endhighlight %}
+      </td>
+    </tr>
+
+    <tr>
+      <td><strong>Merge</strong></td>
+      <td>
+        <p>Merges two or more data streams creating a new stream containing all the elements from all the streams.</p>
+{% highlight scala %}
+dataStream.merge(otherStream1, otherStream2, …)
+{% endhighlight %}
+      </td>
+    </tr>
+
+  </tbody>
+
+
+</table>
+
+</div>
+
+</div>
+
+### Grouped operators
+
+Some transformations require that the elements of a `DataStream` are grouped on some key. The user can create a `GroupedDataStream` by calling the `groupBy(key)` method of a non-grouped `DataStream`. 
+Keys can be of three types: fields positions (applicable for tuple/array types), field expressions (applicable for pojo types), KeySelector instances. 
+
+Aggregation or reduce operators called on `GroupedDataStream`s produce elements on a per group basis.
+
+### Aggregations
+
+The Flink Streaming API supports different types of pre-defined aggregations `DataStreams`. The common property of these operators, just like reduce on streams, they produce the stream of intermediate aggregate values.
+
+Types of aggregations: `sum(field)`, `min(field)`, `max(field)`, `minBy(field, first)`, `maxBy(field, first)`.
+
+With `sum`, `min`, and `max` for every incoming tuple the selected field is replaced with the current aggregated value. Fields can be selected using either field positions or field expressions (similarly to grouping).
+
+With `minBy` and `maxBy` the output of the operator is the element with the current minimal or maximal value at the given field. If more components share the minimum or maximum value, the user can decide if the operator should return the first or last element. This can be set by the `first` boolean parameter.
+
+There is also an option to apply user defined aggregations with the usage of the `aggregate(…)` function of the data stream.
+
+### Window operators
+
+Flink streaming provides very flexible data-driven windowing semantics to create arbitrary windows (also referred to as discretizations or slices) of the data streams and apply reduce, map or aggregation transformations on the windows acquired. Windowing can be used for instance to create rolling aggregations of the most recent N elements, where N could be defined by Time, Count or any arbitrary user defined measure. 
+
+The user can control the size (eviction) of the windows and the frequency of transformation or aggregation calls (trigger) on them in an intuitive API. We will describe the exact semantics of these operators in the [policy based windowing](#policy-based-windowing) section.
+
+Some examples:
+
+ * `dataStream.window(eviction).every(trigger).reduceWindow(…)`
+ * `dataStream.window(…).every(…).mapWindow(…).flatten()`
+ * `dataStream.window(…).every(…).groupBy(…).aggregate(…).getDiscretizedStream()`
+
+The core abstraction of the Windowing semantics is the `WindowedDataStream` and the `StreamWindow`. The `WindowedDataStream` is created when we first call the `window(…)` method of the DataStream and represents the windowed discretisation of the underlying stream. The user can think about it simply as a `DataStream<StreamWindow<T>>` where additional API functions are supplied to provide efficient transformations of individual windows. 
+
+Please note at this point that the `.every(…)` call belongs together with the preceding `.window(…)` call and does not define a new transformation in itself.
+
+The result of a window transformation is again a `WindowedDataStream` which can also be used to further apply other windowed computations. In this sense, window transformations define mapping from stream windows to stream windows.
+
+The user has different ways of using the a result of a window operation:
+
+ * `windowedDataStream.flatten()` - streams the results element wise and returns a `DataStream<T>` where T is the type of the underlying windowed stream
+ * `windowedDataStream.getDiscretizedStream()` - returns a `DataStream<StreamWindow<T>>` for applying some advanced logic on the stream windows itself, be careful here as at this point we need to materialise the full windows
+ * Calling any window transformation further transforms the windows, while preserving the windowing logic
+
+The next example would create windows that hold elements of the last 5 seconds, and the user defined transformation would be executed on the windows every second (sliding the window by 1 second):
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+dataStream.window(Time.of(5, TimeUnit.SECONDS)).every(Time.of(1, TimeUnit.SECONDS));
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+dataStream.window(Time.of(5, TimeUnit.SECONDS)).every(Time.of(1, TimeUnit.SECONDS))
+{% endhighlight %}
+</div>
+</div>
+
+This approach is often referred to as policy based windowing. Different policies (count, time, etc.) can be mixed as well, for example to downsample our stream, a window that takes the latest 100 elements of the stream every minute is created as follows:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+dataStream.window(Count.of(100)).every(Time.of(1, TimeUnit.MINUTES));
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+dataStream.window(Count.of(100)).every(Time.of(1, TimeUnit.MINUTES))
+{% endhighlight %}
+</div>
+</div>
+
+The user can also omit the `every(…)` call which results in a tumbling window emptying the window after every transformation call.
+
+Several predefined policies are provided in the API, including delta-based, count-based and time-based policies. These can be accessed through the static methods provided by the `PolicyHelper` classes:
+
+ * `Time.of(…)`
+ * `Count.of(…)`
+ * `Delta.of(…)`
+
+For detailed description of these policies please refer to the [Javadocs](http://flink.apache.org/docs/latest/api/java/).
+
+#### Policy based windowing
+The policy based windowing is a highly flexible way to specify stream discretisation also called windowing semantics. Two types of policies are used for such a specification:
+
+ * `TriggerPolicy` defines when to trigger the reduce or transformation UDF on the current window and emit the result. In the API it completes a window statement such as: `window(…).every(…)`, while the triggering policy is passed within `every`. In case the user wants to use tumbling eviction policy (the window is emptied after the transformation) he can omit the `.every(…)` call and pass the trigger policy directly to the `.window(…)` call.
+
+ * `EvictionPolicy` defines the length of a window as a means of a predicate for evicting tuples when they are no longer needed. In the API this can be defined by the `window(…)` operation on a stream. There are mostly the same predefined policy types provided as for trigger policies.
+
+Trigger and eviction policies work totally independently of each other. The eviction policy continuously maintains a window, into which it adds new elements and based on the eviction logic removes older elements in the order of arrival. The trigger policy on the other hand only decided at each new incoming element, whether it should trigger computation (and output results) on the currently maintained window.
+
+Several predefined policies are provided in the API, including delta-based, punctuation based, count-based and time-based policies. Policies are in general UDFs and can implement any custom behaviour.
+
+In addition to the `dataStream.window(…).every(…)` style users can specifically pass the trigger and eviction policies during the window call:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+dataStream.window(triggerPolicy, evictionPolicy);
+{% endhighlight %}
+</div>
+
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+dataStream.window(triggerPolicy, evictionPolicy)
+{% endhighlight %}
+</div>
+
+</div>
+
+By default triggers can only trigger when a new element arrives. This might not be suitable for all the use-cases with low data rates . To also provide triggering between elements so called active policies (the two interfaces controlling this special behaviour is `ActiveTriggerPolicy` and `CentralActiveTrigger`) can be used. The predefined time-based policies are already implemented in such a way and can hold as an example for user defined active policy implementations. 
+
+Time-based trigger and eviction policies can work with user defined `TimeStamp` implementations, these policies already cover most use cases.
+ 
+#### Reduce on windowed data streams
+The `WindowedDataStream<T>.reduceWindow(ReduceFunction<T>)` transformation calls the user-defined `ReduceFunction` at every trigger on the records currently in the window. The user can also use the different pre-implemented streaming aggregations such as `sum, min, max, minBy` and `maxBy`.
+
+The following is an example for a window reduce that sums the elements in the last minute with 10 seconds slide interval:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+dataStream.window(Time.of(1, TimeUnit.MINUTES)).every(Time.of(10,TimeUnit.SECONDS)).sum(field);
+{% endhighlight %}
+</div>
+
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+dataStream.window(Time.of(1, TimeUnit.MINUTES)).every(Time.of(10,TimeUnit.SECONDS)).sum(field)
+{% endhighlight %}
+</div>
+
+</div>
+
+
+#### Map on windowed data streams
+The `WindowedDataStream<T>.mapWindow(WindowMapFunction<T,O>)` transformation calls  `mapWindow(…)` for each `StreamWindow` in the discretised stream providing access to all elements in the window through the iterable interface. At each function call the output `StreamWindow<O>` will consist of all the elements collected to the collector. This allows a straightforward way of mapping one stream window to another.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+windowedDataStream.mapWindow(windowMapFunction);
+{% endhighlight %}
+</div>
+
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+windowedDataStream.mapWindow(windowMapFunction)
+{% endhighlight %}
+</div>
+
+</div>
+
+#### Grouped transformations on windowed data streams
+Calling the `groupBy(…)` method on a windowed stream groups the elements by the given fields inside the stream windows. The window sizes (evictions) and slide sizes (triggers) will be calculated on the whole stream (in a global fashion), but the user defined functions will be applied on a per group basis inside the window. This means that for a call `windowedStream.groupBy(…).reduceWindow(…)` will transform each window into another window consisting of as many elements as keys in the original window, with the reduced values per key. Similarly the `mapWindow` transformation is applied per group as well.
+
+The user can also create discretisation on a per group basis calling `window(…).every(…)` on an already grouped data stream. This will apply the discretisation logic independently for each key.
+
+To highlight the differences let us look at two examples.
+
+To get the maximal value for each key on the last 100 elements (global) we use the first approach:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+dataStream.window(Count.of(100)).every(…).groupBy(groupingField).max(field);
+{% endhighlight %}
+</div>
+
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+dataStream.window(Count.of(100)).every(…).groupBy(groupingField).max(field)
+{% endhighlight %}
+</div>
+
+</div>
+
+Using this approach we took the last 100 elements, divided it into groups by key then applied the aggregation. To create fixed size windows for every key we need to reverse the order of the groupBy call. So to take the max for the last 100 elements in Each group:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+dataStream.groupBy(groupingField).window(Count.of(100)).every(…).max(field);
+{% endhighlight %}
+</div>
+
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+dataStream.groupBy(groupingField).window(Count.of(100)).every(…).max(field)
+{% endhighlight %}
+</div>
+
+</div>
+
+This will create separate windows for different keys and apply the trigger and eviction policies on a per group basis.
+
+#### Applying multiple transformations on a window
+Using the `WindowedDataStream` abstraction we can apply several transformations one after another on the discretised streams without having to re-discretise it:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+dataStream.window(Count.of(1000)).groupBy(firstKey).mapWindow(…)
+    .groupBy(secondKey).reduceWindow(…).flatten();
+{% endhighlight %}
+</div>
+
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+dataStream.window(Count.of(1000)).groupBy(firstKey).mapWindow(…)
+    .groupBy(secondKey).reduceWindow(…).flatten()
+{% endhighlight %}
+</div>
+</div>
+
+The above call would create global windows of 1000 elements group it by the first key and then apply a mapWindow transformation. The resulting windowed stream will then be grouped by the second key and further reduced. The results of the reduce transformation are then flattened.
+
+Notice that here we only defined the window size once at the beginning of the transformation. This means that anything that happens afterwards (`groupBy(firstKey).mapWindow(…).groupBy(secondKey).reduceWindow(…)`) happens inside the 1000 element windows. Of course the mapWindow might reduce the number of elements but the key idea is that each transformation still corresponds to the same 1000 elements in the original stream.
+
+#### Global vs local discretisation
+By default all window discretisation calls (`dataStream.window(…)`) define global windows meaning that a global window of count 100 will contain the last 100 elements arrived at the discretisation operator in order. In most cases (except for Time) this means that the operator doing the actual discretisation needs to have a parallelism of 1 to be able to correctly execute the discretisation logic.
+
+Sometimes it is sufficient to create local discretisations, which allows the discretiser to run in parallel and apply the given discretisation logic at every discretiser instance. To allow local discretisation use the `local()` method of the windowed data stream.
+
+For example `dataStream.window(Count.of(100)).maxBy(field)` would create global windows of 100 elements (Count discretises with parallelism of 1) and return the record with the max value by the selected field, alternatively the `dataStream.window(Count.of(100)).local().maxBy(field)` would create several count discretisers (as defined by the environment parallelism) and compute the max values accordingly.
+
+
+### Temporal database style operators
+
+While database style operators like joins (on key) and crosses are hard to define properly on data streams, a straightforward interpretation is to apply these operators on windows of the data streams. 
+
+Currently join and cross operators are supported only on time windows. We are working on alleviating this limitations in the next release.
+
+Temporal operators take the current windows of both streams and apply the join/cross logic on these window pairs.
+
+The Join transformation produces a new Tuple DataStream with two fields. Each tuple holds a joined element of the first input DataStream in the first tuple field and a matching element of the second input DataStream in the second field for the current window. The user can also supply a custom join function to control the produced elements.
+
+The following code shows a default Join transformation using field position keys:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+dataStream1.join(dataStream2)
+    .onWindow(windowing_params)
+    .where(key_in_first)
+    .equalTo(key_in_second);
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+dataStream1.join(dataStream2)
+    .onWindow(windowing_params)
+    .where(key_in_first)
+    .equalTo(key_in_second)
+{% endhighlight %}
+</div>
+</div>
+
+The Cross transformation combines two `DataStream`s into one `DataStream`. It builds all pairwise combinations of the elements of both input DataStreams in the current window, i.e., it builds a temporal Cartesian product. The user can also supply a custom cross function to control the produced elements
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+dataStream1.cross(dataStream2).onWindow(windowing_params);
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+dataStream1 cross dataStream2 onWindow (windowing_params)
+{% endhighlight %}
+</div>
+</div>
+
+
+### Co operators
+
+Co operators allow the users to jointly transform two `DataStream`s of different types providing a simple way to jointly manipulate streams with a shared state. It is designed to support joint stream transformations where merging is not appropriate due to different data types or in case the user needs explicit tracking of the origin of individual elements.
+Co operators can be applied to `ConnectedDataStream`s which represent two `DataStream`s of possibly different types. A `ConnectedDataStream` can be created by calling the `connect(otherDataStream)` method of a `DataStream`. Please note that the two connected `DataStream`s can also be merged data streams.
+
+#### Map on ConnectedDataStream
+Applies a CoMap transformation on two separate DataStreams, mapping them to a common output type. The transformation calls a `CoMapFunction.map1()` for each element of the first input and `CoMapFunction.map2()` for each element of the second input. Each CoMapFunction call returns exactly one element.
+A CoMap operator that outputs true if an Integer value is received and false if a String value is received:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+DataStream<Integer> dataStream1 = ...
+DataStream<String> dataStream2 = ...
+        
+dataStream1.connect(dataStream2)
+    .map(new CoMapFunction<Integer, String, Boolean>() {
+            
+            @Override
+            public Boolean map1(Integer value) {
+                return true;
+            }
+            
+            @Override
+            public Boolean map2(String value) {
+                return false;
+            }
+        })
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+val dataStream1 : DataStream[Int] = ...
+val dataStream2 : DataStream[String] = ...
+
+(dataStream1 connect dataStream2)
+  .map(
+    (_ : Int) => true,
+    (_ : String) => false
+  )
+{% endhighlight %}
+</div>
+</div>
+
+#### FlatMap on ConnectedDataStream
+The FlatMap operator for the `ConnectedDataStream` works similarly to CoMap, but instead of returning exactly one element after each map call the user can output arbitrarily many values using the Collector interface. 
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+DataStream<Integer> dataStream1 = ...
+DataStream<String> dataStream2 = ...
+        
+dataStream1.connect(dataStream2)
+    .flatMap(new CoFlatMapFunction<Integer, String, String>() {
+
+            @Override
+            public void flatMap1(Integer value, Collector<String> out) {
+                out.collect(value.toString());
+            }
+
+            @Override
+            public void flatMap2(String value, Collector<String> out) {
+                for (String word: value.split(" ")) {
+                  out.collect(word);
+                }
+            }
+        })
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+val dataStream1 : DataStream[Int] = ...
+val dataStream2 : DataStream[String] = ...
+
+(dataStream1 connect dataStream2)
+  .flatMap(
+    (num : Int) => List(num.toString),
+    (str : String) => str.split(" ")
+  )
+{% endhighlight %}
+</div>
+</div>
+
+#### WindowReduce on ConnectedDataStream
+The windowReduce operator applies a user defined `CoWindowFunction` to time aligned windows of the two data streams and return zero or more elements of an arbitrary type. The user can define the window and slide intervals and can also implement custom timestamps to be used for calculating windows.
+
+#### Reduce on ConnectedDataStream
+The Reduce operator for the `ConnectedDataStream` applies a simple reduce transformation on the joined data streams and then maps the reduced elements to a common output type.
+
+### Output splitting
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+
+Most data stream operators support directed outputs (output splitting), meaning that different output elements are sent only to specific outputs. The outputs are referenced by their name given at the point of receiving:
+
+{% highlight java %}
+SplitDataStream<Integer> split = someDataStream.split(outputSelector);
+DataStream<Integer> even = split.select("even");
+DataStream<Integer> odd = split.select("odd");
+{% endhighlight %}
+In the above example the data stream named “even” will only contain elements that are directed to the output named “even”. The user can of course further transform these new stream by for example squaring only the even elements.
+
+Data streams only receive the elements directed to selected output names. The user can also select multiple output names by `splitStream.select(“output1”, “output2”, …)`. It is common that a stream listens to all the outputs, so `split.selectAll()` provides this functionality without having to select all names.
+
+The outputs of an operator are directed by implementing a selector function (implementing the `OutputSelector` interface):
+
+{% highlight java %}
+Iterable<String> select(OUT value);
+{% endhighlight %}
+
+The data is sent to all the outputs returned in the iterable (referenced by their name). This way the direction of the outputs can be determined by the value of the data sent. 
+
+For example to split even and odd numbers:
+
+{% highlight java %}
+@Override
+Iterable<String> select(Integer value) {
+
+    List<String> outputs = new ArrayList<String>();
+
+    if (value % 2 == 0) {
+        outputs.add("even");
+    } else {
+        outputs.add("odd");
+    }
+
+    return outputs;
+}
+{% endhighlight %}
+
+Every output will be emitted to the selected outputs exactly once, even if you add the same output names more than once.
+
+The functionality provided by output splitting can also be achieved efficiently (due to operator chaining) by multiple filter operators.
+</div>
+<div data-lang="scala" markdown="1">
+
+Most data stream operators support directed outputs (output splitting), meaning that different output elements are sent only to specific outputs. The outputs are referenced by their name given at the point of receiving:
+
+{% highlight scala %}
+val split = someDataStream.split(
+  (num: Int) =>
+    (num % 2) match {
+      case 0 => List("even")
+      case 1 => List("odd")
+    }
+)
+
+val even = split select "even" 
+val odd = split select "odd"
+{% endhighlight %}
+
+In the above example the data stream named “even” will only contain elements that are directed to the output named “even”. The user can of course further transform these new stream by for example squaring only the even elements.
+
+Data streams only receive the elements directed to selected output names. The user can also select multiple output names by `splitStream.select(“output1”, “output2”, …)`. It is common that a stream listens to all the outputs, so `split.selectAll` provides this functionality without having to select all names.
+
+The outputs of an operator are directed by implementing a function that returns the output names for the value. The data is sent to all the outputs returned by the function (referenced by their name). This way the direction of the outputs can be determined by the value of the data sent.
+
+Every output will be emitted to the selected outputs exactly once, even if you add the same output names more than once.
+
+The functionality provided by output splitting can also be achieved efficiently (due to operator chaining) by multiple filter operators.
+</div>
+
+</div>
+
+### Iterations
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+The Flink Streaming API supports implementing iterative stream processing dataflows similarly to the batch Flink API. Iterative streaming programs also implement a step function and embed it into an `IterativeDataStream`.
+Unlike in the batch API the user does not define the maximum number of iterations, but at the tail of each iteration part of the output is streamed forward to the next operator and part is streamed back to the iteration head. The user controls the output of the iteration tail using [output splitting](#output-splitting) or [filters](#filter).
+To start an iterative part of the program the user defines the iteration starting point:
+
+{% highlight java %}
+IterativeDataStream<Integer> iteration = source.iterate(maxWaitTimeMillis);
+{% endhighlight %}
+
+The operator applied on the iteration starting point is the head of the iteration, where data is fed back from the iteration tail.
+
+{% highlight java %}
+DataStream<Integer> head = iteration.map(new IterationHead());
+{% endhighlight %}
+
+To close an iteration and define the iteration tail, the user calls `closeWith(iterationTail)` method of the `IterativeDataStream`. This iteration tail (the DataStream given to the `closeWith` function) will be fed back to the iteration head. A common pattern is to use [filters](#filter) to separate the output of the iteration from the feedback-stream.
+
+{% highlight java %}
+DataStream<Integer> tail = head.map(new IterationTail());
+
+iteration.closeWith(tail.filter(isFeedback));
+
+DataStream<Integer> output = tail.filter(isOutput);
+
+output.map(…).project(…);
+{% endhighlight %}
+
+In this case all values passing the `isFeedback` filter will be fed back to the iteration head, and the values passing the `isOutput` filter will produce the output of the iteration that can be transformed further (here with a `map` and a `projection`) outside the iteration.
+
+Because iterative streaming programs do not have a set number of iterations for each data element, the streaming program has no information on the end of its input. As a consequence iterative streaming programs run until the user manually stops the program. While this is acceptable under normal circumstances a method is provided to allow iterative programs to shut down automatically if no input received by the iteration head for a predefined number of milliseconds.
+To use this functionality the user needs to add the maxWaitTimeMillis parameter to the `dataStream.iterate(…)` call to control the max wait time. 
+</div>
+<div data-lang="scala" markdown="1">
+The Flink Streaming API supports implementing iterative stream processing dataflows similarly to the batch Flink API. Iterative streaming programs also implement a step function and embed it into an `IterativeDataStream`.
+Unlike in the batch API the user does not define the maximum number of iterations, but at the tail of each iteration part of the output is streamed forward to the next operator and part is streamed back to the iteration head. The user controls the output of the iteration tail by defining a step function that return two DataStreams: a feedback and an output. The first one is the output that will be fed back to the start of the iteration and the second is the output stream of the iterative part.
+
+A common pattern is to use [filters](#filter) to separate the output from the feedback-stream. In this case all values passing the `isFeedback` filter will be fed back to the iteration head, and the values passing the `isOutput` filter will produce the output of the iteration that can be transformed further (here with a `map` and a `projection`) outside the iteration.
+
+{% highlight scala %}
+val iteratedStream = someDataStream.iterate(maxWaitTime) {
+  iteration => {
+    val head = iteration.map(iterationHead)
+    val tail = head.map(iterationTail)
+    (tail.filter(isFeedback), tail.filter(isOutput))
+  }
+}.map(…).project(…)
+{% endhighlight %}
+
+Because iterative streaming programs do not have a set number of iterations for each data element, the streaming program has no information on the end of its input. As a consequence iterative streaming programs run until the user manually stops the program. While this is acceptable under normal circumstances a method is provided to allow iterative programs to shut down automatically if no input received by the iteration head for a predefined number of milliseconds.
+To use this functionality the user needs to add the maxWaitTimeMillis parameter to the `dataStream.iterate(…)` call to control the max wait time. 
+</div>
+
+</div>
+
+### Rich functions
+The [usage](programming_guide.html#rich-functions) of rich functions are essentially the same as in the batch Flink API. All transformations that take as argument a user-defined function can instead take a rich function as argument:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+dataStream.map(new RichMapFunction<Integer, String>() {
+    @Override
+    public void open(Configuration parameters) throws Exception {
+        /* initialization of function */
+    }
+
+    @Override
+    public String map(Integer value) { return value.toString(); }
+});
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+dataStream map
+  new RichMapFunction[Int, String] {
+    override def open(config: Configuration) = {
+      /* initialization of function */
+    }
+    override def map(value: Int): String = value.toString
+  }
+{% endhighlight %}
+</div>
+</div>
+
+Rich functions provide, in addition to the user-defined function (`map()`, `reduce()`, etc), the `open()` and `close()` methods for initialization and finalization.
+
+[Back to top](#top)
+
+Lambda expressions with Java 8
+------------
+
+For a more consise code one can rely on one of the main feature of Java 8, lambda expressions. The following program has similar functionality to the one provided in the [example](#example-program) section, while showcasing the usage of lambda expressions.
+
+<div class="codetabs" markdown="1">
+<div data-lang="java8" markdown="1">
+{% highlight java %}
+public class StreamingWordCount {
+    public static void main(String[] args) throws Exception {
+        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+
+        DataStream<String> text = env.fromElements(
+                "Who's there?",
+                "I think I hear them. Stand, ho! Who's there?");
+
+            DataStream<Tuple2<String, Integer>> counts = 
+        // normalize and split each line
+        text.map(line -> line.toLowerCase().split("\\W+"))
+        // convert splitted line in pairs (2-tuples) containing: (word,1)
+        .flatMap((String[] tokens, Collector<Tuple2<String, Integer>> out) -> {
+        // emit the pairs with non-zero-length words
+            Arrays.stream(tokens)
+                .filter(t -> t.length() > 0)
+                .forEach(t -> out.collect(new Tuple2<>(t, 1)));
+        })
+        // group by the tuple field "0" and sum up tuple field "1"
+        .groupBy(0)
+        .sum(1);
+
+        counts.print();
+
+        env.execute("Streaming WordCount");
+    }
+}
+{% endhighlight %}
+</div>
+</div>
+
+For a detailed Java 8 Guide please refer to the [Java 8 Programming Guide](java8_programming_guide.html). Operators specific to streaming, such as Operator splitting also support this usage. [Output splitting](#output-splitting) can be rewritten as follows:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java8" markdown="1">
+{% highlight java %}
+SplitDataStream<Integer> split = someDataStream
+    .split(x -> Arrays.asList(String.valueOf(x % 2)));
+{% endhighlight %}
+</div>
+</div>
+
+Operator Settings
+----------------
+
+### Parallelism
+
+Setting parallelism for operators works exactly the same way as in the batch Flink API. The user can control the number of parallel instances created for each operator by calling the `operator.setParallelism(parallelism)` method.
+
+### Buffer timeout
+
+By default data points are not transferred on the network one-by-one, which would cause unnecessary network traffic, but are buffered in the output buffers. The size of the output buffers can be set in the Flink config files. While this method is good for optimizing throughput, it can cause latency issues when the incoming stream is not fast enough.
+To tackle this issue the user can call `env.setBufferTimeout(timeoutMillis)` on the execution environment (or on individual operators) to set a maximum wait time for the buffers to fill up. After this time the buffers are flushed automatically even if they are not full. The default value for this timeout is 100 ms which should be appropriate for most use-cases. 
+
+Usage:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+LocalStreamEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();
+env.setBufferTimeout(timeoutMillis);
+
+env.genereateSequence(1,10).map(new MyMapper()).setBufferTimeout(timeoutMillis);
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+LocalStreamEnvironment env = StreamExecutionEnvironment.createLocalEnvironment
+env.setBufferTimeout(timeoutMillis)
+
+env.genereateSequence(1,10).map(myMap).setBufferTimeout(timeoutMillis)
+{% endhighlight %}
+</div>
+</div>
+
+To maximise the throughput the user can call `setBufferTimeout(-1)` which will remove the timeout and buffers will only be flushed when they are full.
+To minimise latency, set the timeout to a value close to 0 (for example 5 or 10 ms). Theoretically a buffer timeout of 0 will cause all outputs to be flushed when produced, but this setting should be avoided because it can cause severe performance degradation.
+
+
+[Back to top](#top)
+    
+Stream connectors
+----------------
+
+Connectors provide an interface for accessing data from various third party sources (message queues). Currently four connectors are natively supported, namely [Apache Kafka](https://kafka.apache.org/),  [RabbitMQ](http://www.rabbitmq.com/), [Apache Flume](https://flume.apache.org/index.html) and [Twitter Streaming API](https://dev.twitter.com/docs/streaming-apis).
+
+Typically the connector packages consist of a source and sink class (with the exception of Twitter where only a source is provided). To use these sources the user needs to pass Serialization/Deserialization schemas for the connectors for the desired types. (Or use some predefined ones)
+
+To run an application using one of these connectors usually additional third party components are required to be installed and launched, e.g. the servers for the message queues. Further instructions for these can be found in the corresponding subsections. [Docker containers](#docker-containers-for-connectors) are also provided encapsulating these services to aid users getting started with connectors.
+
+### Apache Kafka
+
+This connector provides access to data streams from [Apache Kafka](https://kafka.apache.org/).
+
+#### Installing Apache Kafka
+* Follow the instructions from [Kafka's quickstart](https://kafka.apache.org/documentation.html#quickstart) to download the code and launch a server (launching a Zookeeper and a Kafka server is required every time before starting the application).
+* On 32 bit computers [this](http://stackoverflow.com/questions/22325364/unrecognized-vm-option-usecompressedoops-when-running-kafka-from-my-ubuntu-in) problem may occur. 
+* If the Kafka and Zookeeper servers are running on a remote machine, then the `advertised.host.name` setting in the `config/server.properties` file the  must be set to the machine's IP address.
+
+#### Kafka Source
+The standard `KafkaSource` is a Kafka consumer providing an access to one topic.
+
+The following parameters have to be provided for the `KafkaSource(...)` constructor:
+
+1. Zookeeper hostname
+2. The topic name
+3. Deserialization schema
+
+Example:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+DataStream<String> stream = env
+	.addSource(new KafkaSource<String>("localhost:2181", "test", new SimpleStringSchema()))
+	.print();
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+stream = env
+    .addSource(new KafkaSource[String]("localhost:2181", "test", new SimpleStringSchema)
+    .print
+{% endhighlight %}
+</div>
+</div>
+
+#### Persistent Kafka Source
+As Kafka persists all the data, a fault tolerant Kafka source can be provided.
+
+The PersistentKafkaSource can read a topic, and if the job fails for some reason, the source will
+continue on reading from where it left off after a restart.
+For example if there are 3 partitions in the topic with offsets 31, 122, 110 read at the time of job
+failure, then at the time of restart it will continue on reading from those offsets, no matter whether these partitions have new messages.
+
+To use fault tolerant Kafka Sources, monitoring of the topology needs to be enabled at the execution environment:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
+env.enableMonitoring(5000);
+{% endhighlight %}
+</div>
+</div>
+
+Also note that Flink can only restart the topology if enough processing slots are available to restart the topology.
+So if the topology fails due to loss of a TaskManager, there must be still enough slots available afterwards.
+Flink on YARN supports automatic restart of lost YARN containers.
+
+The following arguments have to be provided for the `PersistentKafkaSource(...)` constructor:
+
+1. Zookeeper hostname
+2. The topic name
+3. Deserialization schema
+
+Example:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+stream.addSource(new PersistentKafkaSource<String>("localhost:2181", "test", new SimpleStringSchema()));
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+stream.addSource(new PersistentKafkaSource[String]("localhost:2181", "test", new SimpleStringSchema))
+{% endhighlight %}
+</div>
+</div>
+
+#### Kafka Sink
+A class providing an interface for sending data to Kafka. 
+
+The followings have to be provided for the `KafkaSink(…)` constructor in order:
+
+1. Zookeeper hostname
+2. The topic name
+3. Serialization schema
+
+Example: 
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+stream.addSink(new KafkaSink<String>("localhost:2181", "test", new SimpleStringSchema()));
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+stream.addSink(new KafkaSink[String]("localhost:2181", "test", new SimpleStringSchema))
+{% endhighlight %}
+</div>
+</div>
+
+The user can also define custom Kafka producer configuration for the KafkaSink with the constructor:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+public KafkaSink(String zookeeperAddress, String topicId, Properties producerConfig,
+      SerializationSchema<IN, byte[]> serializationSchema)
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+public KafkaSink(String zookeeperAddress, String topicId, Properties producerConfig,
+      SerializationSchema serializationSchema)
+{% endhighlight %}
+</div>
+</div>
+
+If this constructor is used, the user needs to make sure to set the broker with the "metadata.broker.list" property. Also the serializer configuration should be left default, the serialization should be set via SerializationSchema.
+
+More about Kafka can be found [here](https://kafka.apache.org/documentation.html).
+
+[Back to top](#top)
+
+### Apache Flume
+
+This connector provides access to data streams from [Apache Flume](http://flume.apache.org/).
+
+#### Installing Apache Flume
+[Download](http://flume.apache.org/download.html) Apache Flume. A configuration file is required for starting agents in Flume. A configuration file for running the example can be found [here](#config_file).
+
+#### Flume Source
+A class providing an interface for receiving data from Flume.
+
+The followings have to be provided for the `FlumeSource(…)` constructor in order:
+
+1. The hostname
+2. The port number
+3. Deserialization schema
+
+Example:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+DataStream<String> stream = env
+	.addSource(new FlumeSource<String>("localhost", 41414, new SimpleStringSchema()))
+	.print();
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+stream = env
+    .addSource(new FlumeSource[String]("localhost", 41414, new SimpleStringSchema))
+    .print
+{% endhighlight %}
+</div>
+</div>
+
+#### Flume Sink
+A class providing an interface for sending data to Flume. 
+
+The followings have to be provided for the `FlumeSink(…)` constructor in order:
+
+1. The hostname
+2. The port number
+3. Serialisation schema
+
+Example: 
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+stream.addSink(new FlumeSink<String>("localhost", 42424, new StringToByteSerializer()));
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+stream.addSink(new FlumeSink[String]("localhost", 42424, new StringToByteSerializer))
+{% endhighlight %}
+</div>
+</div>
+
+##### Configuration file<a name="config_file"></a>
+An example of a configuration file:
+
+~~~
+a1.channels = c1
+a1.sources = r1
+a1.sinks = k1
+
+a1.channels.c1.type = memory
+
+a1.sources.r1.channels = c1
+a1.sources.r1.type = avro
+a1.sources.r1.bind = localhost
+a1.sources.r1.port = 42424
+
+a1.sinks.k1.channel = c1
+a1.sinks.k1.type = avro
+a1.sinks.k1.hostname = localhost
+a1.sinks.k1.port = 41414
+~~~
+
+To run the `FlumeTopology` example the previous configuration file must located in the Flume directory and named example.conf and the agent can be started with the following command:
+
+~~~
+bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
+~~~
+
+If the agent is not started before the application starts a `FlumeSink` then the sink will retry to build the connection for 90 seconds, if unsuccessful it throws a `RuntimeException`.
+
+More on Flume can be found [here](http://flume.apache.org).
+
+[Back to top](#top)
+
+### RabbitMQ
+
+This connector provides access to data streams from [RabbitMQ](http://www.rabbitmq.com/).
+
+##### Installing RabbitMQ
+Follow the instructions from the [RabbitMQ download page](http://www.rabbitmq.com/download.html). After the installation the server automatically starts and the application connecting to RabbitMQ can be launched.
+
+#### RabbitMQ Source
+
+A class providing an interface for receiving data from RabbitMQ.
+
+The followings have to be provided for the `RMQSource(…)` constructor in order:
+
+1. The hostname
+2. The queue name
+3. Deserialization schema
+
+Example:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+DataStream<String> stream = env
+	.addSource(new RMQSource<String>("localhost", "hello", new SimpleStringSchema))
+	.print
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+stream = env
+    .addSource(new RMQSource[String]("localhost", "hello", new SimpleStringSchema))
+    .print
+{% endhighlight %}
+</div>
+</div>
+
+#### RabbitMQ Sink
+A class providing an interface for sending data to RabbitMQ. 
+
+The followings have to be provided for the `RMQSink(…)` constructor in order:
+
+1. The hostname
+2. The queue name
+3. Serialisation schema
+
+Example: 
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+stream.addSink(new RMQSink<String>("localhost", "hello", new StringToByteSerializer()));
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+stream.addSink(new RMQSink[String]("localhost", "hello", new StringToByteSerializer))
+{% endhighlight %}
+</div>
+</div>
+
+More about RabbitMQ can be found [here](http://www.rabbitmq.com/).
+
+[Back to top](#top)
+
+### Twitter Streaming API
+
+Twitter Streaming API provides opportunity to connect to the stream of tweets made available by Twitter. Flink Streaming comes with a built-in `TwitterSource` class for establishing a connection to this stream.
+
+#### Authentication
+In order to connect to Twitter stream the user has to register their program and acquire the necessary information for the authentication. The process is described below.
+
+#### Acquiring the authentication information
+First of all, a Twitter account is needed. Sign up for free at [twitter.com/signup](https://twitter.com/signup) or sign in at Twitter's [Application Management](https://apps.twitter.com/) and register the application by clicking on the "Create New App" button. Fill out a form about your program and accept the Terms and Conditions. 
+After selecting the application you the API key and API secret (called `consumerKey` and `sonsumerSecret` in `TwitterSource` respectively) is located on the "API Keys" tab. The necessary access token data (`token` and `secret`) can be acquired here. 
+Remember to keep these pieces of information a secret and do not push them to public repositories.
+
+#### Accessing the authentication information
+Create a properties file and pass its path in the constructor of `TwitterSource`. The content of the file should be similar to this:
+
+~~~bash
+#properties file for my app
+secret=***
+consumerSecret=***
+token=***-***
+consumerKey=***
+~~~
+
+#### Constructors
+The `TwitterSource` class has two constructors.
+
+1. `public TwitterSource(String authPath, int numberOfTweets);` 
+to emit finite number of tweets
+2. `public TwitterSource(String authPath);` 
+for streaming
+
+Both constructors expect a `String authPath` argument determining the location of the properties file containing the authentication information. In the first case, `numberOfTweets` determine how many tweet the source emits. 
+
+#### Usage
+In constract to other connecters the `TwitterSource` depends on no additional services. For example the following code should run gracefully:
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+DataStream<String> streamSource = env.addSource(new TwitterSource("/PATH/TO/myFile.properties"));
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+streamSource = env.addSource(new TwitterSource("/PATH/TO/myFile.properties"))
+{% endhighlight %}
+</div>
+</div>
+
+The `TwitterSource` emits strings containing a JSON code. 
+To retrieve information from the JSON code you can add a FlatMap or a Map function handling JSON code. For example use an implementation `JSONParseFlatMap` abstract class among the examples. `JSONParseFlatMap` is an extension of the `FlatMapFunction` and has a
+
+<div class="codetabs" markdown="1">
+<div data-lang="java" markdown="1">
+{% highlight java %}
+String getField(String jsonText, String field);
+{% endhighlight %}
+</div>
+<div data-lang="scala" markdown="1">
+{% highlight scala %}
+getField(jsonText : String, field : String) : String
+{% endhighlight %}
+</div>
+</div>
+
+function which can be use to acquire the value of a given field. 
+
+There are two basic types of tweets. The usual tweets contain information such as date and time of creation, id, user, language and many more details. The other type is the delete information.
+
+#### Example
+`TwitterLocal` is an example how to use `TwitterSource`. It implements a language frequency counter program. 
+
+[Back to top](#top)
+
+### Docker containers for connectors
+
+A Docker container is provided with all the required configurations for test running the connectors of Apache Flink. The servers for the message queues will be running on the docker container while the example topology can be run on the user's computer. The only exception is Flume, more can be read about this issue in the [Flume section](#flume). 
+
+#### Installing Docker
+The official Docker installation guide can be found [here](https://docs.docker.com/installation/).
+After installing Docker an image can be pulled for each connector. Containers can be started from these images where all the required configurations are set.
+
+#### Creating a jar with all the dependencies
+For the easiest set up create a jar with all the dependencies of the *flink-streaming-connectors* project.
+
+~~~bash
+cd /PATH/TO/GIT/flink/flink-staging/flink-streaming-connectors
+mvn assembly:assembly
+~~~bash
+
+This creates an assembly jar under *flink-streaming-connectors/target*. 
+
+#### RabbitMQ
+Pull the docker image:
+
+~~~bash
+sudo docker pull flinkstreaming/flink-connectors-rabbitmq 
+~~~
+
+To run the container type:
+
+~~~bash
+sudo docker run -p 127.0.0.1:5672:5672 -t -i flinkstreaming/flink-connectors-rabbitmq
+~~~
+
+Now a terminal started running from the image with all the necessary configurations to test run the RabbitMQ connector. The -p flag binds the localhost's and the Docker container's ports so RabbitMQ can communicate with the application through these.
+
+To start the RabbitMQ server:
+
+~~~bash
+sudo /etc/init.d/rabbitmq-server start
+~~~
+
+To launch the example on the host computer execute:
+
+~~~bash
+java -cp /PATH/TO/JAR-WITH-DEPENDENCIES org.apache.flink.streaming.connectors.rabbitmq.RMQTopology \
+> log.txt 2> errorlog.txt
+~~~
+
+In the example there are two connectors. One that sends messages to RabbitMQ and one that receives messages from the same queue. In the logger messages the arriving messages can be observed in the following format:
+
+~~~
+<DATE> INFO rabbitmq.RMQTopology: String: <one> arrived from RMQ 
+<DATE> INFO rabbitmq.RMQTopology: String: <two> arrived from RMQ
+<DATE> INFO rabbitmq.RMQTopology: String: <three> arrived from RMQ
+<DATE> INFO rabbitmq.RMQTopology: String: <four> arrived from RMQ
+<DATE> INFO rabbitmq.RMQTopology: String: <five> arrived from RMQ
+~~~
+
+#### Apache Kafka
+
+Pull the image:
+
+~~~bash
+sudo docker pull flinkstreaming/flink-connectors-kafka 
+~~~
+
+To run the container type:
+
+~~~bash
+sudo docker run -p 127.0.0.1:2181:2181 -p 127.0.0.1:9092:9092 -t -i \
+flinkstreaming/flink-connectors-kafka
+~~~
+
+Now a terminal started running from the image with all the necessary configurations to test run the Kafka connector. The -p flag binds the localhost's and the Docker container's ports so Kafka can communicate with the application through these.
+First start a zookeeper in the background:
+
+~~~bash
+/kafka_2.9.2-0.8.1.1/bin/zookeeper-server-start.sh /kafka_2.9.2-0.8.1.1/config/zookeeper.properties \
+> zookeeperlog.txt &
+~~~
+
+Then start the kafka server in the background:
+
+~~~bash
+/kafka_2.9.2-0.8.1.1/bin/kafka-server-start.sh /kafka_2.9.2-0.8.1.1/config/server.properties \
+ > serverlog.txt 2> servererr.txt &
+~~~
+
+To launch the example on the host computer execute:
+
+~~~bash
+java -cp /PATH/TO/JAR-WITH-DEPENDENCIES org.apache.flink.streaming.connectors.kafka.KafkaTopology \
+> log.txt 2> errorlog.txt
+~~~
+
+
+In the example there are two connectors. One that sends messages to Kafka and one that receives messages from the same queue. In the logger messages the arriving messages can be observed in the following format:
+
+~~~
+<DATE> INFO kafka.KafkaTopology: String: (0) arrived from Kafka
+<DATE> INFO kafka.KafkaTopology: String: (1) arrived from Kafka
+<DATE> INFO kafka.KafkaTopology: String: (2) arrived from Kafka
+<DATE> INFO kafka.KafkaTopology: String: (3) arrived from Kafka
+<DATE> INFO kafka.KafkaTopology: String: (4) arrived from Kafka
+<DATE> INFO kafka.KafkaTopology: String: (5) arrived from Kafka
+<DATE> INFO kafka.KafkaTopology: String: (6) arrived from Kafka
+<DATE> INFO kafka.KafkaTopology: String: (7) arrived from Kafka
+<DATE> INFO kafka.KafkaTopology: String: (8) arrived from Kafka
+<DATE> INFO kafka.KafkaTopology: String: (9) arrived from Kafka
+~~~
+
+#### Apache Flume
+
+At the moment remote access for Flume connectors does not work. This example is only runnable on the same machine where the Flume server is. In this case both will be in the Docker container.
+
+Pull the image:
+
+~~~bash
+sudo docker pull flinkstreaming/flink-connectors-flume
+~~~
+
+To run the container type:
+
+~~~bash
+sudo docker run -t -i flinkstreaming/flink-connectors-flume
+~~~
+
+Now a terminal started running from the image with all the necessary configurations to test run the Flume connector. The -p flag binds the localhost's and the Docker container's ports so flume can communicate with the application through these.
+
+To have the latest version of Flink type:
+~~~bash
+cd /git/flink/
+git pull
+~~~
+
+Then build the code with:
+
+~~~bash
+cd /git/flink/flink-staging/flink-streaming/flink-streaming-connectors/
+mvn install -DskipTests
+~~~
+
+First start the server in the background:
+
+~~~bash
+/apache-flume-1.5.0-bin/bin/flume-ng agent \
+--conf conf --conf-file /apache-flume-1.5.0-bin/example.conf --name a1 \
+-Dflume.root.logger=INFO,console > /flumelog.txt 2> /flumeerr.txt &
+~~~
+
+Then press enter and launch the example with:
+
+~~~bash
+java -cp /PATH/TO/JAR-WITH-DEPENDENCIES org.apache.flink.streaming.connectors.flume.FlumeTopology
+~~~
+
+In the example there are to connectors. One that sends messages to Flume and one that receives messages from the same queue. In the logger messages the arriving messages can be observed in the following format:
+
+~~~
+<DATE> INFO flume.FlumeTopology: String: <one> arrived from Flume
+<DATE> INFO flume.FlumeTopology: String: <two> arrived from Flume
+<DATE> INFO flume.FlumeTopology: String: <three> arrived from Flume
+<DATE> INFO flume.FlumeTopology: String: <four> arrived from Flume
+<DATE> INFO flume.FlumeTopology: String: <five> arrived from Flume
+~~~
+
+[Back to top](#top)

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/apis/web_client.md
----------------------------------------------------------------------
diff --git a/docs/apis/web_client.md b/docs/apis/web_client.md
new file mode 100644
index 0000000..bf70016
--- /dev/null
+++ b/docs/apis/web_client.md
@@ -0,0 +1,74 @@
+---
+title:  "Web Client"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+Flink provides a web interface to upload jobs, inspect their execution plans, and execute them. The interface is a great tool to showcase programs, debug execution plans, or demonstrate the system as a whole.
+
+* This will be replaced by the TOC
+{:toc}
+
+## Starting, Stopping, and Configuring the Web Interface
+
+Start the web interface by executing:
+
+    ./bin/start-webclient.sh
+
+and stop it by calling:
+
+    ./bin/stop-webclient.sh
+
+The web interface runs on port 8080 by default. To specify a custom port set the ```webclient.port``` property in the *./conf/flink.yaml* configuration file. Jobs are submitted to the JobManager specified by ```jobmanager.rpc.address``` and ```jobmanager.rpc.port```. Please consult the [configuration](config.html#webclient) page for details and further configuration options.
+
+## Using the Web Interface
+
+The web interface provides two views:
+
+1.  The **job view** to upload, preview, and submit Flink programs.
+2.  The **plan view** to analyze the optimized execution plans of Flink programs.
+
+### Job View
+
+The interface starts serving the job view. 
+
+You can **upload** a Flink program as a jar file. To **execute** an uploaded program:
+
+* select it from the job list on the left, 
+* enter the program arguments in the *"Arguments"* field (bottom left), and 
+* click on the *"Run Job"* button (bottom right).
+
+If the *“Show optimizer plan”* option is enabled (default), the *plan view* is display next, otherwise the job is directly submitted to the JobManager for execution.
+
+In case the jar's manifest file does not specify the program class, you can specify it before the argument list as:
+
+```
+assembler <assemblerClass> <programArgs...>
+```
+
+### Plan View
+
+The plan view shows the optimized execution plan of the submitted program in the upper half of the page. The bottom part of the page displays detailed information about the currently selected plan operator including:
+
+* the chosen shipping strategies (local forward, hash partition, range partition, broadcast, ...),
+* the chosen local strategy (sort, hash join, merge join, ...),
+* inferred data properties (partitioning, grouping, sorting), and 
+* used optimizer estimates (data size, I/O and network costs, ...).
+
+To submit the job for execution, click again on the *"Run Job"* button in the bottom right.

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/building.md
----------------------------------------------------------------------
diff --git a/docs/building.md b/docs/building.md
deleted file mode 100644
index 0172209..0000000
--- a/docs/building.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-title:  "Build Flink"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-In order to build Flink, you need the source code. Either download the source of a release or clone the git repository. In addition to that, you need Maven 3 and a JDK (Java Development Kit). Note that you can not build Flink with Oracle JDK 6 due to a unresolved bug in the Oracle Java compiler. It works well with OpenJDK 6 and all Java 7 and 8 compilers.
-
-To clone from git, enter:
-
-~~~bash
-git clone {{ site.FLINK_GITHUB_URL }}
-~~~
-
-The simplest way of building Flink is by running:
-
-~~~bash
-cd flink
-mvn clean install -DskipTests
-~~~
-
-This instructs Maven (`mvn`) to first remove all existing builds (`clean`) and then create a new Flink binary (`install`). The `-DskipTests` command prevents Maven from executing the unit tests. 
-
-[Read more](http://maven.apache.org/) about Apache Maven.
-
-
-
-## Build Flink for a specific Hadoop Version
-
-This section covers building Flink for a specific Hadoop version. Most users do not need to do this manually. The download page of Flink contains binary packages for common setups.
-
-The problem is that Flink uses HDFS and YARN which are both dependencies from Apache Hadoop. There exist many different versions of Hadoop (from both the upstream project and the different Hadoop distributions). If a user is using a wrong combination of versions, exceptions like this one occur:
-
-~~~bash
-ERROR: The job was not successfully submitted to the nephele job manager:
-    org.apache.flink.nephele.executiongraph.GraphConversionException: Cannot compute input splits for TSV:
-    java.io.IOException: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException:
-    Protocol message contained an invalid tag (zero).; Host Details :
-~~~
-
-There are two main versions of Hadoop that we need to differentiate:
-- Hadoop 1, with all versions starting with zero or one, like 0.20, 0.23 or 1.2.1.
-- Hadoop 2, with all versions starting with 2, like 2.2.0.
-The main differentiation between Hadoop 1 and Hadoop 2 is the availability of Hadoop YARN (Hadoops cluster resource manager).
-
-By default, Flink is using the Hadoop 2 dependencies.
-
-**To build Flink for Hadoop 1**, issue the following command:
-
-~~~bash
-mvn clean install -DskipTests -Dhadoop.profile=1
-~~~
-
-The `-Dhadoop.profile=1` flag instructs Maven to build Flink for Hadoop 1. Note that the features included in Flink change when using a different Hadoop profile. In particular the support for YARN and the build-in HBase support are not available in Hadoop 1 builds.
-
-
-You can also **specify a specific Hadoop version to build against**:
-
-~~~bash
-mvn clean install -DskipTests -Dhadoop.version=2.4.1
-~~~
-
-
-**To build Flink against a vendor specific Hadoop version**, issue the following command:
-
-~~~bash
-mvn clean install -DskipTests -Pvendor-repos -Dhadoop.version=2.2.0-cdh5.0.0-beta-2
-~~~
-
-The `-Pvendor-repos` activates a Maven [build profile](http://maven.apache.org/guides/introduction/introduction-to-profiles.html) that includes the repositories of popular Hadoop vendors such as Cloudera, Hortonworks, or MapR.
-
-**Build Flink for `hadoop2` versions before 2.2.0**
-
-Maven will automatically build Flink with its YARN client. But there were some changes in Hadoop versions before the 2.2.0 Hadoop release that are not supported by Flink's YARN client. Therefore, you can disable building the YARN client with the following string: `-P!include-yarn`. 
-
-So if you are building Flink for Hadoop `2.0.0-alpha`, use the following command:
-
-~~~bash
--P!include-yarn -Dhadoop.version=2.0.0-alpha
-~~~
-
-## Background
-
-The builds with Maven are controlled by [properties](http://maven.apache.org/pom.html#Properties) and <a href="http://maven.apache.org/guides/introduction/introduction-to-profiles.html">build profiles</a>.
-There are two profiles, one for hadoop1 and one for hadoop2. When the hadoop2 profile is enabled (default), the system will also build the YARN client.
-
-To enable the hadoop1 profile, set `-Dhadoop.profile=1` when building.
-Depending on the profile, there are two Hadoop versions, set via properties. For "hadoop1", we use 1.2.1 by default, for "hadoop2" it is 2.2.0.
-
-You can change these versions with the `hadoop-two.version` (or `hadoop-one.version`) property. For example `-Dhadoop-two.version=2.4.0`.
-


[22/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/css/bootstrap.css
----------------------------------------------------------------------
diff --git a/docs/css/bootstrap.css b/docs/css/bootstrap.css
deleted file mode 100644
index 7f36651..0000000
--- a/docs/css/bootstrap.css
+++ /dev/null
@@ -1,5785 +0,0 @@
-/*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
-html {
-  font-family: sans-serif;
-  -webkit-text-size-adjust: 100%;
-      -ms-text-size-adjust: 100%;
-}
-body {
-  margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section,
-summary {
-  display: block;
-}
-audio,
-canvas,
-progress,
-video {
-  display: inline-block;
-  vertical-align: baseline;
-}
-audio:not([controls]) {
-  display: none;
-  height: 0;
-}
-[hidden],
-template {
-  display: none;
-}
-a {
-  background: transparent;
-}
-a:active,
-a:hover {
-  outline: 0;
-}
-abbr[title] {
-  border-bottom: 1px dotted;
-}
-b,
-strong {
-  font-weight: bold;
-}
-dfn {
-  font-style: italic;
-}
-h1 {
-  margin: .67em 0;
-  font-size: 2em;
-}
-mark {
-  color: #000;
-  background: #ff0;
-}
-small {
-  font-size: 80%;
-}
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-sup {
-  top: -.5em;
-}
-sub {
-  bottom: -.25em;
-}
-img {
-  border: 0;
-}
-svg:not(:root) {
-  overflow: hidden;
-}
-figure {
-  margin: 1em 40px;
-}
-hr {
-  height: 0;
-  -moz-box-sizing: content-box;
-       box-sizing: content-box;
-}
-pre {
-  overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
-  margin: 0;
-  font: inherit;
-  color: inherit;
-}
-button {
-  overflow: visible;
-}
-button,
-select {
-  text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button;
-  cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
-  cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  padding: 0;
-  border: 0;
-}
-input {
-  line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
-  box-sizing: border-box;
-  padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-input[type="search"] {
-  -webkit-box-sizing: content-box;
-     -moz-box-sizing: content-box;
-          box-sizing: content-box;
-  -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-fieldset {
-  padding: .35em .625em .75em;
-  margin: 0 2px;
-  border: 1px solid #c0c0c0;
-}
-legend {
-  padding: 0;
-  border: 0;
-}
-textarea {
-  overflow: auto;
-}
-optgroup {
-  font-weight: bold;
-}
-table {
-  border-spacing: 0;
-  border-collapse: collapse;
-}
-td,
-th {
-  padding: 0;
-}
-@media print {
-  * {
-    color: #000 !important;
-    text-shadow: none !important;
-    background: transparent !important;
-    box-shadow: none !important;
-  }
-  a,
-  a:visited {
-    text-decoration: underline;
-  }
-  a[href]:after {
-    content: " (" attr(href) ")";
-  }
-  abbr[title]:after {
-    content: " (" attr(title) ")";
-  }
-  a[href^="javascript:"]:after,
-  a[href^="#"]:after {
-    content: "";
-  }
-  pre,
-  blockquote {
-    border: 1px solid #999;
-
-    page-break-inside: avoid;
-  }
-  thead {
-    display: table-header-group;
-  }
-  tr,
-  img {
-    page-break-inside: avoid;
-  }
-  img {
-    max-width: 100% !important;
-  }
-  p,
-  h2,
-  h3 {
-    orphans: 3;
-    widows: 3;
-  }
-  h2,
-  h3 {
-    page-break-after: avoid;
-  }
-  select {
-    background: #fff !important;
-  }
-  .navbar {
-    display: none;
-  }
-  .table td,
-  .table th {
-    background-color: #fff !important;
-  }
-  .btn > .caret,
-  .dropup > .btn > .caret {
-    border-top-color: #000 !important;
-  }
-  .label {
-    border: 1px solid #000;
-  }
-  .table {
-    border-collapse: collapse !important;
-  }
-  .table-bordered th,
-  .table-bordered td {
-    border: 1px solid #ddd !important;
-  }
-}
-* {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-*:before,
-*:after {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-html {
-  font-size: 62.5%;
-
-  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-body {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 14px;
-  line-height: 1.42857143;
-  color: #333;
-  background-color: #fff;
-}
-input,
-button,
-select,
-textarea {
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
-}
-a {
-  color: #428bca;
-  text-decoration: none;
-}
-a:hover,
-a:focus {
-  color: #2a6496;
-  text-decoration: underline;
-}
-a:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-figure {
-  margin: 0;
-}
-img {
-  vertical-align: middle;
-}
-.img-responsive,
-.thumbnail > img,
-.thumbnail a > img,
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
-  display: block;
-  max-width: 100%;
-  height: auto;
-}
-.img-rounded {
-  border-radius: 6px;
-}
-.img-thumbnail {
-  display: inline-block;
-  max-width: 100%;
-  height: auto;
-  padding: 4px;
-  line-height: 1.42857143;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  -webkit-transition: all .2s ease-in-out;
-          transition: all .2s ease-in-out;
-}
-.img-circle {
-  border-radius: 50%;
-}
-hr {
-  margin-top: 20px;
-  margin-bottom: 20px;
-  border: 0;
-  border-top: 1px solid #eee;
-}
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  padding: 0;
-  margin: -1px;
-  overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
-  font-family: inherit;
-  font-weight: 500;
-  line-height: 1.1;
-  color: inherit;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
-  font-weight: normal;
-  line-height: 1;
-  color: #999;
-}
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
-  margin-top: 20px;
-  margin-bottom: 10px;
-}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
-  font-size: 65%;
-}
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
-  font-size: 75%;
-}
-h1,
-.h1 {
-  font-size: 36px;
-}
-h2,
-.h2 {
-  font-size: 30px;
-}
-h3,
-.h3 {
-  font-size: 24px;
-}
-h4,
-.h4 {
-  font-size: 18px;
-}
-h5,
-.h5 {
-  font-size: 14px;
-}
-h6,
-.h6 {
-  font-size: 12px;
-}
-p {
-  margin: 0 0 10px;
-}
-.lead {
-  margin-bottom: 20px;
-  font-size: 16px;
-  font-weight: 200;
-  line-height: 1.4;
-}
-@media (min-width: 768px) {
-  .lead {
-    font-size: 21px;
-  }
-}
-small,
-.small {
-  font-size: 85%;
-}
-cite {
-  font-style: normal;
-}
-.text-left {
-  text-align: left;
-}
-.text-right {
-  text-align: right;
-}
-.text-center {
-  text-align: center;
-}
-.text-justify {
-  text-align: justify;
-}
-.text-muted {
-  color: #999;
-}
-.text-primary {
-  color: #428bca;
-}
-a.text-primary:hover {
-  color: #3071a9;
-}
-.text-success {
-  color: #3c763d;
-}
-a.text-success:hover {
-  color: #2b542c;
-}
-.text-info {
-  color: #31708f;
-}
-a.text-info:hover {
-  color: #245269;
-}
-.text-warning {
-  color: #8a6d3b;
-}
-a.text-warning:hover {
-  color: #66512c;
-}
-.text-danger {
-  color: #a94442;
-}
-a.text-danger:hover {
-  color: #843534;
-}
-.bg-primary {
-  color: #fff;
-  background-color: #428bca;
-}
-a.bg-primary:hover {
-  background-color: #3071a9;
-}
-.bg-success {
-  background-color: #dff0d8;
-}
-a.bg-success:hover {
-  background-color: #c1e2b3;
-}
-.bg-info {
-  background-color: #d9edf7;
-}
-a.bg-info:hover {
-  background-color: #afd9ee;
-}
-.bg-warning {
-  background-color: #fcf8e3;
-}
-a.bg-warning:hover {
-  background-color: #f7ecb5;
-}
-.bg-danger {
-  background-color: #f2dede;
-}
-a.bg-danger:hover {
-  background-color: #e4b9b9;
-}
-.page-header {
-  padding-bottom: 9px;
-  margin: 40px 0 20px;
-  border-bottom: 1px solid #eee;
-}
-ul,
-ol {
-  margin-top: 0;
-  margin-bottom: 10px;
-}
-ul ul,
-ol ul,
-ul ol,
-ol ol {
-  margin-bottom: 0;
-}
-.list-unstyled {
-  padding-left: 0;
-  list-style: none;
-}
-.list-inline {
-  padding-left: 0;
-  margin-left: -5px;
-  list-style: none;
-}
-.list-inline > li {
-  display: inline-block;
-  padding-right: 5px;
-  padding-left: 5px;
-}
-dl {
-  margin-top: 0;
-  margin-bottom: 20px;
-}
-dt,
-dd {
-  line-height: 1.42857143;
-}
-dt {
-  font-weight: bold;
-}
-dd {
-  margin-left: 0;
-}
-@media (min-width: 768px) {
-  .dl-horizontal dt {
-    float: left;
-    width: 160px;
-    overflow: hidden;
-    clear: left;
-    text-align: right;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-  }
-  .dl-horizontal dd {
-    margin-left: 180px;
-  }
-}
-abbr[title],
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted #999;
-}
-.initialism {
-  font-size: 90%;
-  text-transform: uppercase;
-}
-blockquote {
-  padding: 10px 20px;
-  margin: 0 0 20px;
-  font-size: 17.5px;
-  border-left: 5px solid #eee;
-}
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
-  margin-bottom: 0;
-}
-blockquote footer,
-blockquote small,
-blockquote .small {
-  display: block;
-  font-size: 80%;
-  line-height: 1.42857143;
-  color: #999;
-}
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
-  content: '\2014 \00A0';
-}
-.blockquote-reverse,
-blockquote.pull-right {
-  padding-right: 15px;
-  padding-left: 0;
-  text-align: right;
-  border-right: 5px solid #eee;
-  border-left: 0;
-}
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
-  content: '';
-}
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
-  content: '\00A0 \2014';
-}
-blockquote:before,
-blockquote:after {
-  content: "";
-}
-address {
-  margin-bottom: 20px;
-  font-style: normal;
-  line-height: 1.42857143;
-}
-code,
-kbd,
-pre,
-samp {
-  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-}
-code {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #c7254e;
-  white-space: nowrap;
-  background-color: #f9f2f4;
-  border-radius: 4px;
-}
-kbd {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #fff;
-  background-color: #333;
-  border-radius: 3px;
-  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
-}
-pre {
-  display: block;
-  padding: 9.5px;
-  margin: 0 0 10px;
-  font-size: 13px;
-  line-height: 1.42857143;
-  color: #333;
-  word-break: break-all;
-  word-wrap: break-word;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-}
-pre code {
-  padding: 0;
-  font-size: inherit;
-  color: inherit;
-  white-space: pre-wrap;
-  background-color: transparent;
-  border-radius: 0;
-}
-.pre-scrollable {
-  max-height: 340px;
-  overflow-y: scroll;
-}
-.container {
-  padding-right: 15px;
-  padding-left: 15px;
-  margin-right: auto;
-  margin-left: auto;
-}
-@media (min-width: 768px) {
-  .container {
-    width: 750px;
-  }
-}
-@media (min-width: 992px) {
-  .container {
-    width: 970px;
-  }
-}
-@media (min-width: 1200px) {
-  .container {
-    width: 1170px;
-  }
-}
-.container-fluid {
-  padding-right: 15px;
-  padding-left: 15px;
-  margin-right: auto;
-  margin-left: auto;
-}
-.row {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
-  position: relative;
-  min-height: 1px;
-  padding-right: 15px;
-  padding-left: 15px;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
-  float: left;
-}
-.col-xs-12 {
-  width: 100%;
-}
-.col-xs-11 {
-  width: 91.66666667%;
-}
-.col-xs-10 {
-  width: 83.33333333%;
-}
-.col-xs-9 {
-  width: 75%;
-}
-.col-xs-8 {
-  width: 66.66666667%;
-}
-.col-xs-7 {
-  width: 58.33333333%;
-}
-.col-xs-6 {
-  width: 50%;
-}
-.col-xs-5 {
-  width: 41.66666667%;
-}
-.col-xs-4 {
-  width: 33.33333333%;
-}
-.col-xs-3 {
-  width: 25%;
-}
-.col-xs-2 {
-  width: 16.66666667%;
-}
-.col-xs-1 {
-  width: 8.33333333%;
-}
-.col-xs-pull-12 {
-  right: 100%;
-}
-.col-xs-pull-11 {
-  right: 91.66666667%;
-}
-.col-xs-pull-10 {
-  right: 83.33333333%;
-}
-.col-xs-pull-9 {
-  right: 75%;
-}
-.col-xs-pull-8 {
-  right: 66.66666667%;
-}
-.col-xs-pull-7 {
-  right: 58.33333333%;
-}
-.col-xs-pull-6 {
-  right: 50%;
-}
-.col-xs-pull-5 {
-  right: 41.66666667%;
-}
-.col-xs-pull-4 {
-  right: 33.33333333%;
-}
-.col-xs-pull-3 {
-  right: 25%;
-}
-.col-xs-pull-2 {
-  right: 16.66666667%;
-}
-.col-xs-pull-1 {
-  right: 8.33333333%;
-}
-.col-xs-pull-0 {
-  right: 0;
-}
-.col-xs-push-12 {
-  left: 100%;
-}
-.col-xs-push-11 {
-  left: 91.66666667%;
-}
-.col-xs-push-10 {
-  left: 83.33333333%;
-}
-.col-xs-push-9 {
-  left: 75%;
-}
-.col-xs-push-8 {
-  left: 66.66666667%;
-}
-.col-xs-push-7 {
-  left: 58.33333333%;
-}
-.col-xs-push-6 {
-  left: 50%;
-}
-.col-xs-push-5 {
-  left: 41.66666667%;
-}
-.col-xs-push-4 {
-  left: 33.33333333%;
-}
-.col-xs-push-3 {
-  left: 25%;
-}
-.col-xs-push-2 {
-  left: 16.66666667%;
-}
-.col-xs-push-1 {
-  left: 8.33333333%;
-}
-.col-xs-push-0 {
-  left: 0;
-}
-.col-xs-offset-12 {
-  margin-left: 100%;
-}
-.col-xs-offset-11 {
-  margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
-  margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
-  margin-left: 75%;
-}
-.col-xs-offset-8 {
-  margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
-  margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
-  margin-left: 50%;
-}
-.col-xs-offset-5 {
-  margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
-  margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
-  margin-left: 25%;
-}
-.col-xs-offset-2 {
-  margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
-  margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
-  margin-left: 0;
-}
-@media (min-width: 768px) {
-  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
-    float: left;
-  }
-  .col-sm-12 {
-    width: 100%;
-  }
-  .col-sm-11 {
-    width: 91.66666667%;
-  }
-  .col-sm-10 {
-    width: 83.33333333%;
-  }
-  .col-sm-9 {
-    width: 75%;
-  }
-  .col-sm-8 {
-    width: 66.66666667%;
-  }
-  .col-sm-7 {
-    width: 58.33333333%;
-  }
-  .col-sm-6 {
-    width: 50%;
-  }
-  .col-sm-5 {
-    width: 41.66666667%;
-  }
-  .col-sm-4 {
-    width: 33.33333333%;
-  }
-  .col-sm-3 {
-    width: 25%;
-  }
-  .col-sm-2 {
-    width: 16.66666667%;
-  }
-  .col-sm-1 {
-    width: 8.33333333%;
-  }
-  .col-sm-pull-12 {
-    right: 100%;
-  }
-  .col-sm-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-sm-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-sm-pull-9 {
-    right: 75%;
-  }
-  .col-sm-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-sm-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-sm-pull-6 {
-    right: 50%;
-  }
-  .col-sm-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-sm-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-sm-pull-3 {
-    right: 25%;
-  }
-  .col-sm-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-sm-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-sm-pull-0 {
-    right: 0;
-  }
-  .col-sm-push-12 {
-    left: 100%;
-  }
-  .col-sm-push-11 {
-    left: 91.66666667%;
-  }
-  .col-sm-push-10 {
-    left: 83.33333333%;
-  }
-  .col-sm-push-9 {
-    left: 75%;
-  }
-  .col-sm-push-8 {
-    left: 66.66666667%;
-  }
-  .col-sm-push-7 {
-    left: 58.33333333%;
-  }
-  .col-sm-push-6 {
-    left: 50%;
-  }
-  .col-sm-push-5 {
-    left: 41.66666667%;
-  }
-  .col-sm-push-4 {
-    left: 33.33333333%;
-  }
-  .col-sm-push-3 {
-    left: 25%;
-  }
-  .col-sm-push-2 {
-    left: 16.66666667%;
-  }
-  .col-sm-push-1 {
-    left: 8.33333333%;
-  }
-  .col-sm-push-0 {
-    left: 0;
-  }
-  .col-sm-offset-12 {
-    margin-left: 100%;
-  }
-  .col-sm-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-sm-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-sm-offset-9 {
-    margin-left: 75%;
-  }
-  .col-sm-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-sm-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-sm-offset-6 {
-    margin-left: 50%;
-  }
-  .col-sm-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-sm-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-sm-offset-3 {
-    margin-left: 25%;
-  }
-  .col-sm-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-sm-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-sm-offset-0 {
-    margin-left: 0;
-  }
-}
-@media (min-width: 992px) {
-  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
-    float: left;
-  }
-  .col-md-12 {
-    width: 100%;
-  }
-  .col-md-11 {
-    width: 91.66666667%;
-  }
-  .col-md-10 {
-    width: 83.33333333%;
-  }
-  .col-md-9 {
-    width: 75%;
-  }
-  .col-md-8 {
-    width: 66.66666667%;
-  }
-  .col-md-7 {
-    width: 58.33333333%;
-  }
-  .col-md-6 {
-    width: 50%;
-  }
-  .col-md-5 {
-    width: 41.66666667%;
-  }
-  .col-md-4 {
-    width: 33.33333333%;
-  }
-  .col-md-3 {
-    width: 25%;
-  }
-  .col-md-2 {
-    width: 16.66666667%;
-  }
-  .col-md-1 {
-    width: 8.33333333%;
-  }
-  .col-md-pull-12 {
-    right: 100%;
-  }
-  .col-md-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-md-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-md-pull-9 {
-    right: 75%;
-  }
-  .col-md-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-md-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-md-pull-6 {
-    right: 50%;
-  }
-  .col-md-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-md-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-md-pull-3 {
-    right: 25%;
-  }
-  .col-md-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-md-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-md-pull-0 {
-    right: 0;
-  }
-  .col-md-push-12 {
-    left: 100%;
-  }
-  .col-md-push-11 {
-    left: 91.66666667%;
-  }
-  .col-md-push-10 {
-    left: 83.33333333%;
-  }
-  .col-md-push-9 {
-    left: 75%;
-  }
-  .col-md-push-8 {
-    left: 66.66666667%;
-  }
-  .col-md-push-7 {
-    left: 58.33333333%;
-  }
-  .col-md-push-6 {
-    left: 50%;
-  }
-  .col-md-push-5 {
-    left: 41.66666667%;
-  }
-  .col-md-push-4 {
-    left: 33.33333333%;
-  }
-  .col-md-push-3 {
-    left: 25%;
-  }
-  .col-md-push-2 {
-    left: 16.66666667%;
-  }
-  .col-md-push-1 {
-    left: 8.33333333%;
-  }
-  .col-md-push-0 {
-    left: 0;
-  }
-  .col-md-offset-12 {
-    margin-left: 100%;
-  }
-  .col-md-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-md-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-md-offset-9 {
-    margin-left: 75%;
-  }
-  .col-md-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-md-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-md-offset-6 {
-    margin-left: 50%;
-  }
-  .col-md-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-md-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-md-offset-3 {
-    margin-left: 25%;
-  }
-  .col-md-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-md-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-md-offset-0 {
-    margin-left: 0;
-  }
-}
-@media (min-width: 1200px) {
-  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
-    float: left;
-  }
-  .col-lg-12 {
-    width: 100%;
-  }
-  .col-lg-11 {
-    width: 91.66666667%;
-  }
-  .col-lg-10 {
-    width: 83.33333333%;
-  }
-  .col-lg-9 {
-    width: 75%;
-  }
-  .col-lg-8 {
-    width: 66.66666667%;
-  }
-  .col-lg-7 {
-    width: 58.33333333%;
-  }
-  .col-lg-6 {
-    width: 50%;
-  }
-  .col-lg-5 {
-    width: 41.66666667%;
-  }
-  .col-lg-4 {
-    width: 33.33333333%;
-  }
-  .col-lg-3 {
-    width: 25%;
-  }
-  .col-lg-2 {
-    width: 16.66666667%;
-  }
-  .col-lg-1 {
-    width: 8.33333333%;
-  }
-  .col-lg-pull-12 {
-    right: 100%;
-  }
-  .col-lg-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-lg-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-lg-pull-9 {
-    right: 75%;
-  }
-  .col-lg-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-lg-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-lg-pull-6 {
-    right: 50%;
-  }
-  .col-lg-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-lg-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-lg-pull-3 {
-    right: 25%;
-  }
-  .col-lg-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-lg-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-lg-pull-0 {
-    right: 0;
-  }
-  .col-lg-push-12 {
-    left: 100%;
-  }
-  .col-lg-push-11 {
-    left: 91.66666667%;
-  }
-  .col-lg-push-10 {
-    left: 83.33333333%;
-  }
-  .col-lg-push-9 {
-    left: 75%;
-  }
-  .col-lg-push-8 {
-    left: 66.66666667%;
-  }
-  .col-lg-push-7 {
-    left: 58.33333333%;
-  }
-  .col-lg-push-6 {
-    left: 50%;
-  }
-  .col-lg-push-5 {
-    left: 41.66666667%;
-  }
-  .col-lg-push-4 {
-    left: 33.33333333%;
-  }
-  .col-lg-push-3 {
-    left: 25%;
-  }
-  .col-lg-push-2 {
-    left: 16.66666667%;
-  }
-  .col-lg-push-1 {
-    left: 8.33333333%;
-  }
-  .col-lg-push-0 {
-    left: 0;
-  }
-  .col-lg-offset-12 {
-    margin-left: 100%;
-  }
-  .col-lg-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-lg-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-lg-offset-9 {
-    margin-left: 75%;
-  }
-  .col-lg-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-lg-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-lg-offset-6 {
-    margin-left: 50%;
-  }
-  .col-lg-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-lg-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-lg-offset-3 {
-    margin-left: 25%;
-  }
-  .col-lg-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-lg-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-lg-offset-0 {
-    margin-left: 0;
-  }
-}
-table {
-  max-width: 100%;
-  background-color: transparent;
-}
-th {
-  text-align: left;
-}
-.table {
-  width: 100%;
-  margin-bottom: 20px;
-}
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
-  padding: 8px;
-  line-height: 1.42857143;
-  vertical-align: top;
-  border-top: 1px solid #ddd;
-}
-.table > thead > tr > th {
-  vertical-align: bottom;
-  border-bottom: 2px solid #ddd;
-}
-.table > caption + thead > tr:first-child > th,
-.table > colgroup + thead > tr:first-child > th,
-.table > thead:first-child > tr:first-child > th,
-.table > caption + thead > tr:first-child > td,
-.table > colgroup + thead > tr:first-child > td,
-.table > thead:first-child > tr:first-child > td {
-  border-top: 0;
-}
-.table > tbody + tbody {
-  border-top: 2px solid #ddd;
-}
-.table .table {
-  background-color: #fff;
-}
-.table-condensed > thead > tr > th,
-.table-condensed > tbody > tr > th,
-.table-condensed > tfoot > tr > th,
-.table-condensed > thead > tr > td,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > td {
-  padding: 5px;
-}
-.table-bordered {
-  border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
-  border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
-  border-bottom-width: 2px;
-}
-.table-striped > tbody > tr:nth-child(odd) > td,
-.table-striped > tbody > tr:nth-child(odd) > th {
-  background-color: #f9f9f9;
-}
-.table-hover > tbody > tr:hover > td,
-.table-hover > tbody > tr:hover > th {
-  background-color: #f5f5f5;
-}
-table col[class*="col-"] {
-  position: static;
-  display: table-column;
-  float: none;
-}
-table td[class*="col-"],
-table th[class*="col-"] {
-  position: static;
-  display: table-cell;
-  float: none;
-}
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
-  background-color: #f5f5f5;
-}
-.table-hover > tbody > tr > td.active:hover,
-.table-hover > tbody > tr > th.active:hover,
-.table-hover > tbody > tr.active:hover > td,
-.table-hover > tbody > tr.active:hover > th {
-  background-color: #e8e8e8;
-}
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
-  background-color: #dff0d8;
-}
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td,
-.table-hover > tbody > tr.success:hover > th {
-  background-color: #d0e9c6;
-}
-.table > thead > tr > td.info,
-.table > tbody > tr > td.info,
-.table > tfoot > tr > td.info,
-.table > thead > tr > th.info,
-.table > tbody > tr > th.info,
-.table > tfoot > tr > th.info,
-.table > thead > tr.info > td,
-.table > tbody > tr.info > td,
-.table > tfoot > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr.info > th,
-.table > tfoot > tr.info > th {
-  background-color: #d9edf7;
-}
-.table-hover > tbody > tr > td.info:hover,
-.table-hover > tbody > tr > th.info:hover,
-.table-hover > tbody > tr.info:hover > td,
-.table-hover > tbody > tr.info:hover > th {
-  background-color: #c4e3f3;
-}
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
-  background-color: #fcf8e3;
-}
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td,
-.table-hover > tbody > tr.warning:hover > th {
-  background-color: #faf2cc;
-}
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
-  background-color: #f2dede;
-}
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td,
-.table-hover > tbody > tr.danger:hover > th {
-  background-color: #ebcccc;
-}
-@media (max-width: 767px) {
-  .table-responsive {
-    width: 100%;
-    margin-bottom: 15px;
-    overflow-x: scroll;
-    overflow-y: hidden;
-    -webkit-overflow-scrolling: touch;
-    -ms-overflow-style: -ms-autohiding-scrollbar;
-    border: 1px solid #ddd;
-  }
-  .table-responsive > .table {
-    margin-bottom: 0;
-  }
-  .table-responsive > .table > thead > tr > th,
-  .table-responsive > .table > tbody > tr > th,
-  .table-responsive > .table > tfoot > tr > th,
-  .table-responsive > .table > thead > tr > td,
-  .table-responsive > .table > tbody > tr > td,
-  .table-responsive > .table > tfoot > tr > td {
-    white-space: nowrap;
-  }
-  .table-responsive > .table-bordered {
-    border: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr > th:first-child,
-  .table-responsive > .table-bordered > tbody > tr > th:first-child,
-  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-  .table-responsive > .table-bordered > thead > tr > td:first-child,
-  .table-responsive > .table-bordered > tbody > tr > td:first-child,
-  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-    border-left: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr > th:last-child,
-  .table-responsive > .table-bordered > tbody > tr > th:last-child,
-  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-  .table-responsive > .table-bordered > thead > tr > td:last-child,
-  .table-responsive > .table-bordered > tbody > tr > td:last-child,
-  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-    border-right: 0;
-  }
-  .table-responsive > .table-bordered > tbody > tr:last-child > th,
-  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
-  .table-responsive > .table-bordered > tbody > tr:last-child > td,
-  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
-    border-bottom: 0;
-  }
-}
-fieldset {
-  min-width: 0;
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 20px;
-  font-size: 21px;
-  line-height: inherit;
-  color: #333;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5;
-}
-label {
-  display: inline-block;
-  margin-bottom: 5px;
-  font-weight: bold;
-}
-input[type="search"] {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-}
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 4px 0 0;
-  margin-top: 1px \9;
-  /* IE8-9 */
-  line-height: normal;
-}
-input[type="file"] {
-  display: block;
-}
-input[type="range"] {
-  display: block;
-  width: 100%;
-}
-select[multiple],
-select[size] {
-  height: auto;
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-output {
-  display: block;
-  padding-top: 7px;
-  font-size: 14px;
-  line-height: 1.42857143;
-  color: #555;
-}
-.form-control {
-  display: block;
-  width: 100%;
-  height: 34px;
-  padding: 6px 12px;
-  font-size: 14px;
-  line-height: 1.42857143;
-  color: #555;
-  background-color: #fff;
-  background-image: none;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-.form-control:focus {
-  border-color: #66afe9;
-  outline: 0;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-}
-.form-control::-moz-placeholder {
-  color: #999;
-  opacity: 1;
-}
-.form-control:-ms-input-placeholder {
-  color: #999;
-}
-.form-control::-webkit-input-placeholder {
-  color: #999;
-}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
-  cursor: not-allowed;
-  background-color: #eee;
-  opacity: 1;
-}
-textarea.form-control {
-  height: auto;
-}
-input[type="search"] {
-  -webkit-appearance: none;
-}
-input[type="date"] {
-  line-height: 34px;
-}
-.form-group {
-  margin-bottom: 15px;
-}
-.radio,
-.checkbox {
-  display: block;
-  min-height: 20px;
-  padding-left: 20px;
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
-  display: inline;
-  font-weight: normal;
-  cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
-  float: left;
-  margin-left: -20px;
-}
-.radio + .radio,
-.checkbox + .checkbox {
-  margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
-  display: inline-block;
-  padding-left: 20px;
-  margin-bottom: 0;
-  font-weight: normal;
-  vertical-align: middle;
-  cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
-  margin-top: 0;
-  margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-.radio[disabled],
-.radio-inline[disabled],
-.checkbox[disabled],
-.checkbox-inline[disabled],
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"],
-fieldset[disabled] .radio,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox,
-fieldset[disabled] .checkbox-inline {
-  cursor: not-allowed;
-}
-.input-sm {
-  height: 30px;
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-select.input-sm {
-  height: 30px;
-  line-height: 30px;
-}
-textarea.input-sm,
-select[multiple].input-sm {
-  height: auto;
-}
-.input-lg {
-  height: 46px;
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-select.input-lg {
-  height: 46px;
-  line-height: 46px;
-}
-textarea.input-lg,
-select[multiple].input-lg {
-  height: auto;
-}
-.has-feedback {
-  position: relative;
-}
-.has-feedback .form-control {
-  padding-right: 42.5px;
-}
-.has-feedback .form-control-feedback {
-  position: absolute;
-  top: 25px;
-  right: 0;
-  display: block;
-  width: 34px;
-  height: 34px;
-  line-height: 34px;
-  text-align: center;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline {
-  color: #3c763d;
-}
-.has-success .form-control {
-  border-color: #3c763d;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-success .form-control:focus {
-  border-color: #2b542c;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-}
-.has-success .input-group-addon {
-  color: #3c763d;
-  background-color: #dff0d8;
-  border-color: #3c763d;
-}
-.has-success .form-control-feedback {
-  color: #3c763d;
-}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline {
-  color: #8a6d3b;
-}
-.has-warning .form-control {
-  border-color: #8a6d3b;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-warning .form-control:focus {
-  border-color: #66512c;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-}
-.has-warning .input-group-addon {
-  color: #8a6d3b;
-  background-color: #fcf8e3;
-  border-color: #8a6d3b;
-}
-.has-warning .form-control-feedback {
-  color: #8a6d3b;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline {
-  color: #a94442;
-}
-.has-error .form-control {
-  border-color: #a94442;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-error .form-control:focus {
-  border-color: #843534;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-}
-.has-error .input-group-addon {
-  color: #a94442;
-  background-color: #f2dede;
-  border-color: #a94442;
-}
-.has-error .form-control-feedback {
-  color: #a94442;
-}
-.form-control-static {
-  margin-bottom: 0;
-}
-.help-block {
-  display: block;
-  margin-top: 5px;
-  margin-bottom: 10px;
-  color: #737373;
-}
-@media (min-width: 768px) {
-  .form-inline .form-group {
-    display: inline-block;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .form-control {
-    display: inline-block;
-    width: auto;
-    vertical-align: middle;
-  }
-  .form-inline .input-group > .form-control {
-    width: 100%;
-  }
-  .form-inline .control-label {
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .radio,
-  .form-inline .checkbox {
-    display: inline-block;
-    padding-left: 0;
-    margin-top: 0;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .radio input[type="radio"],
-  .form-inline .checkbox input[type="checkbox"] {
-    float: none;
-    margin-left: 0;
-  }
-  .form-inline .has-feedback .form-control-feedback {
-    top: 0;
-  }
-}
-.form-horizontal .control-label,
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
-  padding-top: 7px;
-  margin-top: 0;
-  margin-bottom: 0;
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox {
-  min-height: 27px;
-}
-.form-horizontal .form-group {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-.form-horizontal .form-control-static {
-  padding-top: 7px;
-}
-@media (min-width: 768px) {
-  .form-horizontal .control-label {
-    text-align: right;
-  }
-}
-.form-horizontal .has-feedback .form-control-feedback {
-  top: 0;
-  right: 15px;
-}
-.btn {
-  display: inline-block;
-  padding: 6px 12px;
-  margin-bottom: 0;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 1.42857143;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: middle;
-  cursor: pointer;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  background-image: none;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus {
-  color: #333;
-  text-decoration: none;
-}
-.btn:active,
-.btn.active {
-  background-image: none;
-  outline: 0;
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
-  pointer-events: none;
-  cursor: not-allowed;
-  filter: alpha(opacity=65);
-  -webkit-box-shadow: none;
-          box-shadow: none;
-  opacity: .65;
-}
-.btn-default {
-  color: #333;
-  background-color: #fff;
-  border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus,
-.btn-default:active,
-.btn-default.active,
-.open .dropdown-toggle.btn-default {
-  color: #333;
-  background-color: #ebebeb;
-  border-color: #adadad;
-}
-.btn-default:active,
-.btn-default.active,
-.open .dropdown-toggle.btn-default {
-  background-image: none;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
-  background-color: #fff;
-  border-color: #ccc;
-}
-.btn-default .badge {
-  color: #fff;
-  background-color: #333;
-}
-.btn-primary {
-  color: #fff;
-  background-color: #428bca;
-  border-color: #357ebd;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
-  color: #fff;
-  background-color: #3276b1;
-  border-color: #285e8e;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
-  background-image: none;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
-  background-color: #428bca;
-  border-color: #357ebd;
-}
-.btn-primary .badge {
-  color: #428bca;
-  background-color: #fff;
-}
-.btn-success {
-  color: #fff;
-  background-color: #5cb85c;
-  border-color: #4cae4c;
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.open .dropdown-toggle.btn-success {
-  color: #fff;
-  background-color: #47a447;
-  border-color: #398439;
-}
-.btn-success:active,
-.btn-success.active,
-.open .dropdown-toggle.btn-success {
-  background-image: none;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
-  background-color: #5cb85c;
-  border-color: #4cae4c;
-}
-.btn-success .badge {
-  color: #5cb85c;
-  background-color: #fff;
-}
-.btn-info {
-  color: #fff;
-  background-color: #5bc0de;
-  border-color: #46b8da;
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.open .dropdown-toggle.btn-info {
-  color: #fff;
-  background-color: #39b3d7;
-  border-color: #269abc;
-}
-.btn-info:active,
-.btn-info.active,
-.open .dropdown-toggle.btn-info {
-  background-image: none;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
-  background-color: #5bc0de;
-  border-color: #46b8da;
-}
-.btn-info .badge {
-  color: #5bc0de;
-  background-color: #fff;
-}
-.btn-warning {
-  color: #fff;
-  background-color: #f0ad4e;
-  border-color: #eea236;
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.open .dropdown-toggle.btn-warning {
-  color: #fff;
-  background-color: #ed9c28;
-  border-color: #d58512;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open .dropdown-toggle.btn-warning {
-  background-image: none;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
-  background-color: #f0ad4e;
-  border-color: #eea236;
-}
-.btn-warning .badge {
-  color: #f0ad4e;
-  background-color: #fff;
-}
-.btn-danger {
-  color: #fff;
-  background-color: #d9534f;
-  border-color: #d43f3a;
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.open .dropdown-toggle.btn-danger {
-  color: #fff;
-  background-color: #d2322d;
-  border-color: #ac2925;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open .dropdown-toggle.btn-danger {
-  background-image: none;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
-  background-color: #d9534f;
-  border-color: #d43f3a;
-}
-.btn-danger .badge {
-  color: #d9534f;
-  background-color: #fff;
-}
-.btn-link {
-  font-weight: normal;
-  color: #428bca;
-  cursor: pointer;
-  border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
-  background-color: transparent;
-  -webkit-box-shadow: none;
-          box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
-  border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
-  color: #2a6496;
-  text-decoration: underline;
-  background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
-  color: #999;
-  text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
-  padding: 1px 5px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-.btn-block {
-  display: block;
-  width: 100%;
-  padding-right: 0;
-  padding-left: 0;
-}
-.btn-block + .btn-block {
-  margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
-  width: 100%;
-}
-.fade {
-  opacity: 0;
-  -webkit-transition: opacity .15s linear;
-          transition: opacity .15s linear;
-}
-.fade.in {
-  opacity: 1;
-}
-.collapse {
-  display: none;
-}
-.collapse.in {
-  display: block;
-}
-.collapsing {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  -webkit-transition: height .35s ease;
-          transition: height .35s ease;
-}
-@font-face {
-  font-family: 'Glyphicons Halflings';
-
-  src: url('../fonts/glyphicons-halflings-regular.eot');
-  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
-  position: relative;
-  top: 1px;
-  display: inline-block;
-  font-family: 'Glyphicons Halflings';
-  font-style: normal;
-  font-weight: normal;
-  line-height: 1;
-
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
-  content: "\2a";
-}
-.glyphicon-plus:before {
-  content: "\2b";
-}
-.glyphicon-euro:before {
-  content: "\20ac";
-}
-.glyphicon-minus:before {
-  content: "\2212";
-}
-.glyphicon-cloud:before {
-  content: "\2601";
-}
-.glyphicon-envelope:before {
-  content: "\2709";
-}
-.glyphicon-pencil:before {
-  content: "\270f";
-}
-.glyphicon-glass:before {
-  content: "\e001";
-}
-.glyphicon-music:before {
-  content: "\e002";
-}
-.glyphicon-search:before {
-  content: "\e003";
-}
-.glyphicon-heart:before {
-  content: "\e005";
-}
-.glyphicon-star:before {
-  content: "\e006";
-}
-.glyphicon-star-empty:before {
-  content: "\e007";
-}
-.glyphicon-user:before {
-  content: "\e008";
-}
-.glyphicon-film:before {
-  content: "\e009";
-}
-.glyphicon-th-large:before {
-  content: "\e010";
-}
-.glyphicon-th:before {
-  content: "\e011";
-}
-.glyphicon-th-list:before {
-  content: "\e012";
-}
-.glyphicon-ok:before {
-  content: "\e013";
-}
-.glyphicon-remove:before {
-  content: "\e014";
-}
-.glyphicon-zoom-in:before {
-  content: "\e015";
-}
-.glyphicon-zoom-out:before {
-  content: "\e016";
-}
-.glyphicon-off:before {
-  content: "\e017";
-}
-.glyphicon-signal:before {
-  content: "\e018";
-}
-.glyphicon-cog:before {
-  content: "\e019";
-}
-.glyphicon-trash:before {
-  content: "\e020";
-}
-.glyphicon-home:before {
-  content: "\e021";
-}
-.glyphicon-file:before {
-  content: "\e022";
-}
-.glyphicon-time:before {
-  content: "\e023";
-}
-.glyphicon-road:before {
-  content: "\e024";
-}
-.glyphicon-download-alt:before {
-  content: "\e025";
-}
-.glyphicon-download:before {
-  content: "\e026";
-}
-.glyphicon-upload:before {
-  content: "\e027";
-}
-.glyphicon-inbox:before {
-  content: "\e028";
-}
-.glyphicon-play-circle:before {
-  content: "\e029";
-}
-.glyphicon-repeat:before {
-  content: "\e030";
-}
-.glyphicon-refresh:before {
-  content: "\e031";
-}
-.glyphicon-list-alt:before {
-  content: "\e032";
-}
-.glyphicon-lock:before {
-  content: "\e033";
-}
-.glyphicon-flag:before {
-  content: "\e034";
-}
-.glyphicon-headphones:before {
-  content: "\e035";
-}
-.glyphicon-volume-off:before {
-  content: "\e036";
-}
-.glyphicon-volume-down:before {
-  content: "\e037";
-}
-.glyphicon-volume-up:before {
-  content: "\e038";
-}
-.glyphicon-qrcode:before {
-  content: "\e039";
-}
-.glyphicon-barcode:before {
-  content: "\e040";
-}
-.glyphicon-tag:before {
-  content: "\e041";
-}
-.glyphicon-tags:before {
-  content: "\e042";
-}
-.glyphicon-book:before {
-  content: "\e043";
-}
-.glyphicon-bookmark:before {
-  content: "\e044";
-}
-.glyphicon-print:before {
-  content: "\e045";
-}
-.glyphicon-camera:before {
-  content: "\e046";
-}
-.glyphicon-font:before {
-  content: "\e047";
-}
-.glyphicon-bold:before {
-  content: "\e048";
-}
-.glyphicon-italic:before {
-  content: "\e049";
-}
-.glyphicon-text-height:before {
-  content: "\e050";
-}
-.glyphicon-text-width:before {
-  content: "\e051";
-}
-.glyphicon-align-left:before {
-  content: "\e052";
-}
-.glyphicon-align-center:before {
-  content: "\e053";
-}
-.glyphicon-align-right:before {
-  content: "\e054";
-}
-.glyphicon-align-justify:before {
-  content: "\e055";
-}
-.glyphicon-list:before {
-  content: "\e056";
-}
-.glyphicon-indent-left:before {
-  content: "\e057";
-}
-.glyphicon-indent-right:before {
-  content: "\e058";
-}
-.glyphicon-facetime-video:before {
-  content: "\e059";
-}
-.glyphicon-picture:before {
-  content: "\e060";
-}
-.glyphicon-map-marker:before {
-  content: "\e062";
-}
-.glyphicon-adjust:before {
-  content: "\e063";
-}
-.glyphicon-tint:before {
-  content: "\e064";
-}
-.glyphicon-edit:before {
-  content: "\e065";
-}
-.glyphicon-share:before {
-  content: "\e066";
-}
-.glyphicon-check:before {
-  content: "\e067";
-}
-.glyphicon-move:before {
-  content: "\e068";
-}
-.glyphicon-step-backward:before {
-  content: "\e069";
-}
-.glyphicon-fast-backward:before {
-  content: "\e070";
-}
-.glyphicon-backward:before {
-  content: "\e071";
-}
-.glyphicon-play:before {
-  content: "\e072";
-}
-.glyphicon-pause:before {
-  content: "\e073";
-}
-.glyphicon-stop:before {
-  content: "\e074";
-}
-.glyphicon-forward:before {
-  content: "\e075";
-}
-.glyphicon-fast-forward:before {
-  content: "\e076";
-}
-.glyphicon-step-forward:before {
-  content: "\e077";
-}
-.glyphicon-eject:before {
-  content: "\e078";
-}
-.glyphicon-chevron-left:before {
-  content: "\e079";
-}
-.glyphicon-chevron-right:before {
-  content: "\e080";
-}
-.glyphicon-plus-sign:before {
-  content: "\e081";
-}
-.glyphicon-minus-sign:before {
-  content: "\e082";
-}
-.glyphicon-remove-sign:before {
-  content: "\e083";
-}
-.glyphicon-ok-sign:before {
-  content: "\e084";
-}
-.glyphicon-question-sign:before {
-  content: "\e085";
-}
-.glyphicon-info-sign:before {
-  content: "\e086";
-}
-.glyphicon-screenshot:before {
-  content: "\e087";
-}
-.glyphicon-remove-circle:before {
-  content: "\e088";
-}
-.glyphicon-ok-circle:before {
-  content: "\e089";
-}
-.glyphicon-ban-circle:before {
-  content: "\e090";
-}
-.glyphicon-arrow-left:before {
-  content: "\e091";
-}
-.glyphicon-arrow-right:before {
-  content: "\e092";
-}
-.glyphicon-arrow-up:before {
-  content: "\e093";
-}
-.glyphicon-arrow-down:before {
-  content: "\e094";
-}
-.glyphicon-share-alt:before {
-  content: "\e095";
-}
-.glyphicon-resize-full:before {
-  content: "\e096";
-}
-.glyphicon-resize-small:before {
-  content: "\e097";
-}
-.glyphicon-exclamation-sign:before {
-  content: "\e101";
-}
-.glyphicon-gift:before {
-  content: "\e102";
-}
-.glyphicon-leaf:before {
-  content: "\e103";
-}
-.glyphicon-fire:before {
-  content: "\e104";
-}
-.glyphicon-eye-open:before {
-  content: "\e105";
-}
-.glyphicon-eye-close:before {
-  content: "\e106";
-}
-.glyphicon-warning-sign:before {
-  content: "\e107";
-}
-.glyphicon-plane:before {
-  content: "\e108";
-}
-.glyphicon-calendar:before {
-  content: "\e109";
-}
-.glyphicon-random:before {
-  content: "\e110";
-}
-.glyphicon-comment:before {
-  content: "\e111";
-}
-.glyphicon-magnet:before {
-  content: "\e112";
-}
-.glyphicon-chevron-up:before {
-  content: "\e113";
-}
-.glyphicon-chevron-down:before {
-  content: "\e114";
-}
-.glyphicon-retweet:before {
-  content: "\e115";
-}
-.glyphicon-shopping-cart:before {
-  content: "\e116";
-}
-.glyphicon-folder-close:before {
-  content: "\e117";
-}
-.glyphicon-folder-open:before {
-  content: "\e118";
-}
-.glyphicon-resize-vertical:before {
-  content: "\e119";
-}
-.glyphicon-resize-horizontal:before {
-  content: "\e120";
-}
-.glyphicon-hdd:before {
-  content: "\e121";
-}
-.glyphicon-bullhorn:before {
-  content: "\e122";
-}
-.glyphicon-bell:before {
-  content: "\e123";
-}
-.glyphicon-certificate:before {
-  content: "\e124";
-}
-.glyphicon-thumbs-up:before {
-  content: "\e125";
-}
-.glyphicon-thumbs-down:before {
-  content: "\e126";
-}
-.glyphicon-hand-right:before {
-  content: "\e127";
-}
-.glyphicon-hand-left:before {
-  content: "\e128";
-}
-.glyphicon-hand-up:before {
-  content: "\e129";
-}
-.glyphicon-hand-down:before {
-  content: "\e130";
-}
-.glyphicon-circle-arrow-right:before {
-  content: "\e131";
-}
-.glyphicon-circle-arrow-left:before {
-  content: "\e132";
-}
-.glyphicon-circle-arrow-up:before {
-  content: "\e133";
-}
-.glyphicon-circle-arrow-down:before {
-  content: "\e134";
-}
-.glyphicon-globe:before {
-  content: "\e135";
-}
-.glyphicon-wrench:before {
-  content: "\e136";
-}
-.glyphicon-tasks:before {
-  content: "\e137";
-}
-.glyphicon-filter:before {
-  content: "\e138";
-}
-.glyphicon-briefcase:before {
-  content: "\e139";
-}
-.glyphicon-fullscreen:before {
-  content: "\e140";
-}
-.glyphicon-dashboard:before {
-  content: "\e141";
-}
-.glyphicon-paperclip:before {
-  content: "\e142";
-}
-.glyphicon-heart-empty:before {
-  content: "\e143";
-}
-.glyphicon-link:before {
-  content: "\e144";
-}
-.glyphicon-phone:before {
-  content: "\e145";
-}
-.glyphicon-pushpin:before {
-  content: "\e146";
-}
-.glyphicon-usd:before {
-  content: "\e148";
-}
-.glyphicon-gbp:before {
-  content: "\e149";
-}
-.glyphicon-sort:before {
-  content: "\e150";
-}
-.glyphicon-sort-by-alphabet:before {
-  content: "\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
-  content: "\e152";
-}
-.glyphicon-sort-by-order:before {
-  content: "\e153";
-}
-.glyphicon-sort-by-order-alt:before {
-  content: "\e154";
-}
-.glyphicon-sort-by-attributes:before {
-  content: "\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
-  content: "\e156";
-}
-.glyphicon-unchecked:before {
-  content: "\e157";
-}
-.glyphicon-expand:before {
-  content: "\e158";
-}
-.glyphicon-collapse-down:before {
-  content: "\e159";
-}
-.glyphicon-collapse-up:before {
-  content: "\e160";
-}
-.glyphicon-log-in:before {
-  content: "\e161";
-}
-.glyphicon-flash:before {
-  content: "\e162";
-}
-.glyphicon-log-out:before {
-  content: "\e163";
-}
-.glyphicon-new-window:before {
-  content: "\e164";
-}
-.glyphicon-record:before {
-  content: "\e165";
-}
-.glyphicon-save:before {
-  content: "\e166";
-}
-.glyphicon-open:before {
-  content: "\e167";
-}
-.glyphicon-saved:before {
-  content: "\e168";
-}
-.glyphicon-import:before {
-  content: "\e169";
-}
-.glyphicon-export:before {
-  content: "\e170";
-}
-.glyphicon-send:before {
-  content: "\e171";
-}
-.glyphicon-floppy-disk:before {
-  content: "\e172";
-}
-.glyphicon-floppy-saved:before {
-  content: "\e173";
-}
-.glyphicon-floppy-remove:before {
-  content: "\e174";
-}
-.glyphicon-floppy-save:before {
-  content: "\e175";
-}
-.glyphicon-floppy-open:before {
-  content: "\e176";
-}
-.glyphicon-credit-card:before {
-  content: "\e177";
-}
-.glyphicon-transfer:before {
-  content: "\e178";
-}
-.glyphicon-cutlery:before {
-  content: "\e179";
-}
-.glyphicon-header:before {
-  content: "\e180";
-}
-.glyphicon-compressed:before {
-  content: "\e181";
-}
-.glyphicon-earphone:before {
-  content: "\e182";
-}
-.glyphicon-phone-alt:before {
-  content: "\e183";
-}
-.glyphicon-tower:before {
-  content: "\e184";
-}
-.glyphicon-stats:before {
-  content: "\e185";
-}
-.glyphicon-sd-video:before {
-  content: "\e186";
-}
-.glyphicon-hd-video:before {
-  content: "\e187";
-}
-.glyphicon-subtitles:before {
-  content: "\e188";
-}
-.glyphicon-sound-stereo:before {
-  content: "\e189";
-}
-.glyphicon-sound-dolby:before {
-  content: "\e190";
-}
-.glyphicon-sound-5-1:before {
-  content: "\e191";
-}
-.glyphicon-sound-6-1:before {
-  content: "\e192";
-}
-.glyphicon-sound-7-1:before {
-  content: "\e193";
-}
-.glyphicon-copyright-mark:before {
-  content: "\e194";
-}
-.glyphicon-registration-mark:before {
-  content: "\e195";
-}
-.glyphicon-cloud-download:before {
-  content: "\e197";
-}
-.glyphicon-cloud-upload:before {
-  content: "\e198";
-}
-.glyphicon-tree-conifer:before {
-  content: "\e199";
-}
-.glyphicon-tree-deciduous:before {
-  content: "\e200";
-}
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  margin-left: 2px;
-  vertical-align: middle;
-  border-top: 4px solid;
-  border-right: 4px solid transparent;
-  border-left: 4px solid transparent;
-}
-.dropdown {
-  position: relative;
-}
-.dropdown-toggle:focus {
-  outline: 0;
-}
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: 1000;
-  display: none;
-  float: left;
-  min-width: 160px;
-  padding: 5px 0;
-  margin: 2px 0 0;
-  font-size: 14px;
-  list-style: none;
-  background-color: #fff;
-  background-clip: padding-box;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, .15);
-  border-radius: 4px;
-  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-}
-.dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-.dropdown-menu .divider {
-  height: 1px;
-  margin: 9px 0;
-  overflow: hidden;
-  background-color: #e5e5e5;
-}
-.dropdown-menu > li > a {
-  display: block;
-  padding: 3px 20px;
-  clear: both;
-  font-weight: normal;
-  line-height: 1.42857143;
-  color: #333;
-  white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-  color: #262626;
-  text-decoration: none;
-  background-color: #f5f5f5;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  color: #fff;
-  text-decoration: none;
-  background-color: #428bca;
-  outline: 0;
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  color: #999;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  cursor: not-allowed;
-  background-color: transparent;
-  background-image: none;
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.open > .dropdown-menu {
-  display: block;
-}
-.open > a {
-  outline: 0;
-}
-.dropdown-menu-right {
-  right: 0;
-  left: auto;
-}
-.dropdown-menu-left {
-  right: auto;
-  left: 0;
-}
-.dropdown-header {
-  display: block;
-  padding: 3px 20px;
-  font-size: 12px;
-  line-height: 1.42857143;
-  color: #999;
-}
-.dropdown-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 990;
-}
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-  content: "";
-  border-top: 0;
-  border-bottom: 4px solid;
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 1px;
-}
-@media (min-width: 768px) {
-  .navbar-right .dropdown-menu {
-    right: 0;
-    left: auto;
-  }
-  .navbar-right .dropdown-menu-left {
-    right: auto;
-    left: 0;
-  }
-}
-.btn-group,
-.btn-group-vertical {
-  position: relative;
-  display: inline-block;
-  vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
-  position: relative;
-  float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
-  z-index: 2;
-}
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus {
-  outline: none;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
-  margin-left: -1px;
-}
-.btn-toolbar {
-  margin-left: -5px;
-}
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
-  float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
-  margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
-  border-radius: 0;
-}
-.btn-group > .btn:first-child {
-  margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group > .btn-group {
-  float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-.btn-group > .btn-group:first-child > .btn:last-child,
-.btn-group > .btn-group:first-child > .dropdown-toggle {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-.btn-group > .btn-group:last-child > .btn:first-child {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
-  padding-right: 8px;
-  padding-left: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
-  padding-right: 12px;
-  padding-left: 12px;
-}
-.btn-group.open .dropdown-toggle {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
-  -webkit-box-shadow: none;
-          box-shadow: none;
-}
-.btn .caret {
-  margin-left: 0;
-}
-.btn-lg .caret {
-  border-width: 5px 5px 0;
-  border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
-  border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
-  display: block;
-  float: none;
-  width: 100%;
-  max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
-  float: none;
-}
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
-  margin-top: -1px;
-  margin-left: 0;
-}
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
-  border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
-  border-top-right-radius: 4px;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-  border-bottom-left-radius: 4px;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-}
-.btn-group-justified {
-  display: table;
-  width: 100%;
-  table-layout: fixed;
-  border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
-  display: table-cell;
-  float: none;
-  width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
-  width: 100%;
-}
-[data-toggle="buttons"] > .btn > input[type="radio"],
-[data-toggle="buttons"] > .btn > input[type="checkbox"] {
-  display: none;
-}
-.input-group {
-  position: relative;
-  display: table;
-  border-collapse: separate;
-}
-.input-group[class*="col-"] {
-  float: none;
-  padding-right: 0;
-  padding-left: 0;
-}
-.input-group .form-control {
-  position: relative;
-  z-index: 2;
-  float: left;
-  width: 100%;
-  margin-bottom: 0;
-}
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
-  height: 46px;
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-select.input-group-lg > .form-control,
-select.input-group-lg > .input-group-addon,
-select.input-group-lg > .input-group-btn > .btn {
-  height: 46px;
-  line-height: 46px;
-}
-textarea.input-group-lg > .form-control,
-textarea.input-group-lg > .input-group-addon,
-textarea.input-group-lg > .input-group-btn > .btn,
-select[multiple].input-group-lg > .form-control,
-select[multiple].input-group-lg > .input-group-addon,
-select[multiple].input-group-lg > .input-group-btn > .btn {
-  height: auto;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
-  height: 30px;
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-select.input-group-sm > .form-control,
-select.input-group-sm > .input-group-addon,
-select.input-group-sm > .input-group-btn > .btn {
-  height: 30px;
-  line-height: 30px;
-}
-textarea.input-group-sm > .form-control,
-textarea.input-group-sm > .input-group-addon,
-textarea.input-group-sm > .input-group-btn > .btn,
-select[multiple].input-group-sm > .form-control,
-select[multiple].input-group-sm > .input-group-addon,
-select[multiple].input-group-sm > .input-group-btn > .btn {
-  height: auto;
-}
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
-  display: table-cell;
-}
-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
-  border-radius: 0;
-}
-.input-group-addon,
-.input-group-btn {
-  width: 1%;
-  white-space: nowrap;
-  vertical-align: middle;
-}
-.input-group-addon {
-  padding: 6px 12px;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 1;
-  color: #555;
-  text-align: center;
-  background-color: #eee;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-}
-.input-group-addon.input-sm {
-  padding: 5px 10px;
-  font-size: 12px;
-  border-radius: 3px;
-}
-.input-group-addon.input-lg {
-  padding: 10px 16px;
-  font-size: 18px;
-  border-radius: 6px;
-}
-.input-group-addon input[type="radio"],
-.input-group-addon input[type="checkbox"] {
-  margin-top: 0;
-}
-.input-group .form-control:first-child,
-.input-group-addon:first-child,
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group > .btn,
-.input-group-btn:first-child > .dropdown-toggle,
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
-  border-top-right-radius: 0;
-  border-bottom-right-radius: 0;
-}
-.input-group-addon:first-child {
-  border-right: 0;
-}
-.input-group .form-control:last-child,
-.input-group-addon:last-child,
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group > .btn,
-.input-group-btn:last-child > .dropdown-toggle,
-.input-group-btn:first-child > .btn:not(:first-child),
-.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.input-group-addon:last-child {
-  border-left: 0;
-}
-.input-group-btn {
-  position: relative;
-  font-size: 0;
-  white-space: nowrap;
-}
-.input-group-btn > .btn {
-  position: relative;
-}
-.input-group-btn > .btn + .btn {
-  margin-left: -1px;
-}
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:focus,
-.input-group-btn > .btn:active {
-  z-index: 2;
-}
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
-  margin-right: -1px;
-}
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group {
-  margin-left: -1px;
-}
-.nav {
-  padding-left: 0;
-  margin-bottom: 0;
-  list-style: none;
-}
-.nav > li {
-  position: relative;
-  display: block;
-}
-.nav > li > a {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
-  text-decoration: none;
-  background-color: #eee;
-}
-.nav > li.disabled > a {
-  color: #999;
-}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
-  color: #999;
-  text-decoration: none;
-  cursor: not-allowed;
-  background-color: transparent;
-}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
-  background-color: #eee;
-  border-color: #428bca;
-}
-.nav .nav-divider {
-  height: 1px;
-  margin: 9px 0;
-  overflow: hidden;
-  background-color: #e5e5e5;
-}
-.nav > li > a > img {
-  max-width: none;
-}
-.nav-tabs {
-  border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
-  float: left;
-  margin-bottom: -1px;
-}
-.nav-tabs > li > a {
-  margin-right: 2px;
-  line-height: 1.42857143;
-  border: 1px solid transparent;
-  border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
-  border-color: #eee #eee #ddd;
-}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
-  color: #555;
-  cursor: default;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-bottom-color: transparent;
-}
-.nav-tabs.nav-justified {
-  width: 100%;
-  border-bottom: 0;
-}
-.nav-tabs.nav-justified > li {
-  float: none;
-}
-.nav-tabs.nav-justified > li > a {
-  margin-bottom: 5px;
-  text-align: center;
-}
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
-  top: auto;
-  left: auto;
-}
-@media (min-width: 768px) {
-  .nav-tabs.nav-justified > li {
-    display: table-cell;
-    width: 1%;
-  }
-  .nav-tabs.nav-justified > li > a {
-    margin-bottom: 0;
-  }
-}
-.nav-tabs.nav-justified > li > a {
-  margin-right: 0;
-  border-radius: 4px;
-}
-.nav-tabs.nav-justified > .active > a,
-.nav-tabs.nav-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:focus {
-  border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
-  .nav-tabs.nav-justified > li > a {
-    border-bottom: 1px solid #ddd;
-    border-radius: 4px 4px 0 0;
-  }
-  .nav-tabs.nav-justified > .active > a,
-  .nav-tabs.nav-justified > .active > a:hover,
-  .nav-tabs.nav-justified > .active > a:focus {
-    border-bottom-color: #fff;
-  }
-}
-.nav-pills > li {
-  float: left;
-}
-.nav-pills > li > a {
-  border-radius: 4px;
-}
-.nav-pills > li + li {
-  margin-left: 2px;
-}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
-  color: #fff;
-  background-color: #428bca;
-}
-.nav-stacked > li {
-  float: none;
-}
-.nav-stacked > li + li {
-  margin-top: 2px;
-  margin-left: 0;
-}
-.nav-justified {
-  width: 100%;
-}
-.nav-justified > li {
-  float: none;
-}
-.nav-justified > li > a {
-  margin-bottom: 5px;
-  text-align: center;
-}
-.nav-justified > .dropdown .dropdown-menu {
-  top: auto;
-  left: auto;
-}
-@media (min-width: 768px) {
-  .nav-justified > li {
-    display: table-cell;
-    width: 1%;
-  }
-  .nav-justified > li > a {
-    margin-bottom: 0;
-  }
-}
-.nav-tabs-justified {
-  border-bottom: 0;
-}
-.nav-tabs-justified > li > a {
-  margin-right: 0;
-  border-radius: 4px;
-}
-.nav-tabs-justified > .active > a,
-.nav-tabs-justified > .active > a:hover,
-.nav-tabs-justified > .active > a:focus {
-  border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
-  .nav-tabs-justified > li > a {
-    border-bottom: 1px solid #ddd;
-    border-radius: 4px 4px 0 0;
-  }
-  .nav-tabs-justified > .active > a,
-  .nav-tabs-justified > .active > a:hover,
-  .nav-tabs-justified > .active > a:focus {
-    border-bottom-color: #fff;
-  }
-}
-.tab-content > .tab-pane {
-  display: none;
-}
-.tab-content > .active {
-  display: block;
-}
-.nav-tabs .dropdown-menu {
-  margin-top: -1px;
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-}
-.navbar {
-  position: relative;
-  min-height: 50px;
-  margin-bottom: 20px;
-  border: 1px solid transparent;
-}
-@media (min-width: 768px) {
-  .navbar {
-    border-radius: 4px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-header {
-    float: left;
-  }
-}
-.navbar-collapse {
-  max-height: 340px;
-  padding-right: 15px;
-  padding-left: 15px;
-  overflow-x: visible;
-  -webkit-overflow-scrolling: touch;
-  border-top: 1px solid transparent;
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
-}
-.navbar-collapse.in {
-  overflow-y: auto;
-}
-@media (min-width: 768px) {
-  .navbar-collapse {
-    width: auto;
-    border-top: 0;
-    box-shadow: none;
-  }
-  .navbar-collapse.collapse {
-    display: block !important;
-    height: auto !important;
-    padding-bottom: 0;
-    overflow: visible !important;
-  }
-  .navbar-collapse.in {
-    overflow-y: visible;
-  }
-  .navbar-fixed-top .navbar-collapse,
-  .navbar-static-top .navbar-collapse,
-  .navbar-fixed-bottom .navbar-collapse {
-    padding-right: 0;
-    padding-left: 0;
-  }
-}
-.container > .navbar-header,
-.container-fluid > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-collapse {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-@media (min-width: 768px) {
-  .container > .navbar-header,
-  .container-fluid > .navbar-header,
-  .container > .navbar-collapse,
-  .container-fluid > .navbar-collapse {
-    margin-right: 0;
-    margin-left: 0;
-  }
-}
-.navbar-static-top {
-  z-index: 1000;
-  border-width: 0 0 1px;
-}
-@media (min-width: 768px) {
-  .navbar-static-top {
-    border-radius: 0;
-  }
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  position: fixed;
-  right: 0;
-  left: 0;
-  z-index: 1030;
-}
-@media (min-width: 768px) {
-  .navbar-fixed-top,
-  .navbar-fixed-bottom {
-    border-radius: 0;
-  }
-}
-.navbar-fixed-top {
-  top: 0;
-  border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
-  bottom: 0;
-  margin-bottom: 0;
-  border-width: 1px 0 0;
-}
-.navbar-brand {
-  float: left;
-  height: 50px;
-  padding: 15px 15px;
-  font-size: 18px;
-  line-height: 20px;
-}
-.navbar-brand:hover,
-.navbar-brand:focus {
-  text-decoration: none;
-}
-@media (min-width: 768px) {
-  .navbar > .container .navbar-brand,
-  .navbar > .container-fluid .navbar-brand {
-    margin-left: -15px;
-  }
-}
-.navbar-toggle {
-  position: relative;
-  float: right;
-  padding: 9px 10px;
-  margin-top: 8px;
-  margin-right: 15px;
-  margin-bottom: 8px;
-  background-color: transparent;
-  background-image: none;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-.navbar-toggle:focus {
-  outline: none;
-}
-.navbar-toggle .icon-bar {
-  display: block;
-  width: 22px;
-  height: 2px;
-  border-radius: 1px;
-}
-.navbar-toggle .icon-bar + .icon-bar {
-  margin-top: 4px;
-}
-@media (min-width: 768px) {
-  .navbar-toggle {
-    display: none;
-  }
-}
-.navbar-nav {
-  margin: 7.5px -15px;
-}
-.navbar-nav > li > a {
-  padding-top: 10px;
-  padding-bottom: 10px;
-  line-height: 20px;
-}
-@media (max-width: 767px) {
-  .navbar-nav .open .dropdown-menu {
-    position: static;
-    float: none;
-    width: auto;
-    margin-top: 0;
-    background-color: transparent;
-    border: 0;
-    box-shadow: none;
-  }
-  .navbar-nav .open .dropdown-menu > li > a,
-  .navbar-nav .open .dropdown-menu .dropdown-header {
-    padding: 5px 15px 5px 25px;
-  }
-  .navbar-nav .open .dropdown-menu > li > a {
-    line-height: 20px;
-  }
-  .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-nav .open .dropdown-menu > li > a:focus {
-    background-image: none;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-nav {
-    float: left;
-    margin: 0;
-  }
-  .navbar-nav > li {
-    float: left;
-  }
-  .navbar-nav > li > a {
-    padding-top: 15px;
-    padding-bottom: 15px;
-  }
-  .navbar-nav.navbar-right:last-child {
-    margin-right: -15px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-left {
-    float: left !important;
-  }
-  .navbar-right {
-    float: right !important;
-  }
-}
-.navbar-form {
-  padding: 10px 15px;
-  margin-top: 8px;
-  margin-right: -15px;
-  margin-bottom: 8px;
-  margin-left: -15px;
-  border-top: 1px solid transparent;
-  border-bottom: 1px solid transparent;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-}
-@media (min-width: 768px) {
-  .navbar-form .form-group {
-    display: inline-block;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .form-control {
-    display: inline-block;
-    width: auto;
-    vertical-align: middle;
-  }
-  .navbar-form .input-group > .form-control {
-    width: 100%;
-  }
-  .navbar-form .control-label {
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .radio,
-  .navbar-form .checkbox {
-    display: inline-block;
-    padding-left: 0;
-    margin-top: 0;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .radio input[type="radio"],
-  .navbar-form .checkbox input[type="checkbox"] {
-    float: none;
-    margin-left: 0;
-  }
-  .navbar-form .has-feedback .form-control-feedback {
-    top: 0;
-  }
-}
-@media (max-width: 767px) {
-  .navbar-form .form-group {
-    margin-bottom: 5px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-form {
-    width: auto;
-    padding-top: 0;
-    padding-bottom: 0;
-    margin-right: 0;
-    margin-left: 0;
-    border: 0;
-    -webkit-box-shadow: none;
-            box-shadow: none;
-  }
-  .navbar-form.navbar-right:last-child {
-    margin-right: -15px;
-  }
-}
-.navbar-nav > li > .dropdown-menu {
-  margin-top: 0;
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-}
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.navbar-btn {
-  margin-top: 8px;
-  margin-bottom: 8px;
-}
-.navbar-btn.btn-sm {
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-.navbar-btn.btn-xs {
-  margin-top: 14px;
-  margin-bottom: 14px;
-}
-.navbar-text {
-  margin-top: 15px;
-  margin-bottom: 15px;
-}
-@media (min-width: 768px) {
-  .navbar-text {
-    float: left;
-    margin-right: 15px;
-    margin-left: 15px;
-  }
-  .navbar-text.navbar-right:last-child {
-    margin-right: 0;
-  }
-}
-.navbar-default {
-  background-color: #f8f8f8;
-  border-color: #e7e7e7;
-}
-.navbar-default .navbar-brand {
-  color: #777;
-}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
-  color: #5e5e5e;
-  background-color: transparent;
-}
-.navbar-default .navbar-text {
-  color: #777;
-}
-.navbar-default .navbar-nav > li > a {
-  color: #777;
-}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
-  color: #333;
-  background-color: transparent;
-}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
-  color: #555;
-  background-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
-  color: #ccc;
-  background-color: transparent;
-}
-.navbar-default .navbar-toggle {
-  border-color: #ddd;
-}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
-  background-color: #ddd;
-}
-.navbar-default .navbar-toggle .icon-bar {
-  background-color: #888;
-}
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
-  border-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
-  color: #555;
-  background-color: #e7e7e7;
-}
-@media (max-width: 767px) {
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
-    color: #777;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
-    color: #333;
-    background-color: transparent;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #555;
-    background-color: #e7e7e7;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-    color: #ccc;
-    background-color: transparent;
-  }
-}
-.navbar-default .navbar-link {
-  color: #777;
-}
-.navbar-default .navbar-link:hover {
-  color: #333;
-}
-.navbar-inverse {
-  background-color: #222;
-  border-color: #080808;
-}
-.navbar-inverse .navbar-brand {
-  color: #999;
-}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
-  color: #fff;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-text {
-  color: #999;
-}
-.navbar-inverse .navbar-nav > li > a {
-  color: #999;
-}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
-  color: #fff;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
-  color: #fff;
-  background-color: #080808;
-}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
-  color: #444;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-toggle {
-  border-color: #333;
-}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
-  background-color: #333;
-}
-.navbar-inverse .navbar-toggle .icon-bar {
-  background-color: #fff;
-}
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
-  border-color: #101010;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
-  color: #fff;
-  background-color: #080808;
-}
-@media (max-width: 767px) {
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
-    border-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
-    background-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
-    color: #999;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
-    color: #fff;
-    background-color: transparent;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #fff;
-    background-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-    color: #444;
-    background-color: transparent;
-  }
-}
-.navbar-inverse .navbar-link {
-  color: #999;
-}
-.navbar-inverse .navbar-link:hover {
-  color: #fff;
-}
-.breadcrumb {
-  padding: 8px 15px;
-  margin-bottom: 20px;
-  list-style: none;
-  background-color: #f5f5f5;
-  border-radius: 4px;
-}
-.breadcrumb > li {
-  display: inline-block;
-}
-.breadcrumb > li + li:before {
-  padding: 0 5px;
-  color: #ccc;
-  content: "/\00a0";
-}
-.breadcrumb > .active {
-  color: #999;
-}
-.pagination {
-  display: inline-block;
-  padding-left: 0;
-  margin: 20px 0;
-  border-radius: 4px;
-}
-.pagination > li {
-  display: inline;
-}
-.pagination > li > a,
-.pagination > li > span {
-  position: relative;
-  float: left;
-  padding: 6px 12px;
-  margin-left: -1px;
-  line-height: 1.42857143;
-  color: #428bca;
-  text-decoration: none;
-  background-color: #fff;
-  border: 1px solid #ddd;
-}
-.pagination > li:first-child > a,
-.pagination > li:first-child > span {
-  margin-left: 0;
-  border-top-left-radius: 4px;
-  border-bottom-left-radius: 4px;
-}
-.pagination > li:last-child > a,
-.pagination > li:last-child > span {
-  border-top-right-radius: 4px;
-  border-bottom-right-radius: 4px;
-}
-.pagination > li > a:hover,
-.pagination > li > span:hover,
-.pagination > li > a:focus,
-.pagination > li > span:focus {
-  color: #2a6496;
-  background-color: #eee;
-  border-color: #ddd;
-}
-.pagination > .active > a,
-.pagination > .active > span,
-.pagination > .active > a:hover,
-.pagination > .active > span:hover,
-.pagination > .active > a:focus,
-.pagination > .active > span:focus {
-  z-index: 2;
-  color: #fff;
-  cursor: default;
-  background-color: #428bca;
-  border-color: #428bca;
-}
-.pagination > .disabled > span,
-.pagination > .disabled > span:hover,
-.pagination > .disabled > span:focus,
-.pagination > .disabled > a,
-.pagination > .disabled > a:hover,
-.pagination > .disabled > a:focus {
-  color: #999;
-  cursor: not-allowed;
-  background-color: #fff;
-  border-color: #ddd;
-}
-.pagination-lg > li > a,
-.pagination-lg > li > span {
-  padding: 10px 16px;
-  font-size: 18px;
-}
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
-  border-top-left-radius: 6px;
-  border-bottom-left-radius: 6px;
-}
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
-  border-top-right-radius: 6px;
-  border-bottom-right-radius: 6px;
-}
-.pagination-sm > li > a,
-.pagination-sm > li > span {
-  padding: 5px 10px;
-  font-size: 12px;
-}
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
-  border-top-left-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
-  border-top-right-radius: 3px;
-  border-bottom-right-radius: 3px;
-}
-.pager {
-  padding-left: 0;
-  margin: 20px 0;
-  text-align: center;
-  list-style: none;
-}
-.pager li {
-  display: inline;
-}
-.pager li > a,
-.pager li > span {
-  display: inline-block;
-  padding: 5px 14px;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 15px;
-}
-.pager li > a:hover,
-.pager li > a:focus {
-  text-decoration: none;
-  background-color: #eee;
-}
-.pager .next > a,
-.pager .next > span {
-  float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
-  float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
-  color: #999;
-  cursor: not-allowed;
-  background-color: #fff;
-}
-.label {
-  display: inline;
-  padding: .2em .6em .3em;
-  font-size: 75%;
-  font-weight: bold;
-  line-height: 1;
-  color: #fff;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: b

<TRUNCATED>

[12/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/fig/job_and_execution_graph.svg
----------------------------------------------------------------------
diff --git a/docs/internals/fig/job_and_execution_graph.svg b/docs/internals/fig/job_and_execution_graph.svg
new file mode 100644
index 0000000..2f90ea1
--- /dev/null
+++ b/docs/internals/fig/job_and_execution_graph.svg
@@ -0,0 +1,851 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="860.40625"
+   height="541.0625"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.5 r10040">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="430.20675"
+     inkscape:cy="270.53212"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1600"
+     inkscape:window-height="838"
+     inkscape:window-x="1912"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(55.206749,-261.8318)">
+    <g
+       id="g2989"
+       transform="translate(-78.581749,159.5193)">
+      <path
+         id="path2991"
+         d="m 336.57135,443.36045 c 0,-3.6384 2.96324,-6.60164 6.60164,-6.60164 l 500.22462,0 c 3.63841,0 6.60165,2.96324 6.60165,6.60164 l 0,26.36907 c 0,3.63841 -2.96324,6.56414 -6.60165,6.56414 l -500.22462,0 c -3.6384,0 -6.60164,-2.92573 -6.60164,-6.56414 z"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path2993"
+         d="m 336.57135,443.36045 c 0,-3.6384 2.96324,-6.60164 6.60164,-6.60164 l 500.22462,0 c 3.63841,0 6.60165,2.96324 6.60165,6.60164 l 0,26.36907 c 0,3.63841 -2.96324,6.56414 -6.60165,6.56414 l -500.22462,0 c -3.6384,0 -6.60164,-2.92573 -6.60164,-6.56414 z"
+         style="fill:none;stroke:#ed7d31;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text2995"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="453.48053"
+         x="347.62067"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text2997"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="469.98465"
+         x="347.62067"
+         xml:space="preserve">Result</text>
+      <path
+         id="path2999"
+         d="m 336.57135,550.86223 c 0,-9.33982 7.57689,-16.8792 16.8792,-16.8792 l 479.6695,0 c 9.30232,0 16.87921,7.53938 16.87921,16.8792 l 0,67.51682 c 0,9.30232 -7.57689,16.87921 -16.87921,16.87921 l -479.6695,0 c -9.30231,0 -16.8792,-7.57689 -16.8792,-16.87921 z"
+         style="fill:#c5e0b4;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3001"
+         d="m 336.57135,550.86223 c 0,-9.33982 7.57689,-16.8792 16.8792,-16.8792 l 479.6695,0 c 9.30232,0 16.87921,7.53938 16.87921,16.8792 l 0,67.51682 c 0,9.30232 -7.57689,16.87921 -16.87921,16.87921 l -479.6695,0 c -9.30231,0 -16.8792,-7.57689 -16.8792,-16.87921 z"
+         style="fill:none;stroke:#548235;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3003"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="581.19519"
+         x="350.63596"
+         xml:space="preserve">Execution</text>
+      <text
+         id="text3005"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="599.19965"
+         x="350.63596"
+         xml:space="preserve">Job Vertex</text>
+      <path
+         id="path3007"
+         d="m 336.57135,345.1985 c 0,-9.33983 7.57689,-16.87921 16.91671,-16.87921 l 479.59448,0 c 9.33983,0 16.91672,7.53938 16.91672,16.87921 l 0,67.62935 c 0,9.33982 -7.57689,16.91671 -16.91672,16.91671 l -479.59448,0 c -9.33982,0 -16.91671,-7.57689 -16.91671,-16.91671 z"
+         style="fill:#c5e0b4;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3009"
+         d="m 336.57135,345.1985 c 0,-9.33983 7.57689,-16.87921 16.91671,-16.87921 l 479.59448,0 c 9.33983,0 16.91672,7.53938 16.91672,16.87921 l 0,67.62935 c 0,9.33982 -7.57689,16.91671 -16.91672,16.91671 l -479.59448,0 c -9.33982,0 -16.91671,-7.57689 -16.91671,-16.91671 z"
+         style="fill:none;stroke:#548235;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3011"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="375.60931"
+         x="350.63596"
+         xml:space="preserve">Execution</text>
+      <text
+         id="text3013"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="393.6138"
+         x="350.63596"
+         xml:space="preserve">Job Vertex</text>
+      <path
+         id="path3015"
+         d="m 336.57135,168.41696 c 0,-9.30232 7.57689,-16.87921 16.8792,-16.87921 l 479.6695,0 c 9.30232,0 16.87921,7.57689 16.87921,16.87921 l 0,67.51682 c 0,9.33982 -7.57689,16.8792 -16.87921,16.8792 l -479.6695,0 c -9.30231,0 -16.8792,-7.53938 -16.8792,-16.8792 z"
+         style="fill:#c5e0b4;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3017"
+         d="m 336.57135,168.41696 c 0,-9.30232 7.57689,-16.87921 16.8792,-16.87921 l 479.6695,0 c 9.30232,0 16.87921,7.57689 16.87921,16.87921 l 0,67.51682 c 0,9.33982 -7.57689,16.8792 -16.87921,16.8792 l -479.6695,0 c -9.30231,0 -16.8792,-7.53938 -16.8792,-16.8792 z"
+         style="fill:none;stroke:#548235;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3019"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="198.77649"
+         x="350.63596"
+         xml:space="preserve">Execution</text>
+      <text
+         id="text3021"
+         style="font-size:15.00373745px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="216.78098"
+         x="350.63596"
+         xml:space="preserve">Job Vertex</text>
+      <path
+         id="path3023"
+         d="m 24.643639,116.76659 c 0,-7.31432 5.888967,-13.20329 13.16578,-13.20329 l 211.665231,0 c 7.27681,0 13.20329,5.88897 13.20329,13.20329 l 0,512.1901 c 0,7.27681 -5.92648,13.16578 -13.20329,13.16578 l -211.665231,0 c -7.276813,0 -13.16578,-5.88897 -13.16578,-13.16578 z"
+         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3025"
+         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="123.25767"
+         x="108.06521"
+         xml:space="preserve">JobGraph</text>
+      <path
+         id="path3027"
+         d="m 181.95783,550.29959 c 17.17928,17.14177 17.17928,44.9362 0,62.07797 -17.17928,17.17928 -45.04872,17.17928 -62.228,0 -17.17928,-17.14177 -17.17928,-44.9362 0,-62.07797 17.17928,-17.17928 45.04872,-17.17928 62.228,0"
+         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3029"
+         d="m 181.95783,550.29959 c 17.17928,17.14177 17.17928,44.9362 0,62.07797 -17.17928,17.17928 -45.04872,17.17928 -62.228,0 -17.17928,-17.14177 -17.17928,-44.9362 0,-62.07797 17.17928,-17.17928 45.04872,-17.17928 62.228,0"
+         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3031"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="578.25909"
+         x="119.9825"
+         xml:space="preserve">JobVertex</text>
+      <text
+         id="text3033"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="594.76318"
+         x="141.73792"
+         xml:space="preserve">(A)</text>
+      <path
+         id="path3035"
+         d="m 235.24923,198.02121 c 17.15115,17.17928 17.15115,45.02997 0,62.20924 -17.15115,17.18866 -44.95495,17.18866 -62.1061,0 -17.15114,-17.17927 -17.15114,-45.02996 0,-62.20924 17.15115,-17.18866 44.95495,-17.18866 62.1061,0"
+         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3037"
+         d="m 235.24923,198.02121 c 17.15115,17.17928 17.15115,45.02997 0,62.20924 -17.15115,17.18866 -44.95495,17.18866 -62.1061,0 -17.15114,-17.17927 -17.15114,-45.02996 0,-62.20924 17.15115,-17.18866 44.95495,-17.18866 62.1061,0"
+         style="fill:none;stroke:#85888d;stroke-width:2.50374866px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3039"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="226.05666"
+         x="173.28711"
+         xml:space="preserve">JobVertex</text>
+      <text
+         id="text3041"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="242.56078"
+         x="194.59242"
+         xml:space="preserve">(D)</text>
+      <path
+         id="path3043"
+         d="m 127.8506,390.07843 c 17.19804,17.14177 17.19804,44.95495 0,62.09672 -17.17928,17.16052 -45.029967,17.16052 -62.209247,0 -17.17928,-17.14177 -17.17928,-44.95495 0,-62.09672 17.17928,-17.16053 45.029967,-17.16053 62.209247,0"
+         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3045"
+         d="m 127.8506,390.07843 c 17.19804,17.14177 17.19804,44.95495 0,62.09672 -17.17928,17.16052 -45.029967,17.16052 -62.209247,0 -17.17928,-17.14177 -17.17928,-44.95495 0,-62.09672 17.17928,-17.16053 45.029967,-17.16053 62.209247,0"
+         style="fill:none;stroke:#85888d;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3047"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="418.08206"
+         x="65.897766"
+         xml:space="preserve">JobVertex</text>
+      <text
+         id="text3049"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="434.58615"
+         x="87.653183"
+         xml:space="preserve">(B)</text>
+      <path
+         id="path3051"
+         d="m 495.49844,554.70694 -16.84169,-20.29255 2.88821,-2.4006 16.82295,20.29255 -2.86947,2.4006 z m -18.52962,-16.44785 -2.85071,-12.26555 11.51537,5.08251 -8.66466,7.18304 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3053"
+         d="m 50.412559,493.43543 c 0,-2.982 2.419353,-5.4201 5.4201,-5.4201 l 75.900161,0 c 3.00075,0 5.4201,2.4381 5.4201,5.4201 l 0,21.6804 c 0,2.98199 -2.41935,5.4201 -5.4201,5.4201 l -75.900161,0 c -3.000747,0 -5.4201,-2.43811 -5.4201,-5.4201 z"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3055"
+         d="m 50.412559,493.43543 c 0,-2.982 2.419353,-5.4201 5.4201,-5.4201 l 75.900161,0 c 3.00075,0 5.4201,2.4381 5.4201,5.4201 l 0,21.6804 c 0,2.98199 -2.41935,5.4201 -5.4201,5.4201 l -75.900161,0 c -3.000747,0 -5.4201,-2.43811 -5.4201,-5.4201 z"
+         style="fill:none;stroke:#ed7d31;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3057"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="501.16693"
+         x="55.542233"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text3059"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="517.67102"
+         x="66.945076"
+         xml:space="preserve">Data Set</text>
+      <path
+         id="path3061"
+         d="m 162.79056,493.43543 c 0,-2.982 2.41935,-5.4201 5.4201,-5.4201 l 75.90015,0 c 2.982,0 5.4201,2.4381 5.4201,5.4201 l 0,21.6804 c 0,2.98199 -2.4381,5.4201 -5.4201,5.4201 l -75.90015,0 c -3.00075,0 -5.4201,-2.43811 -5.4201,-5.4201 z"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3063"
+         d="m 162.79056,493.43543 c 0,-2.982 2.41935,-5.4201 5.4201,-5.4201 l 75.90015,0 c 2.982,0 5.4201,2.4381 5.4201,5.4201 l 0,21.6804 c 0,2.98199 -2.4381,5.4201 -5.4201,5.4201 l -75.90015,0 c -3.00075,0 -5.4201,-2.43811 -5.4201,-5.4201 z"
+         style="fill:none;stroke:#ed7d31;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3065"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="501.16693"
+         x="167.96423"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text3067"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="517.67102"
+         x="179.36708"
+         xml:space="preserve">Data Set</text>
+      <path
+         id="path3069"
+         d="m 118.47326,152.2223 c 17.18866,17.17928 17.18866,45.03934 0,62.21862 -17.1699,17.17928 -45.029963,17.17928 -62.209243,0 -17.17928,-17.17928 -17.17928,-45.03934 0,-62.21862 17.17928,-17.17928 45.039343,-17.17928 62.209243,0"
+         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3071"
+         d="m 118.47326,152.2223 c 17.18866,17.17928 17.18866,45.03934 0,62.21862 -17.1699,17.17928 -45.029963,17.17928 -62.209243,0 -17.17928,-17.17928 -17.17928,-45.03934 0,-62.21862 17.17928,-17.17928 45.039343,-17.17928 62.209243,0"
+         style="fill:none;stroke:#85888d;stroke-width:2.50374866px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3073"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="180.25125"
+         x="56.508911"
+         xml:space="preserve">JobVertex</text>
+      <text
+         id="text3075"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="196.75536"
+         x="77.814217"
+         xml:space="preserve">(C)</text>
+      <path
+         id="path3077"
+         d="m 181.65776,551.49989 19.26104,-20.78017 -2.73818,-2.55064 -19.26105,20.78018 2.73819,2.55063 z m 20.74266,-16.86045 3.52588,-12.07801 -11.77793,4.42611 8.25205,7.6519 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3079"
+         d="m 95.57381,485.98982 0,-11.57163 -3.750935,0 0,11.57163 3.750935,0 z m 3.750934,-9.69616 -5.626401,-11.25281 -5.626402,11.25281 11.252803,0 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3081"
+         d="m 115.41625,326.10624 52.00671,-45.40506 -2.45686,-2.8132 -52.02546,45.40506 2.47561,2.8132 z m 53.05697,-41.3353 4.78244,-11.64665 -12.17178,3.16954 7.38934,8.47711 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3083"
+         d="m 217.64797,484.90205 0,-194.74852 -3.75093,0 0,194.74852 3.75093,0 z m 3.75094,-192.87305 -5.62641,-11.2528 -5.6264,11.2528 11.25281,0 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3085"
+         d="m 95.104943,321.88644 0.28132,-85.16497 -3.750934,-0.0188 -0.28132,85.18372 3.750934,0 z m 4.032255,-83.2895 -5.588893,-11.27156 -5.663911,11.23405 11.252804,0.0375 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3087"
+         d="m 55.101227,332.7829 c 0,-3.00074 2.419353,-5.4201 5.4201,-5.4201 l 75.750123,0 c 2.98199,0 5.4201,2.41936 5.4201,5.4201 l 0,21.66165 c 0,3.00075 -2.43811,5.4201 -5.4201,5.4201 l -75.750123,0 c -3.000747,0 -5.4201,-2.41935 -5.4201,-5.4201 z"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3089"
+         d="m 55.101227,332.7829 c 0,-3.00074 2.419353,-5.4201 5.4201,-5.4201 l 75.750123,0 c 2.98199,0 5.4201,2.41936 5.4201,5.4201 l 0,21.66165 c 0,3.00075 -2.43811,5.4201 -5.4201,5.4201 l -75.750123,0 c -3.000747,0 -5.4201,-2.41935 -5.4201,-5.4201 z"
+         style="fill:none;stroke:#ed7d31;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3091"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="340.54807"
+         x="60.154701"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text3093"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="357.05219"
+         x="71.557541"
+         xml:space="preserve">Data Set</text>
+      <path
+         id="path3095"
+         d="m 326.59386,117.55429 c 0,-7.72693 6.26406,-13.99099 13.99099,-13.99099 l 527.94402,0 c 7.72693,0 13.99099,6.26406 13.99099,13.99099 l 0,510.6147 c 0,7.68942 -6.26406,13.95348 -13.99099,13.95348 l -527.94402,0 c -7.72693,0 -13.99099,-6.26406 -13.99099,-13.95348 z"
+         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3097"
+         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="123.49081"
+         x="546.51147"
+         xml:space="preserve">ExecutionGraph</text>
+      <path
+         id="path3099"
+         d="m 560.50214,552.51264 c 17.14177,17.17928 17.14177,45.01122 0,62.1905 -17.14178,17.17928 -44.97371,17.17928 -62.11548,0 -17.14177,-17.17928 -17.14177,-45.01122 0,-62.1905 17.14177,-17.21678 44.9737,-17.21678 62.11548,0"
+         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3101"
+         d="m 560.50214,552.51264 c 17.14177,17.17928 17.14177,45.01122 0,62.1905 -17.14178,17.17928 -44.97371,17.17928 -62.11548,0 -17.14177,-17.17928 -17.14177,-45.01122 0,-62.1905 17.14177,-17.21678 44.9737,-17.21678 62.11548,0"
+         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3103"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="572.29529"
+         x="499.31607"
+         xml:space="preserve">Execution</text>
+      <text
+         id="text3105"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="588.79938"
+         x="509.66867"
+         xml:space="preserve">Vertex</text>
+      <text
+         id="text3107"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="605.30347"
+         x="508.76843"
+         xml:space="preserve">A (0/2)</text>
+      <path
+         id="path3109"
+         d="m 766.16587,550.29959 c 17.17928,17.14177 17.17928,44.9362 0,62.07797 -17.17928,17.17928 -45.04872,17.17928 -62.228,0 -17.17928,-17.14177 -17.17928,-44.9362 0,-62.07797 17.17928,-17.17928 45.04872,-17.17928 62.228,0"
+         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3111"
+         d="m 766.16587,550.29959 c 17.17928,17.14177 17.17928,44.9362 0,62.07797 -17.17928,17.17928 -45.04872,17.17928 -62.228,0 -17.17928,-17.14177 -17.17928,-44.9362 0,-62.07797 17.17928,-17.17928 45.04872,-17.17928 62.228,0"
+         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3113"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="570.00702"
+         x="704.90192"
+         xml:space="preserve">Execution</text>
+      <text
+         id="text3115"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="586.51111"
+         x="715.25446"
+         xml:space="preserve">Vertex</text>
+      <text
+         id="text3117"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="603.01526"
+         x="714.35425"
+         xml:space="preserve">A (1/2)</text>
+      <path
+         id="path3119"
+         d="m 336.57135,494.29814 c 0,-3.45086 2.8132,-6.26406 6.30157,-6.26406 l 500.86228,0 c 3.45086,0 6.26406,2.8132 6.26406,6.26406 l 0,25.13126 c 0,3.45086 -2.8132,6.26406 -6.26406,6.26406 l -500.86228,0 c -3.48837,0 -6.30157,-2.8132 -6.30157,-6.26406 z"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3121"
+         d="m 336.57135,494.29814 c 0,-3.45086 2.8132,-6.26406 6.30157,-6.26406 l 500.86228,0 c 3.45086,0 6.26406,2.8132 6.26406,6.26406 l 0,25.13126 c 0,3.45086 -2.8132,6.26406 -6.26406,6.26406 l -500.86228,0 c -3.48837,0 -6.30157,-2.8132 -6.30157,-6.26406 z"
+         style="fill:none;stroke:#ed7d31;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3123"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="503.78391"
+         x="347.53018"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text3125"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="520.28802"
+         x="347.53018"
+         xml:space="preserve">Result</text>
+      <path
+         id="path3127"
+         d="m 434.09564,496.3424 c 0,-2.79444 2.25056,-5.04501 5.04501,-5.04501 l 79.33226,0 c 2.7757,0 5.02626,2.25057 5.02626,5.04501 l 0,20.10501 c 0,2.77569 -2.25056,5.02625 -5.02626,5.02625 l -79.33226,0 c -2.79445,0 -5.04501,-2.25056 -5.04501,-5.02625 z"
+         style="fill:#fbe5d6;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3129"
+         d="m 434.09564,496.3424 c 0,-2.79444 2.25056,-5.04501 5.04501,-5.04501 l 79.33226,0 c 2.7757,0 5.02626,2.25057 5.02626,5.04501 l 0,20.10501 c 0,2.77569 -2.25056,5.02625 -5.02626,5.02625 l -79.33226,0 c -2.79445,0 -5.04501,-2.25056 -5.04501,-5.02625 z"
+         style="fill:none;stroke:#843c0c;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3131"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="503.60291"
+         x="444.14053"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text3133"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="518.60663"
+         x="436.7887"
+         xml:space="preserve">Result</text>
+      <text
+         id="text3135"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="518.60663"
+         x="475.49835"
+         xml:space="preserve">Partition</text>
+      <path
+         id="path3137"
+         d="m 631.65736,496.36116 c 0,-2.8132 2.25056,-5.06377 5.02625,-5.06377 l 79.33227,0 c 2.77569,0 5.02625,2.25057 5.02625,5.06377 l 0,20.105 c 0,2.7757 -2.25056,5.02626 -5.02625,5.02626 l -79.33227,0 c -2.77569,0 -5.02625,-2.25056 -5.02625,-5.02626 z"
+         style="fill:#fbe5d6;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3139"
+         d="m 631.65736,496.36116 c 0,-2.8132 2.25056,-5.06377 5.02625,-5.06377 l 79.33227,0 c 2.77569,0 5.02625,2.25057 5.02625,5.06377 l 0,20.105 c 0,2.7757 -2.25056,5.02626 -5.02625,5.02626 l -79.33227,0 c -2.77569,0 -5.02625,-2.25056 -5.02625,-5.02626 z"
+         style="fill:none;stroke:#843c0c;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3141"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="503.60291"
+         x="641.72223"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text3143"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="518.60663"
+         x="634.37042"
+         xml:space="preserve">Result</text>
+      <text
+         id="text3145"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="518.60663"
+         x="673.08008"
+         xml:space="preserve">Partition</text>
+      <path
+         id="path3147"
+         d="m 116.78534,552.36261 -16.71041,-20.42384 2.90698,-2.36309 16.71041,20.40508 -2.90698,2.38185 z m -18.417084,-16.59789 -2.794446,-12.26555 11.49661,5.13878 -8.702164,7.12677 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3149"
+         d="m 506.09483,345.06721 c 17.16053,17.14178 17.16053,44.95495 0,62.09672 -17.14177,17.16053 -44.95495,17.16053 -62.09672,0 -17.16052,-17.14177 -17.16052,-44.95494 0,-62.09672 17.14177,-17.16052 44.95495,-17.16052 62.09672,0"
+         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3151"
+         d="m 506.09483,345.06721 c 17.16053,17.14178 17.16053,44.95495 0,62.09672 -17.14177,17.16053 -44.95495,17.16053 -62.09672,0 -17.16052,-17.14177 -17.16052,-44.95494 0,-62.09672 17.14177,-17.16052 44.95495,-17.16052 62.09672,0"
+         style="fill:none;stroke:#85888d;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3153"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="364.74869"
+         x="444.95163"
+         xml:space="preserve">Execution</text>
+      <text
+         id="text3155"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="381.25281"
+         x="455.3042"
+         xml:space="preserve">Vertex</text>
+      <text
+         id="text3157"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="397.75693"
+         x="454.40399"
+         xml:space="preserve">B (0/2)</text>
+      <path
+         id="path3159"
+         d="m 702.24995,347.56159 c 17.14177,17.17928 17.14177,44.9737 0,62.11547 -17.14177,17.14177 -44.9362,17.14177 -62.11548,0 -17.14177,-17.14177 -17.14177,-44.93619 0,-62.11547 17.17928,-17.14177 44.97371,-17.14177 62.11548,0"
+         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3161"
+         d="m 702.24995,347.56159 c 17.14177,17.17928 17.14177,44.9737 0,62.11547 -17.14177,17.14177 -44.9362,17.14177 -62.11548,0 -17.14177,-17.14177 -17.14177,-44.93619 0,-62.11547 17.17928,-17.14177 44.97371,-17.14177 62.11548,0"
+         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3163"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="367.29498"
+         x="641.09949"
+         xml:space="preserve">Execution</text>
+      <text
+         id="text3165"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="383.7991"
+         x="651.45203"
+         xml:space="preserve">Vertex</text>
+      <text
+         id="text3167"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="400.30319"
+         x="650.55182"
+         xml:space="preserve">B (1/2)</text>
+      <path
+         id="path3169"
+         d="m 551.10604,540.0783 14.4411,-53.91969 -3.61965,-0.97524 -14.4411,53.93844 3.61965,0.95649 z m 17.59189,-51.14399 -2.53188,-12.32182 -8.34583,9.41484 10.87771,2.90698 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3171"
+         d="m 770.55446,543.36036 14.4411,-53.90092 -3.6384,-0.97525 -14.4411,53.93844 3.6384,0.93773 z m 17.59189,-51.12523 -2.55064,-12.34058 -8.32707,9.41485 10.87771,2.92573 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3173"
+         d="m 694.448,553.30034 -16.84169,-20.44259 2.88822,-2.36309 16.84169,20.40508 -2.88822,2.4006 z m -18.56712,-16.57913 -2.8132,-12.26555 11.51537,5.10127 -8.70217,7.16428 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3175"
+         d="m 336.57135,275.50614 c 0,-3.63841 2.96324,-6.60165 6.60164,-6.60165 l 500.22462,0 c 3.63841,0 6.60165,2.96324 6.60165,6.60165 l 0,26.36906 c 0,3.63841 -2.96324,6.56414 -6.60165,6.56414 l -500.22462,0 c -3.6384,0 -6.60164,-2.92573 -6.60164,-6.56414 z"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3177"
+         d="m 336.57135,275.50614 c 0,-3.63841 2.96324,-6.60165 6.60164,-6.60165 l 500.22462,0 c 3.63841,0 6.60165,2.96324 6.60165,6.60165 l 0,26.36906 c 0,3.63841 -2.96324,6.56414 -6.60165,6.56414 l -500.22462,0 c -3.6384,0 -6.60164,-2.92573 -6.60164,-6.56414 z"
+         style="fill:none;stroke:#ed7d31;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3179"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="285.63223"
+         x="347.62067"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text3181"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="302.13635"
+         x="347.62067"
+         xml:space="preserve">Result</text>
+      <path
+         id="path3183"
+         d="m 628.39405,278.76945 c 0,-2.77569 2.25056,-5.02625 5.02625,-5.02625 l 79.4823,0 c 2.77569,0 5.02625,2.25056 5.02625,5.02625 l 0,20.14252 c 0,2.77569 -2.25056,5.02625 -5.02625,5.02625 l -79.4823,0 c -2.77569,0 -5.02625,-2.25056 -5.02625,-5.02625 z"
+         style="fill:#fbe5d6;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3185"
+         d="m 628.39405,278.76945 c 0,-2.77569 2.25056,-5.02625 5.02625,-5.02625 l 79.4823,0 c 2.77569,0 5.02625,2.25056 5.02625,5.02625 l 0,20.14252 c 0,2.77569 -2.25056,5.02625 -5.02625,5.02625 l -79.4823,0 c -2.77569,0 -5.02625,-2.25056 -5.02625,-5.02625 z"
+         style="fill:none;stroke:#843c0c;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3187"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="286.06693"
+         x="638.53546"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text3189"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="301.07068"
+         x="631.18365"
+         xml:space="preserve">Result</text>
+      <text
+         id="text3191"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="301.07068"
+         x="669.89331"
+         xml:space="preserve">Partition</text>
+      <path
+         id="path3193"
+         d="m 430.34471,278.7882 c 0,-2.79444 2.25056,-5.045 5.04501,-5.045 l 79.33226,0 c 2.77569,0 5.02625,2.25056 5.02625,5.045 l 0,20.10501 c 0,2.77569 -2.25056,5.02625 -5.02625,5.02625 l -79.33226,0 c -2.79445,0 -5.04501,-2.25056 -5.04501,-5.02625 z"
+         style="fill:#fbe5d6;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3195"
+         d="m 430.34471,278.7882 c 0,-2.79444 2.25056,-5.045 5.04501,-5.045 l 79.33226,0 c 2.77569,0 5.02625,2.25056 5.02625,5.045 l 0,20.10501 c 0,2.77569 -2.25056,5.02625 -5.02625,5.02625 l -79.33226,0 c -2.79445,0 -5.04501,-2.25056 -5.04501,-5.02625 z"
+         style="fill:none;stroke:#843c0c;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3197"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="286.06693"
+         x="440.48862"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text3199"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="301.07068"
+         x="433.13678"
+         xml:space="preserve">Result</text>
+      <text
+         id="text3201"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="301.07068"
+         x="471.84641"
+         xml:space="preserve">Partition</text>
+      <path
+         id="path3203"
+         d="m 475.99358,326.25628 0,-8.73968 -3.75093,0 0,8.73968 3.75093,0 z m 3.75094,-6.86421 -5.62641,-11.2528 -5.6264,11.2528 11.25281,0 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3205"
+         d="m 674.94315,327.38156 0,-9.86496 -3.75094,0 0,9.86496 3.75094,0 z m 3.75093,-7.98949 -5.6264,-11.2528 -5.6264,11.2528 11.2528,0 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3207"
+         d="m 458.64551,268.60442 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.62641 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.6264 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.62641 0,-2.8132 2.8132,-0.0187 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0187 z m -0.0375,-5.6264 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.81321,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.6264 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.
 0188 z m -0.0188,-5.62641 -0.0188,-2.8132 2.8132,-0.0187 0.0188,2.8132 -2.8132,0.0187 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.6264 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.6264 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0188,-5.62641 -0.0188,-2.8132 2.8132,-0.0187 0.0188,2.8132 -2.8132,0.0187 z m -0.0375,-5.6264 0,-2.8132 2.8132,-0.0188 0,2.8132 -2.8132,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0187 0.0188,2.8132 -2.81321,0.0188 z m -0.0188,-5.6264 -0.0188,-2.8132 2.8132,-0.0188 0.0188,2.8132 -2.8132,0.0188 z m -0.0375,-5.6264 0,-0.16879 2.8132,0 0,0.15003 -2.8132,0.0188 z m -2.79445,1.25656 4.16354,-8.45836 4.27607,8.42085 -8.43961,0.0375 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3209"
+         d="m 654.16297,263.76571 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.6264 -0.0375,-2.8132 2.77569,-0.0375 0.075,2.8132 -2.8132,0.0375 z m -0.11253,-5.6264 -0.0375,-2.81321 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.62641 -0.0375,-2.8132 2.81321,-0.0375 0.0375,2.8132 -2.81321,0.0375 z m -0.075,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.6264 -0.075,-2.8132 2.8132,-0.0375 0.075,2.8132 -2.8132,0.0375 z m -0.11253,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.58889 -0.0375,-2.8132 2.8132,-0.075 0.0375,2.8132 -2.8132,0.075 z m -0.075,-5.62641 -0.0375,-2.8132 2.8132,-0.075 0.0375,2.8132 -2.8132,0.075 z m -0.075,-5.6264 -0.075,-2.8132 2.8132,-0.075 0.075,2.8132 -2.8132,0.075 z m -0.11253,-5.6264 -0.0375,-2.8132 2.8132,-0.075 0.0375,2.8132 -2.81321,0.075 z m -0.075,-5.6264 -0.0375,-2.813
 2 2.8132,-0.075 0.0375,2.8132 -2.8132,0.075 z m -0.075,-5.6264 -0.0375,-2.8132 2.8132,-0.075 0.0375,2.8132 -2.8132,0.075 z m -0.075,-5.6264 -0.075,-2.8132 2.8132,-0.075 0.075,2.8132 -2.8132,0.075 z m -0.11253,-5.62641 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.7757 -2.8132,0.075 z m -0.075,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.6264 -0.075,-2.8132 2.8132,-0.0375 0.075,2.8132 -2.81321,0.0375 z m -0.11252,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -0.075,-5.6264 -0.0375,-2.8132 2.8132,-0.0375 0.0375,2.8132 -2.8132,0.0375 z m -2.85071,-3.75094 4.08852,-8.47711 4.35108,8.36458 -8.4396,0.11253 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3211"
+         d="m 607.35131,168.64201 c 17.17928,17.14177 17.17928,44.9362 0,62.07797 -17.17928,17.17928 -45.01122,17.17928 -62.1905,0 -17.17928,-17.14177 -17.17928,-44.9362 0,-62.07797 17.17928,-17.17928 45.01122,-17.17928 62.1905,0"
+         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3213"
+         d="m 607.35131,168.64201 c 17.17928,17.14177 17.17928,44.9362 0,62.07797 -17.17928,17.17928 -45.01122,17.17928 -62.1905,0 -17.17928,-17.14177 -17.17928,-44.9362 0,-62.07797 17.17928,-17.17928 45.01122,-17.17928 62.1905,0"
+         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3215"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="188.31085"
+         x="546.13019"
+         xml:space="preserve">Execution</text>
+      <text
+         id="text3217"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="204.81496"
+         x="556.48279"
+         xml:space="preserve">Vertex</text>
+      <text
+         id="text3219"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="221.31908"
+         x="555.13245"
+         xml:space="preserve">D (0/2)</text>
+      <path
+         id="path3221"
+         d="m 803.48767,171.11763 c 17.21679,17.14177 17.21679,44.9737 0,62.11547 -17.17928,17.14177 -45.01121,17.14177 -62.19049,0 -17.17928,-17.14177 -17.17928,-44.9737 0,-62.11547 17.17928,-17.14177 45.01121,-17.14177 62.19049,0"
+         style="fill:#d6dce5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3223"
+         d="m 803.48767,171.11763 c 17.21679,17.14177 17.21679,44.9737 0,62.11547 -17.17928,17.14177 -45.01121,17.14177 -62.19049,0 -17.17928,-17.14177 -17.17928,-44.9737 0,-62.11547 17.17928,-17.14177 45.01121,-17.14177 62.19049,0"
+         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3225"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="190.85715"
+         x="742.27802"
+         xml:space="preserve">Execution</text>
+      <text
+         id="text3227"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="207.36125"
+         x="752.63055"
+         xml:space="preserve">Vertex</text>
+      <text
+         id="text3229"
+         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="223.86537"
+         x="751.28021"
+         xml:space="preserve">D (1/2)</text>
+      <path
+         id="path3231"
+         d="m 789.04657,432.7078 -0.60015,-173.63076 3.75094,0 0.60015,173.63076 -3.75094,0 z m -4.35108,-171.75529 5.58889,-11.2528 5.66391,11.21529 -11.2528,0.0375 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3233"
+         d="m 580.85095,432.7078 -0.43135,-173.64951 3.75093,0 0.43136,173.63075 -3.75094,0.0188 z m -4.18229,-171.75529 5.58889,-11.27156 5.66392,11.23405 -11.25281,0.0375 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3235"
+         d="m 491.55996,267.1228 46.5491,-24.39983 -1.74419,-3.31958 -46.54909,24.39983 1.74418,3.31958 z m 46.62412,-20.19879 7.35183,-10.22129 -12.58439,0.24381 5.23256,9.97748 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3237"
+         d="m 685.37074,265.41612 46.51159,-24.26854 -1.72543,-3.30083 -46.5491,24.23104 1.76294,3.33833 z m 46.58661,-20.0675 7.38934,-10.20254 -12.56563,0.22506 5.17629,9.97748 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3239"
+         d="m 275.46863,368.81063 19.93621,0 0,-24.26855 19.91746,48.5371 -19.91746,48.51833 0,-24.24979 -19.93621,0 z"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3241"
+         d="m 275.46863,368.81063 19.93621,0 0,-24.26855 19.91746,48.5371 -19.91746,48.51833 0,-24.24979 -19.93621,0 z"
+         style="fill:none;stroke:#000000;stroke-width:1.25656307px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3243"
+         d="m 487.6965,488.55921 157.72679,-54.01345 -1.2003,-3.56339 -157.72679,54.01345 1.2003,3.56339 z m 157.16415,-49.84992 8.85221,-8.96473 -12.49062,-1.68792 3.63841,10.65265 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3245"
+         d="m 657.95141,488.70925 -164.14089,-55.88892 1.2003,-3.56339 164.14089,55.88892 -1.2003,3.56339 z m -163.57825,-51.72539 -8.8522,-8.96473 12.49061,-1.68792 -3.63841,10.65265 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3247"
+         d="m 518.19159,446.64252 c 0,-2.79445 2.25057,-5.04501 5.02626,-5.04501 l 79.33226,0 c 2.77569,0 5.02625,2.25056 5.02625,5.04501 l 0,20.10501 c 0,2.77569 -2.25056,5.02625 -5.02625,5.02625 l -79.33226,0 c -2.77569,0 -5.02626,-2.25056 -5.02626,-5.02625 z"
+         style="fill:#fbe5d6;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3249"
+         d="m 518.19159,446.66127 c 0,-2.8132 2.25057,-5.06376 5.02626,-5.06376 l 79.33226,0 c 2.77569,0 5.02625,2.25056 5.02625,5.06376 l 0,20.10501 c 0,2.77569 -2.25056,5.02626 -5.02625,5.02626 l -79.33226,0 c -2.77569,0 -5.02626,-2.25057 -5.02626,-5.02626 z"
+         style="fill:none;stroke:#843c0c;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3251"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="453.91522"
+         x="528.3172"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text3253"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="468.91898"
+         x="520.96539"
+         xml:space="preserve">Result</text>
+      <text
+         id="text3255"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="468.91898"
+         x="559.67505"
+         xml:space="preserve">Partition</text>
+      <path
+         id="path3257"
+         d="m 746.2109,446.66127 c 0,-2.8132 2.25056,-5.06376 5.02625,-5.06376 l 79.36978,0 c 2.77569,0 5.02625,2.25056 5.02625,5.06376 l 0,20.10501 c 0,2.77569 -2.25056,5.02626 -5.02625,5.02626 l -79.36978,0 c -2.77569,0 -5.02625,-2.25057 -5.02625,-5.02626 z"
+         style="fill:#fbe5d6;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3259"
+         d="m 746.2109,446.66127 c 0,-2.8132 2.25056,-5.06376 5.02625,-5.06376 l 79.36978,0 c 2.77569,0 5.02625,2.25056 5.02625,5.06376 l 0,20.10501 c 0,2.77569 -2.25056,5.02626 -5.02625,5.02626 l -79.36978,0 c -2.77569,0 -5.02625,-2.25057 -5.02625,-5.02626 z"
+         style="fill:none;stroke:#843c0c;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3261"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="453.91522"
+         x="756.29614"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text3263"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="468.91898"
+         x="748.94434"
+         xml:space="preserve">Result</text>
+      <text
+         id="text3265"
+         style="font-size:12.45310211px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
+         y="468.91898"
+         x="787.65393"
+         xml:space="preserve">Partition</text>
+      <path
+         id="path3267"
+         d="m 463.63425,485.7085 -0.78769,-54.38855 3.75093,-0.0563 0.7877,54.38855 -3.75094,0.0563 z m -4.51987,-52.45682 5.45761,-11.34657 5.79519,11.17778 -11.2528,0.16879 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3269"
+         d="m 678.54404,488.03408 0,-54.08847 -3.75093,0 0,54.08847 3.75093,0 z m 3.75094,-52.21301 -5.6264,-11.2528 -5.62641,11.2528 11.25281,0 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3271"
+         d="m 96.98041,377.21272 0,-7.8207 3.75093,0 0,7.8207 -3.75093,0 z m -3.750934,-5.94523 5.626401,-11.2528 5.626403,11.2528 -11.252804,0 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>


[07/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/ml/als.md
----------------------------------------------------------------------
diff --git a/docs/libs/ml/als.md b/docs/libs/ml/als.md
new file mode 100644
index 0000000..7a4a5d5
--- /dev/null
+++ b/docs/libs/ml/als.md
@@ -0,0 +1,157 @@
+---
+mathjax: include
+title: Alternating Least Squares
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* This will be replaced by the TOC
+{:toc}
+
+## Description
+
+The alternating least squares (ALS) algorithm factorizes a given matrix $R$ into two factors $U$ and $V$ such that $R \approx U^TV$.
+The unknown row dimension is given as a parameter to the algorithm and is called latent factors.
+Since matrix factorization can be used in the context of recommendation, the matrices $U$ and $V$ can be called user and item matrix, respectively.
+The $i$th column of the user matrix is denoted by $u_i$ and the $i$th column of the item matrix is $v_i$.
+The matrix $R$ can be called the ratings matrix with $$(R)_{i,j} = r_{i,j}$$.
+
+In order to find the user and item matrix, the following problem is solved:
+
+$$\arg\min_{U,V} \sum_{\{i,j\mid r_{i,j} \not= 0\}} \left(r_{i,j} - u_{i}^Tv_{j}\right)^2 + 
+\lambda \left(\sum_{i} n_{u_i} \left\lVert u_i \right\rVert^2 + \sum_{j} n_{v_j} \left\lVert v_j \right\rVert^2 \right)$$
+
+with $\lambda$ being the regularization factor, $$n_{u_i}$$ being the number of items the user $i$ has rated and $$n_{v_j}$$ being the number of times the item $j$ has been rated.
+This regularization scheme to avoid overfitting is called weighted-$\lambda$-regularization.
+Details can be found in the work of [Zhou et al.](http://dx.doi.org/10.1007/978-3-540-68880-8_32).
+
+By fixing one of the matrices $U$ or $V$, we obtain a quadratic form which can be solved directly.
+The solution of the modified problem is guaranteed to monotonically decrease the overall cost function.
+By applying this step alternately to the matrices $U$ and $V$, we can iteratively improve the matrix factorization.
+
+The matrix $R$ is given in its sparse representation as a tuple of $(i, j, r)$ where $i$ denotes the row index, $j$ the column index and $r$ is the matrix value at position $(i,j)$.
+
+
+## Parameters
+
+The alternating least squares implementation can be controlled by the following parameters:
+
+   <table class="table table-bordered">
+    <thead>
+      <tr>
+        <th class="text-left" style="width: 20%">Parameters</th>
+        <th class="text-center">Description</th>
+      </tr>
+    </thead>
+
+    <tbody>
+      <tr>
+        <td><strong>NumFactors</strong></td>
+        <td>
+          <p>
+            The number of latent factors to use for the underlying model.
+            It is equivalent to the dimension of the calculated user and item vectors.
+            (Default value: <strong>10</strong>)
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td><strong>Lambda</strong></td>
+        <td>
+          <p>
+            Regularization factor. Tune this value in order to avoid overfitting or poor performance due to strong generalization.
+            (Default value: <strong>1</strong>)
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td><strong>Iterations</strong></td>
+        <td>
+          <p>
+            The maximum number of iterations.
+            (Default value: <strong>10</strong>)
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td><strong>Blocks</strong></td>
+        <td>
+          <p>
+            The number of blocks into which the user and item matrix are grouped.
+            The fewer blocks one uses, the less data is sent redundantly. 
+            However, bigger blocks entail bigger update messages which have to be stored on the heap. 
+            If the algorithm fails because of an OutOfMemoryException, then try to increase the number of blocks. 
+            (Default value: '''None''')
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td><strong>Seed</strong></td>
+        <td>
+          <p>
+            Random seed used to generate the initial item matrix for the algorithm.
+            (Default value: <strong>0</strong>)
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td><strong>TemporaryPath</strong></td>
+        <td>
+          <p>
+            Path to a temporary directory into which intermediate results are stored. 
+            If this value is set, then the algorithm is split into two preprocessing steps, the ALS iteration  and a post-processing step which calculates a last ALS half-step. 
+            The preprocessing steps calculate the <code>OutBlockInformation</code> and <code>InBlockInformation</code> for the given rating matrix. 
+            The results of the individual steps are stored in the specified directory.
+            By splitting the algorithm into multiple smaller steps, Flink does not have to split the available memory amongst too many operators. 
+            This allows the system to process bigger individual messages and improves the overall performance.
+            (Default value: <strong>None</strong>)
+          </p>
+        </td>
+      </tr>
+    </tbody>
+  </table>
+
+## Examples
+
+{% highlight scala %}
+// Read input data set from a csv file
+val inputDS: DataSet[(Int, Int, Double)] = env.readCsvFile[(Int, Int, Double)](
+  pathToTrainingFile)
+
+// Setup the ALS learner
+val als = ALS()
+.setIterations(10)
+.setNumFactors(10)
+.setBlocks(100)
+.setTemporaryPath("hdfs://tempPath")
+
+// Set the other parameters via a parameter map
+val parameters = ParameterMap()
+.add(ALS.Lambda, 0.9)
+.add(ALS.Seed, 42)
+
+// Calculate the factorization
+val factorization = als.fit(inputDS, parameters)
+
+// Read the testing data set from a csv file
+val testingDS: DataSet[(Int, Int)] = env.readCsvFile[(Int, Int)](pathToData)
+
+// Calculate the ratings according to the matrix factorization
+val predictedRatings = factorization.transform(testingDS)
+{% endhighlight %}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/ml/cocoa.md
----------------------------------------------------------------------
diff --git a/docs/libs/ml/cocoa.md b/docs/libs/ml/cocoa.md
new file mode 100644
index 0000000..0bf8d67
--- /dev/null
+++ b/docs/libs/ml/cocoa.md
@@ -0,0 +1,164 @@
+---
+mathjax: include
+title: Communication efficient distributed dual coordinate ascent (CoCoA)
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* This will be replaced by the TOC
+{:toc}
+
+## Description
+
+Implements the communication-efficient distributed dual coordinate ascent algorithm with hinge-loss function. 
+The algorithm can be used to train a SVM with soft-margin.
+The algorithm solves the following minimization problem:
+  
+$$\min_{\mathbf{w} \in \mathbb{R}^d} \frac{\lambda}{2} \left\lVert \mathbf{w} \right\rVert^2 + \frac{1}{n} \sum_{i=1}^n l_{i}\left(\mathbf{w}^T\mathbf{x}_i\right)$$
+ 
+with $\mathbf{w}$ being the weight vector, $\lambda$ being the regularization constant, 
+$$\mathbf{x}_i \in \mathbb{R}^d$$ being the data points and $$l_{i}$$ being the convex loss 
+functions, which can also depend on the labels $$y_{i} \in \mathbb{R}$$.
+In the current implementation the regularizer is the $\ell_2$-norm and the loss functions are the hinge-loss functions:
+  
+  $$l_{i} = \max\left(0, 1 - y_{i} \mathbf{w}^T\mathbf{x}_i \right)$$
+
+With these choices, the problem definition is equivalent to a SVM with soft-margin.
+Thus, the algorithm allows us to train a SVM with soft-margin.
+
+The minimization problem is solved by applying stochastic dual coordinate ascent (SDCA).
+In order to make the algorithm efficient in a distributed setting, the CoCoA algorithm calculates 
+several iterations of SDCA locally on a data block before merging the local updates into a
+valid global state.
+This state is redistributed to the different data partitions where the next round of local SDCA 
+iterations is then executed.
+The number of outer iterations and local SDCA iterations control the overall network costs, because 
+there is only network communication required for each outer iteration.
+The local SDCA iterations are embarrassingly parallel once the individual data partitions have been 
+distributed across the cluster.
+
+The implementation of this algorithm is based on the work of 
+[Jaggi et al.](http://arxiv.org/abs/1409.1458 here)
+
+## Parameters
+
+The CoCoA implementation can be controlled by the following parameters:
+
+   <table class="table table-bordered">
+    <thead>
+      <tr>
+        <th class="text-left" style="width: 20%">Parameters</th>
+        <th class="text-center">Description</th>
+      </tr>
+    </thead>
+
+    <tbody>
+      <tr>
+        <td><strong>Blocks</strong></td>
+        <td>
+          <p>
+            Sets the number of blocks into which the input data will be split. 
+            On each block the local stochastic dual coordinate ascent method is executed. 
+            This number should be set at least to the degree of parallelism. 
+            If no value is specified, then the parallelism of the input DataSet is used as the number of blocks. 
+            (Default value: <strong>None</strong>)
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td><strong>Iterations</strong></td>
+        <td>
+          <p>
+            Defines the maximum number of iterations of the outer loop method. 
+            In other words, it defines how often the SDCA method is applied to the blocked data. 
+            After each iteration, the locally computed weight vector updates have to be reduced to update the global weight vector value.
+            The new weight vector is broadcast to all SDCA tasks at the beginning of each iteration.
+            (Default value: <strong>10</strong>)
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td><strong>LocalIterations</strong></td>
+        <td>
+          <p>
+            Defines the maximum number of SDCA iterations. 
+            In other words, it defines how many data points are drawn from each local data block to calculate the stochastic dual coordinate ascent.
+            (Default value: <strong>10</strong>)
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td><strong>Regularization</strong></td>
+        <td>
+          <p>
+            Defines the regularization constant of the CoCoA algorithm. 
+            The higher the value, the smaller will the 2-norm of the weight vector be. 
+            In case of a SVM with hinge loss this means that the SVM margin will be wider even though it might contain some false classifications.
+            (Default value: <strong>1.0</strong>)
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td><strong>Stepsize</strong></td>
+        <td>
+          <p>
+            Defines the initial step size for the updates of the weight vector. 
+            The larger the step size is, the larger will be the contribution of the weight vector updates to the next weight vector value. 
+            The effective scaling of the updates is $\frac{stepsize}{blocks}$.
+            This value has to be tuned in case that the algorithm becomes instable. 
+            (Default value: <strong>1.0</strong>)
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td><strong>Seed</strong></td>
+        <td>
+          <p>
+            Defines the seed to initialize the random number generator. 
+            The seed directly controls which data points are chosen for the SDCA method. 
+            (Default value: <strong>0</strong>)
+          </p>
+        </td>
+      </tr>
+    </tbody>
+  </table>
+
+## Examples
+
+{% highlight scala %}
+// Read the training data set
+val trainingDS: DataSet[LabeledVector] = env.readSVMFile(pathToTrainingFile)
+
+// Create the CoCoA learner
+val cocoa = CoCoA()
+.setBlocks(10)
+.setIterations(10)
+.setLocalIterations(10)
+.setRegularization(0.5)
+.setStepsize(0.5)
+
+// Learn the SVM model
+val svm = cocoa.fit(trainingDS)
+
+// Read the testing data set
+val testingDS: DataSet[Vector] = env.readVectorFile(pathToTestingFile)
+
+// Calculate the predictions for the testing data set
+val predictionDS: DataSet[LabeledVector] = model.transform(testingDS)
+{% endhighlight %}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/ml/index.md
----------------------------------------------------------------------
diff --git a/docs/libs/ml/index.md b/docs/libs/ml/index.md
new file mode 100644
index 0000000..9753e68
--- /dev/null
+++ b/docs/libs/ml/index.md
@@ -0,0 +1,39 @@
+---
+title: "Machine Learning Library"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+## Link
+
+{% highlight bash %}
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-ml</artifactId>
+  <version>{{site.version }}</version>
+</dependency>
+{% endhighlight %}
+
+## Algorithms
+
+* [Alternating Least Squares (ALS)](als.html)
+* [Communication efficient distributed dual coordinate ascent (CoCoA)](cocoa.html)
+* [Multiple linear regression](multiple_linear_regression.html)
+* [Polynomial Base Feature Mapper](polynomial_base_feature_mapper.html)
+* [Standard Scaler](standard_scaler.html)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/ml/multiple_linear_regression.md
----------------------------------------------------------------------
diff --git a/docs/libs/ml/multiple_linear_regression.md b/docs/libs/ml/multiple_linear_regression.md
new file mode 100644
index 0000000..840e899
--- /dev/null
+++ b/docs/libs/ml/multiple_linear_regression.md
@@ -0,0 +1,124 @@
+---
+mathjax: include
+title: "Multiple linear regression"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* This will be replaced by the TOC
+{:toc}
+
+## Description
+
+ Multiple linear regression tries to find a linear function which best fits the provided input data.
+ Given a set of input data with its value $(\mathbf{x}, y)$, the multiple linear regression finds
+ a vector $\mathbf{w}$ such that the sum of the squared residuals is minimized:
+
+ $$ S(\mathbf{w}) = \sum_{i=1} \left(y - \mathbf{w}^T\mathbf{x_i} \right)^2$$
+
+ Written in matrix notation, we obtain the following formulation:
+
+ $$\mathbf{w}^* = \arg \min_{\mathbf{w}} (\mathbf{y} - X\mathbf{w})^2$$
+
+ This problem has a closed form solution which is given by:
+
+  $$\mathbf{w}^* = \left(X^TX\right)^{-1}X^T\mathbf{y}$$
+
+  However, in cases where the input data set is so huge that a complete parse over the whole data
+  set is prohibitive, one can apply stochastic gradient descent (SGD) to approximate the solution.
+  The SGD first calculates for a random subset of the input data set the gradients. The gradient
+  for a given point $\mathbf{x}_i$ is given by:
+
+  $$\nabla_{\mathbf{w}} S(\mathbf{w}, \mathbf{x_i}) = 2\left(\mathbf{w}^T\mathbf{x_i} -
+    y\right)\mathbf{x_i}$$
+
+  The gradients are averaged and scaled. The scaling is defined by $\gamma = \frac{s}{\sqrt{j}}$
+  with $s$ being the initial step size and $j$ being the current iteration number. The resulting gradient is subtracted from the
+  current weight vector giving the new weight vector for the next iteration:
+
+  $$\mathbf{w}_{t+1} = \mathbf{w}_t - \gamma \frac{1}{n}\sum_{i=1}^n \nabla_{\mathbf{w}} S(\mathbf{w}, \mathbf{x_i})$$
+
+  The multiple linear regression algorithm computes either a fixed number of SGD iterations or terminates based on a dynamic convergence criterion.
+  The convergence criterion is the relative change in the sum of squared residuals:
+
+  $$\frac{S_{k-1} - S_k}{S_{k-1}} < \rho$$
+
+## Parameters
+
+  The multiple linear regression implementation can be controlled by the following parameters:
+  
+   <table class="table table-bordered">
+    <thead>
+      <tr>
+        <th class="text-left" style="width: 20%">Parameters</th>
+        <th class="text-center">Description</th>
+      </tr>
+    </thead>
+
+    <tbody>
+      <tr>
+        <td><strong>Iterations</strong></td>
+        <td>
+          <p>
+            The maximum number of iterations. (Default value: <strong>10</strong>)
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td><strong>Stepsize</strong></td>
+        <td>
+          <p>
+            Initial step size for the gradient descent method.
+            This value controls how far the gradient descent method moves in the opposite direction of the gradient.
+            Tuning this parameter might be crucial to make it stable and to obtain a better performance. 
+            (Default value: <strong>0.1</strong>)
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td><strong>ConvergenceThreshold</strong></td>
+        <td>
+          <p>
+            Threshold for relative change of the sum of squared residuals until the iteration is stopped.
+            (Default value: <strong>None</strong>)
+          </p>
+        </td>
+      </tr>
+    </tbody>
+  </table>
+
+## Examples
+
+{% highlight scala %}
+// Create multiple linear regression learner
+val mlr = MultipleLinearRegression()
+.setIterations(10)
+.setStepsize(0.5)
+.setConvergenceThreshold(0.001)
+
+// Obtain training and testing data set
+val trainingDS: DataSet[LabeledVector] = ...
+val testingDS: DataSet[Vector] = ...
+
+// Fit the linear model to the provided data
+val model = mlr.fit(trainingDS)
+
+// Calculate the predictions for the test data
+val predictions = model.transform(testingDS)
+{% endhighlight %}

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/ml/polynomial_base_feature_mapper.md
----------------------------------------------------------------------
diff --git a/docs/libs/ml/polynomial_base_feature_mapper.md b/docs/libs/ml/polynomial_base_feature_mapper.md
new file mode 100644
index 0000000..2964f04
--- /dev/null
+++ b/docs/libs/ml/polynomial_base_feature_mapper.md
@@ -0,0 +1,91 @@
+---
+mathjax: include
+title: Polynomial Base Feature Mapper
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* This will be replaced by the TOC
+{:toc}
+
+## Description
+
+The polynomial base feature mapper maps a vector into the polynomial feature space of degree $d$.
+The dimension of the input vector determines the number of polynomial factors whose values are the respective vector entries.
+Given a vector $(x, y, z, \ldots)^T$ the resulting feature vector looks like:
+
+$$\left(x, y, z, x^2, xy, y^2, yz, z^2, x^3, x^2y, x^2z, xy^2, xyz, xz^2, y^3, \ldots\right)^T$$
+
+Flink's implementation orders the polynomials in decreasing order of their degree.
+
+Given the vector $\left(3,2\right)^T$, the polynomial base feature vector of degree 3 would look like
+ 
+ $$\left(3^3, 3^2\cdot2, 3\cdot2^2, 2^3, 3^2, 3\cdot2, 2^2, 3, 2\right)^T$$
+
+This transformer can be prepended to all `Transformer` and `Learner` implementations which expect an input of type `LabeledVector`.
+
+## Parameters
+
+The polynomial base feature mapper can be controlled by the following parameters:
+
+<table class="table table-bordered">
+    <thead>
+      <tr>
+        <th class="text-left" style="width: 20%">Parameters</th>
+        <th class="text-center">Description</th>
+      </tr>
+    </thead>
+
+    <tbody>
+      <tr>
+        <td><strong>Degree</strong></td>
+        <td>
+          <p>
+            The maximum polynomial degree. 
+            (Default value: <strong>10</strong>)
+          </p>
+        </td>
+      </tr>
+    </tbody>
+  </table>
+
+## Examples
+
+{% highlight scala %}
+// Obtain the training data set
+val trainingDS: DataSet[LabeledVector] = ...
+
+// Setup polynomial base feature extractor of degree 3
+val polyBase = PolynomialBase()
+.setDegree(3)
+
+// Setup the multiple linear regression learner
+val mlr = MultipleLinearRegression()
+
+// Control the learner via the parameter map
+val parameters = ParameterMap()
+.add(MultipleLinearRegression.Iterations, 20)
+.add(MultipleLinearRegression.Stepsize, 0.5)
+
+// Create pipeline PolynomialBase -> MultipleLinearRegression
+val chained = polyBase.chain(mlr)
+
+// Learn the model
+val model = chained.fit(trainingDS)
+{% endhighlight %}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/ml/standard_scaler.md
----------------------------------------------------------------------
diff --git a/docs/libs/ml/standard_scaler.md b/docs/libs/ml/standard_scaler.md
new file mode 100644
index 0000000..aae4620
--- /dev/null
+++ b/docs/libs/ml/standard_scaler.md
@@ -0,0 +1,90 @@
+---
+mathjax: include
+title: "Standard Scaler"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+* This will be replaced by the TOC
+{:toc}
+
+## Description
+
+ The standard scaler scales the given data set, so that all features will have a user specified mean and variance. 
+ In case the user does not provide a specific mean and standard deviation, the standard scaler transforms the features of the input data set to have mean equal to 0 and standard deviation equal to 1.
+ Given a set of input data $x_{1}, x_{2},... x_{n}$, with mean: 
+ 
+ $$\bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_{i}$$ 
+ 
+ and standard deviation: 
+ 
+ $$\sigma_{x}=\sqrt{ \frac{1}{n} \sum_{i=1}^{n}(x_{i}-\bar{x})^{2}}$$
+
+The scaled data set $z_{1}, z_{2},...,z_{n}$ will be:
+
+ $$z_{i}= std \left (\frac{x_{i} - \bar{x}  }{\sigma_{x}}\right ) + mean$$
+
+where $\textit{std}$ and $\textit{mean}$ are the user specified values for the standard deviation and mean.
+
+## Parameters
+
+The standard scaler implementation can be controlled by the following two parameters:
+
+ <table class="table table-bordered">
+  <thead>
+    <tr>
+      <th class="text-left" style="width: 20%">Parameters</th>
+      <th class="text-center">Description</th>
+    </tr>
+  </thead>
+
+  <tbody>
+    <tr>
+      <td><strong>Mean</strong></td>
+      <td>
+        <p>
+          The mean of the scaled data set. (Default value: <strong>0.0</strong>)
+        </p>
+      </td>
+    </tr>
+    <tr>
+      <td><strong>Std</strong></td>
+      <td>
+        <p>
+          The standard deviation of the scaled data set. (Default value: <strong>1.0</strong>)
+        </p>
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+## Examples
+
+{% highlight scala %}
+// Create standard scaler transformer
+val scaler = StandardScaler()
+.setMean(10.0)
+.setStd(2.0)
+
+// Obtain data set to be scaled
+val dataSet: DataSet[Vector] = ...
+
+// Scale the provided data set to have mean=10.0 and std=2.0
+val scaledDS = scaler.transform(dataSet)
+{% endhighlight %}

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/spargel_guide.md
----------------------------------------------------------------------
diff --git a/docs/libs/spargel_guide.md b/docs/libs/spargel_guide.md
new file mode 100644
index 0000000..87a9326
--- /dev/null
+++ b/docs/libs/spargel_guide.md
@@ -0,0 +1,131 @@
+---
+title: "Spargel Graph Processing API"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+Spargel is our [Giraph](http://giraph.apache.org) like **graph processing** Java API. It supports basic graph computations, which are run as a sequence of [supersteps](iterations.html#supersteps). Spargel and Giraph both implement the [Bulk Synchronous Parallel (BSP)](https://en.wikipedia.org/wiki/Bulk_Synchronous_Parallel) programming model, propsed by Google's [Pregel](http://googleresearch.blogspot.de/2009/06/large-scale-graph-computing-at-google.html).
+
+The API provides a **vertex-centric** view on graph processing with two basic operations per superstep:
+
+  1. **Send messages** to other vertices, and
+  2. **Receive messages** from other vertices and **update own vertex state**.
+
+This vertex-centric view makes it easy to express a large class of graph problems efficiently. We will list all *relevant interfaces* of the **Spargel API** to implement and walk through an **example Spargel program**.
+
+* This will be replaced by the TOC
+{:toc}
+
+Spargel API
+-----------
+
+The Spargel API is part of the *addons* Maven project. All relevant classes are located in the *org.apache.flink.spargel.java* package.
+
+Add the following dependency to your `pom.xml` to use the Spargel.
+
+~~~xml
+<dependency>
+	<groupId>org.apache.flink</groupId>
+	<artifactId>flink-spargel</artifactId>
+	<version>{{site.version}}</version>
+</dependency>
+~~~
+
+Extend **VertexUpdateFunction&lt;***VertexKeyType*, *VertexValueType*, *MessageType***&gt;** to implement your *custom vertex update logic*.
+
+Extend **MessagingFunction&lt;***VertexKeyType*, *VertexValueType*, *MessageType*, *EdgeValueType***&gt;** to implement your *custom message logic*.
+
+Create a **SpargelIteration** operator to include Spargel in your data flow.
+
+Example: Propagate Minimum Vertex ID in Graph
+---------------------------------------------
+
+The Spargel operator **SpargelIteration** includes Spargel graph processing into your data flow. As usual, it can be combined with other operators like *map*, *reduce*, *join*, etc.
+
+~~~java
+FileDataSource vertices = new FileDataSource(...);
+FileDataSource edges = new FileDataSource(...);
+
+SpargelIteration iteration = new SpargelIteration(new MinMessager(), new MinNeighborUpdater());
+iteration.setVertexInput(vertices);
+iteration.setEdgesInput(edges);
+iteration.setNumberOfIterations(maxIterations);
+
+FileDataSink result = new FileDataSink(...);
+result.setInput(iteration.getOutput());
+
+new Plan(result);
+~~~
+
+Besides the **program logic** of vertex updates in *MinNeighborUpdater* and messages in *MinMessager*, you have to specify the **initial vertex** and **edge input**. Every vertex has a **key** and **value**. In each superstep, it **receives messages** from other vertices and updates its state:
+
+  - **Vertex** input: **(id**: *VertexKeyType*, **value**: *VertexValueType***)**
+  - **Edge** input: **(source**: *VertexKeyType*, **target**: *VertexKeyType*[, **value**: *EdgeValueType*])
+
+For our example, we set the vertex ID as both *id and value* (initial minimum) and *leave out the edge values* as we don't need them:
+
+<p class="text-center">
+    <img alt="Spargel Example Input" width="75%" src="fig/spargel_example_input.png" />
+</p>
+
+In order to **propagate the minimum vertex ID**, we iterate over all received messages (which contain the neighboring IDs) and update our value, if we found a new minimum:
+
+~~~java
+public class MinNeighborUpdater extends VertexUpdateFunction<IntValue, IntValue, IntValue> {
+	
+	@Override
+	public void updateVertex(IntValue id, IntValue currentMin, Iterator<IntValue> messages) {
+		int min = Integer.MAX_VALUE;
+
+		// iterate over all received messages
+		while (messages.hasNext()) {
+			int next = messages.next().getValue();
+			min = next < min ? next : min;
+		}
+
+		// update vertex value, if new minimum
+		if (min < currentMin.getValue()) {
+			setNewVertexValue(new IntValue(min));
+		}
+	}
+}
+~~~
+
+The **messages in each superstep** consist of the **current minimum ID** seen by the vertex:
+
+~~~java
+public class MinMessager extends MessagingFunction<IntValue, IntValue, IntValue, NullValue> {
+	
+	@Override
+	public void sendMessages(IntValue id, IntValue currentMin) {
+		// send current minimum to neighbors
+		sendMessageToAllNeighbors(currentMin);
+    }
+}
+~~~
+
+The **API-provided method** `sendMessageToAllNeighbors(MessageType)` sends the message to all neighboring vertices. It is also possible to address specific vertices with `sendMessageTo(VertexKeyType, MessageType)`.
+
+If the value of a vertex does not change during a superstep, it will **not send** any messages in the superstep. This allows to do incremental updates to the **hot (changing) parts** of the graph, while leaving **cold (steady) parts** untouched.
+
+The computation **terminates** after a specified *maximum number of supersteps* **-OR-** the *vertex states stop changing*.
+
+<p class="text-center">
+    <img alt="Spargel Example" width="75%" src="fig/spargel_example.png" />
+</p>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/libs/table.md
----------------------------------------------------------------------
diff --git a/docs/libs/table.md b/docs/libs/table.md
new file mode 100644
index 0000000..bcd2cb1
--- /dev/null
+++ b/docs/libs/table.md
@@ -0,0 +1,127 @@
+---
+title: "Table API - Relational Queries"
+is_beta: true
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+**The Table API an experimental feature**
+
+Flink provides an API that allows specifying operations using SQL-like expressions. Instead of 
+manipulating `DataSet` or `DataStream` you work with `Table` on which relational operations can
+be performed. 
+
+The following dependency must be added to your project when using the Table API:
+
+{% highlight xml %}
+<dependency>
+  <groupId>org.apache.flink</groupId>
+  <artifactId>flink-table</artifactId>
+  <version>{{site.version }}</version>
+</dependency>
+{% endhighlight %}
+
+## Scala Table API
+ 
+The Table API can be enabled by importing `org.apache.flink.api.scala.table._`.  This enables
+implicit conversions that allow
+converting a DataSet or DataStream to a Table. This example shows how a DataSet can
+be converted, how relational queries can be specified and how a Table can be
+converted back to a DataSet:
+
+{% highlight scala %}
+import org.apache.flink.api.scala._
+import org.apache.flink.api.scala.table._ 
+
+case class WC(word: String, count: Int)
+val input = env.fromElements(WC("hello", 1), WC("hello", 1), WC("ciao", 1))
+val expr = input.toTable
+val result = expr.groupBy('word).select('word, 'count.sum as 'count).toSet[WC]
+{% endhighlight %}
+
+The expression DSL uses Scala symbols to refer to field names and we use code generation to
+transform expressions to efficient runtime code. Please note that the conversion to and from
+Tables only works when using Scala case classes or Flink POJOs. Please check out
+the [programming guide](programming_guide.html) to learn the requirements for a class to be 
+considered a POJO.
+ 
+This is another example that shows how you
+can join to Tables:
+
+{% highlight scala %}
+case class MyResult(a: String, d: Int)
+
+val input1 = env.fromElements(...).toTable('a, 'b)
+val input2 = env.fromElements(...).toTable('c, 'd)
+val joined = input1.join(input2).where("b = a && d > 42").select("a, d").toSet[MyResult]
+{% endhighlight %}
+
+Notice, how a DataSet can be converted to a Table by using `as` and specifying new
+names for the fields. This can also be used to disambiguate fields before a join operation. Also,
+in this example we see that you can also use Strings to specify relational expressions.
+
+Please refer to the Scaladoc (and Javadoc) for a full list of supported operations and a
+description of the expression syntax. 
+
+## Java Table API
+
+When using Java, Tables can be converted to and from DataSet and DataStream using `TableEnvironment`.
+This example is equivalent to the above Scala Example:
+
+{% highlight java %}
+
+public class WC {
+
+  public WC(String word, int count) {
+    this.word = word; this.count = count;
+  }
+
+  public WC() {} // empty constructor to satisfy POJO requirements
+
+  public String word;
+  public int count;
+}
+
+...
+
+ExecutionEnvironment env = ExecutionEnvironment.createCollectionsEnvironment();
+TableEnvironment tableEnv = new TableEnvironment();
+
+DataSet<WC> input = env.fromElements(
+        new WC("Hello", 1),
+        new WC("Ciao", 1),
+        new WC("Hello", 1));
+
+Table table = tableEnv.toTable(input);
+
+Table filtered = table
+        .groupBy("word")
+        .select("word.count as count, word")
+        .filter("count = 2");
+
+DataSet<WC> result = tableEnv.toSet(filtered, WC.class);
+{% endhighlight %}
+
+When using Java, the embedded DSL for specifying expressions cannot be used. Only String expressions
+are supported. They support exactly the same feature set as the expression DSL.
+
+Please refer to the Javadoc for a full list of supported operations and a description of the
+expression syntax. 
+
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/local_execution.md
----------------------------------------------------------------------
diff --git a/docs/local_execution.md b/docs/local_execution.md
deleted file mode 100644
index 8e7ecc4..0000000
--- a/docs/local_execution.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-title:  "Local Execution"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-## Local Execution
-
-Flink can run on a single machine, even in a single Java Virtual Machine. This allows users to test and debug Flink programs locally. This section gives an overview of the local execution mechanisms.
-
-The local environments and executors allow you to run Flink programs in a local Java Virtual Machine, or with within any JVM as part of existing programs. Most examples can be launched locally by simply hitting the "Run" button of your IDE.
-
-
-There are two different kinds of local execution supported in Flink. The `LocalExecutionEnvironment` is starting the full Flink runtime, including a JobManager and a TaskManager. These include memory management and all the internal algorithms that are executed in the cluster mode.
-
-The `CollectionEnvironment` is executing the Flink program on Java collections. This mode will not start the full Flink runtime, so the execution is very low-overhead and lightweight. For example a `DataSet.map()`-transformation will be executed by applying the `map()` function to all elements in a Java list.
-
-
-## Debugging
-
-If you are running Flink programs locally, you can also debug your program like any other Java program. You can either use `System.out.println()` to write out some internal variables or you can use the debugger. It is possible to set breakpoints within `map()`, `reduce()` and all the other methods.
-Please also refer to the [debugging section](programming_guide.html#debugging) in the Java API documentation for a guide to testing and local debugging utilities in the Java API.
-
-## Maven Dependency
-
-If you are developing your program in a Maven project, you have to add the `flink-clients` module using this dependency:
-
-~~~xml
-<dependency>
-  <groupId>org.apache.flink</groupId>
-  <artifactId>flink-clients</artifactId>
-  <version>{{site.FLINK_VERSION_SHORT}}</version>
-</dependency>
-~~~
-
-## Local Environment
-
-The `LocalEnvironment` is a handle to local execution for Flink programs. Use it to run a program within a local JVM - standalone or embedded in other programs.
-
-The local environment is instantiated via the method `ExecutionEnvironment.createLocalEnvironment()`. By default, it will use as many local threads for execution as your machine has CPU cores (hardware contexts). You can alternatively specify the desired parallelism. The local environment can be configured to log to the console using `enableLogging()`/`disableLogging()`.
-
-In most cases, calling `ExecutionEnvironment.getExecutionEnvironment()` is the even better way to go. That method returns a `LocalEnvironment` when the program is started locally (outside the command line interface), and it returns a pre-configured environment for cluster execution, when the program is invoked by the [command line interface](cli.html).
-
-~~~java
-public static void main(String[] args) throws Exception {
-    ExecutionEnvironment env = ExecutionEnvironment.createLocalEnvironment();
-
-    DataSet<String> data = env.readTextFile("file:///path/to/file");
-
-    data
-        .filter(new FilterFunction<String>() {
-            public boolean filter(String value) {
-                return value.startsWith("http://");
-            }
-        })
-        .writeAsText("file:///path/to/result");
-
-    JobExecutionResult res = env.execute();
-}
-~~~
-
-The `JobExecutionResult` object, which is returned after the execution finished, contains the program runtime and the accumulator results.
-
-The `LocalEnvironment` allows also to pass custom configuration values to Flink.
-
-~~~java
-Configuration conf = new Configuration();
-conf.setFloat(ConfigConstants.TASK_MANAGER_MEMORY_FRACTION_KEY, 0.5f);
-final ExecutionEnvironment env = ExecutionEnvironment.createLocalEnvironment(conf);
-~~~
-
-*Note:* The local execution environments do not start any web frontend to monitor the execution.
-
-## Collection Environment
-
-The execution on Java Collections using the `CollectionEnvironment` is a low-overhead approach for executing Flink programs. Typical use-cases for this mode are automated tests, debugging and code re-use.
-
-Users can use algorithms implemented for batch processing also for cases that are more interactive. A slightly changed variant of a Flink program could be used in a Java Application Server for processing incoming requests.
-
-**Skeleton for Collection-based execution**
-
-~~~java
-public static void main(String[] args) throws Exception {
-    // initialize a new Collection-based execution environment
-    final ExecutionEnvironment env = new CollectionEnvironment();
-    
-    DataSet<User> users = env.fromCollection( /* get elements from a Java Collection */);
-
-    /* Data Set transformations ... */
-
-    // retrieve the resulting Tuple2 elements into a ArrayList.
-    Collection<...> result = new ArrayList<...>();
-    resultDataSet.output(new LocalCollectionOutputFormat<...>(result));
-    
-    // kick off execution.
-    env.execute();
-    
-    // Do some work with the resulting ArrayList (=Collection).
-    for(... t : result) {
-        System.err.println("Result = "+t);
-    }
-}
-~~~
-
-The `flink-java-examples` module contains a full example, called `CollectionExecutionExample`.
-
-Please note that the execution of the collection-based Flink programs is only possible on small data, which fits into the JVM heap. The execution on collections is not multi-threaded, only one thread is used.

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/local_setup.md
----------------------------------------------------------------------
diff --git a/docs/local_setup.md b/docs/local_setup.md
deleted file mode 100644
index a293586..0000000
--- a/docs/local_setup.md
+++ /dev/null
@@ -1,137 +0,0 @@
----
-title:  "Local Setup"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-This documentation is intended to provide instructions on how to run Flink locally on a single machine.
-
-## Download
-
-Go to the [downloads page]({{site.baseurl}}/downloads.html) and get the ready to run package. If you want to interact with Hadoop (e.g. HDFS or HBase), make sure to pick the Flink package **matching your Hadoop version**. When in doubt or you plan to just work with the local file system pick the package for Hadoop 1.2.x.
-
-## Requirements
-
-Flink runs on **Linux**, **Mac OS X** and **Windows**. The only requirement for a local setup is **Java 1.6.x** or higher. The following manual assumes a *UNIX-like environment*, for Windows see [Flink on Windows](#flink-on-windows).
-
-You can check the correct installation of Java by issuing the following command:
-
-~~~bash
-java -version
-~~~
-
-The command should output something comparable to the following:
-
-~~~bash
-java version "1.6.0_22"
-Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
-Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)
-~~~
-
-## Configuration
-
-**For local mode Flink is ready to go out of the box and you don't need to change the default configuration.**
-
-The out of the box configuration will use your default Java installation. You can manually set the environment variable `JAVA_HOME` or the configuration key `env.java.home` in `conf/flink-conf.yaml` if you want to manually override the Java runtime to use. Consult the [configuration page](config.html) for further details about configuring Flink.
-
-## Starting Flink
-
-**You are now ready to start Flink.** Unpack the downloaded archive and change to the newly created `flink` directory. There you can start Flink in local mode:
-
-~~~bash
-$ tar xzf flink-*.tgz
-$ cd flink
-$ bin/start-local.sh
-Starting job manager
-~~~
-
-You can check that the system is running by checking the log files in the `logs` directory:
-
-~~~bash
-$ tail log/flink-*-jobmanager-*.log
-INFO ... - Initializing memory manager with 409 megabytes of memory
-INFO ... - Trying to load org.apache.flinknephele.jobmanager.scheduler.local.LocalScheduler as scheduler
-INFO ... - Setting up web info server, using web-root directory ...
-INFO ... - Web info server will display information about nephele job-manager on localhost, port 8081.
-INFO ... - Starting web info server for JobManager on port 8081
-~~~
-
-The JobManager will also start a web frontend on port 8081, which you can check with your browser at `http://localhost:8081`.
-
-## Flink on Windows
-
-If you want to run Flink on Windows you need to download, unpack and configure the Flink archive as mentioned above. After that you can either use the **Windows Batch** file (`.bat`) or use **Cygwin**  to run the Flink Jobmanager.
-
-### Starting with Windows Batch Files
-
-To start Flink in local mode from the *Windows Batch*, open the command window, navigate to the `bin/` directory of Flink and run `start-local.bat`.
-
-Note: The ``bin`` folder of your Java Runtime Environment must be included in Window's ``%PATH%`` variable. Follow this [guide](http://www.java.com/en/download/help/path.xml) to add Java to the ``%PATH%`` variable.
-
-~~~bash
-$ cd flink
-$ cd bin
-$ start-local.bat
-Starting Flink job manager. Webinterface by default on http://localhost:8081/.
-Do not close this batch window. Stop job manager by pressing Ctrl+C.
-~~~
-
-After that, you need to open a second terminal to run jobs using `flink.bat`.
-
-### Starting with Cygwin and Unix Scripts
-
-With *Cygwin* you need to start the Cygwin Terminal, navigate to your Flink directory and run the `start-local.sh` script:
-
-~~~bash
-$ cd flink
-$ bin/start-local.sh
-Starting Nephele job manager
-~~~
-
-### Installing Flink from Git
-
-If you are installing Flink from the git repository and you are using the Windows git shell, Cygwin can produce a failure similiar to this one:
-
-~~~bash
-c:/flink/bin/start-local.sh: line 30: $'\r': command not found
-~~~
-
-This error occurs, because git is automatically transforming UNIX line endings to Windows style line endings when running in Windows. The problem is, that Cygwin can only deal with UNIX style line endings. The solution is to adjust the Cygwin settings to deal with the correct line endings by following these three steps:
-
-1. Start a Cygwin shell.
-
-2. Determine your home directory by entering
-
-~~~bash
-cd; pwd
-~~~
-
-It will return a path under the Cygwin root path.
-
-2.  Using NotePad, WordPad or a different text editor open the file `.bash_profile` in the home directory and append the following: (If the file does not exist you have to create it)
-
-~~~bash
-export SHELLOPTS
-set -o igncr
-~~~
-
-Save the file and open a new bash shell.

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/ml/alternating_least_squares.md
----------------------------------------------------------------------
diff --git a/docs/ml/alternating_least_squares.md b/docs/ml/alternating_least_squares.md
deleted file mode 100644
index 7a4a5d5..0000000
--- a/docs/ml/alternating_least_squares.md
+++ /dev/null
@@ -1,157 +0,0 @@
----
-mathjax: include
-title: Alternating Least Squares
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-## Description
-
-The alternating least squares (ALS) algorithm factorizes a given matrix $R$ into two factors $U$ and $V$ such that $R \approx U^TV$.
-The unknown row dimension is given as a parameter to the algorithm and is called latent factors.
-Since matrix factorization can be used in the context of recommendation, the matrices $U$ and $V$ can be called user and item matrix, respectively.
-The $i$th column of the user matrix is denoted by $u_i$ and the $i$th column of the item matrix is $v_i$.
-The matrix $R$ can be called the ratings matrix with $$(R)_{i,j} = r_{i,j}$$.
-
-In order to find the user and item matrix, the following problem is solved:
-
-$$\arg\min_{U,V} \sum_{\{i,j\mid r_{i,j} \not= 0\}} \left(r_{i,j} - u_{i}^Tv_{j}\right)^2 + 
-\lambda \left(\sum_{i} n_{u_i} \left\lVert u_i \right\rVert^2 + \sum_{j} n_{v_j} \left\lVert v_j \right\rVert^2 \right)$$
-
-with $\lambda$ being the regularization factor, $$n_{u_i}$$ being the number of items the user $i$ has rated and $$n_{v_j}$$ being the number of times the item $j$ has been rated.
-This regularization scheme to avoid overfitting is called weighted-$\lambda$-regularization.
-Details can be found in the work of [Zhou et al.](http://dx.doi.org/10.1007/978-3-540-68880-8_32).
-
-By fixing one of the matrices $U$ or $V$, we obtain a quadratic form which can be solved directly.
-The solution of the modified problem is guaranteed to monotonically decrease the overall cost function.
-By applying this step alternately to the matrices $U$ and $V$, we can iteratively improve the matrix factorization.
-
-The matrix $R$ is given in its sparse representation as a tuple of $(i, j, r)$ where $i$ denotes the row index, $j$ the column index and $r$ is the matrix value at position $(i,j)$.
-
-
-## Parameters
-
-The alternating least squares implementation can be controlled by the following parameters:
-
-   <table class="table table-bordered">
-    <thead>
-      <tr>
-        <th class="text-left" style="width: 20%">Parameters</th>
-        <th class="text-center">Description</th>
-      </tr>
-    </thead>
-
-    <tbody>
-      <tr>
-        <td><strong>NumFactors</strong></td>
-        <td>
-          <p>
-            The number of latent factors to use for the underlying model.
-            It is equivalent to the dimension of the calculated user and item vectors.
-            (Default value: <strong>10</strong>)
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td><strong>Lambda</strong></td>
-        <td>
-          <p>
-            Regularization factor. Tune this value in order to avoid overfitting or poor performance due to strong generalization.
-            (Default value: <strong>1</strong>)
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td><strong>Iterations</strong></td>
-        <td>
-          <p>
-            The maximum number of iterations.
-            (Default value: <strong>10</strong>)
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td><strong>Blocks</strong></td>
-        <td>
-          <p>
-            The number of blocks into which the user and item matrix are grouped.
-            The fewer blocks one uses, the less data is sent redundantly. 
-            However, bigger blocks entail bigger update messages which have to be stored on the heap. 
-            If the algorithm fails because of an OutOfMemoryException, then try to increase the number of blocks. 
-            (Default value: '''None''')
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td><strong>Seed</strong></td>
-        <td>
-          <p>
-            Random seed used to generate the initial item matrix for the algorithm.
-            (Default value: <strong>0</strong>)
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td><strong>TemporaryPath</strong></td>
-        <td>
-          <p>
-            Path to a temporary directory into which intermediate results are stored. 
-            If this value is set, then the algorithm is split into two preprocessing steps, the ALS iteration  and a post-processing step which calculates a last ALS half-step. 
-            The preprocessing steps calculate the <code>OutBlockInformation</code> and <code>InBlockInformation</code> for the given rating matrix. 
-            The results of the individual steps are stored in the specified directory.
-            By splitting the algorithm into multiple smaller steps, Flink does not have to split the available memory amongst too many operators. 
-            This allows the system to process bigger individual messages and improves the overall performance.
-            (Default value: <strong>None</strong>)
-          </p>
-        </td>
-      </tr>
-    </tbody>
-  </table>
-
-## Examples
-
-{% highlight scala %}
-// Read input data set from a csv file
-val inputDS: DataSet[(Int, Int, Double)] = env.readCsvFile[(Int, Int, Double)](
-  pathToTrainingFile)
-
-// Setup the ALS learner
-val als = ALS()
-.setIterations(10)
-.setNumFactors(10)
-.setBlocks(100)
-.setTemporaryPath("hdfs://tempPath")
-
-// Set the other parameters via a parameter map
-val parameters = ParameterMap()
-.add(ALS.Lambda, 0.9)
-.add(ALS.Seed, 42)
-
-// Calculate the factorization
-val factorization = als.fit(inputDS, parameters)
-
-// Read the testing data set from a csv file
-val testingDS: DataSet[(Int, Int)] = env.readCsvFile[(Int, Int)](pathToData)
-
-// Calculate the ratings according to the matrix factorization
-val predictedRatings = factorization.transform(testingDS)
-{% endhighlight %}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/ml/cocoa.md
----------------------------------------------------------------------
diff --git a/docs/ml/cocoa.md b/docs/ml/cocoa.md
deleted file mode 100644
index 0bf8d67..0000000
--- a/docs/ml/cocoa.md
+++ /dev/null
@@ -1,164 +0,0 @@
----
-mathjax: include
-title: Communication efficient distributed dual coordinate ascent (CoCoA)
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-## Description
-
-Implements the communication-efficient distributed dual coordinate ascent algorithm with hinge-loss function. 
-The algorithm can be used to train a SVM with soft-margin.
-The algorithm solves the following minimization problem:
-  
-$$\min_{\mathbf{w} \in \mathbb{R}^d} \frac{\lambda}{2} \left\lVert \mathbf{w} \right\rVert^2 + \frac{1}{n} \sum_{i=1}^n l_{i}\left(\mathbf{w}^T\mathbf{x}_i\right)$$
- 
-with $\mathbf{w}$ being the weight vector, $\lambda$ being the regularization constant, 
-$$\mathbf{x}_i \in \mathbb{R}^d$$ being the data points and $$l_{i}$$ being the convex loss 
-functions, which can also depend on the labels $$y_{i} \in \mathbb{R}$$.
-In the current implementation the regularizer is the $\ell_2$-norm and the loss functions are the hinge-loss functions:
-  
-  $$l_{i} = \max\left(0, 1 - y_{i} \mathbf{w}^T\mathbf{x}_i \right)$$
-
-With these choices, the problem definition is equivalent to a SVM with soft-margin.
-Thus, the algorithm allows us to train a SVM with soft-margin.
-
-The minimization problem is solved by applying stochastic dual coordinate ascent (SDCA).
-In order to make the algorithm efficient in a distributed setting, the CoCoA algorithm calculates 
-several iterations of SDCA locally on a data block before merging the local updates into a
-valid global state.
-This state is redistributed to the different data partitions where the next round of local SDCA 
-iterations is then executed.
-The number of outer iterations and local SDCA iterations control the overall network costs, because 
-there is only network communication required for each outer iteration.
-The local SDCA iterations are embarrassingly parallel once the individual data partitions have been 
-distributed across the cluster.
-
-The implementation of this algorithm is based on the work of 
-[Jaggi et al.](http://arxiv.org/abs/1409.1458 here)
-
-## Parameters
-
-The CoCoA implementation can be controlled by the following parameters:
-
-   <table class="table table-bordered">
-    <thead>
-      <tr>
-        <th class="text-left" style="width: 20%">Parameters</th>
-        <th class="text-center">Description</th>
-      </tr>
-    </thead>
-
-    <tbody>
-      <tr>
-        <td><strong>Blocks</strong></td>
-        <td>
-          <p>
-            Sets the number of blocks into which the input data will be split. 
-            On each block the local stochastic dual coordinate ascent method is executed. 
-            This number should be set at least to the degree of parallelism. 
-            If no value is specified, then the parallelism of the input DataSet is used as the number of blocks. 
-            (Default value: <strong>None</strong>)
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td><strong>Iterations</strong></td>
-        <td>
-          <p>
-            Defines the maximum number of iterations of the outer loop method. 
-            In other words, it defines how often the SDCA method is applied to the blocked data. 
-            After each iteration, the locally computed weight vector updates have to be reduced to update the global weight vector value.
-            The new weight vector is broadcast to all SDCA tasks at the beginning of each iteration.
-            (Default value: <strong>10</strong>)
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td><strong>LocalIterations</strong></td>
-        <td>
-          <p>
-            Defines the maximum number of SDCA iterations. 
-            In other words, it defines how many data points are drawn from each local data block to calculate the stochastic dual coordinate ascent.
-            (Default value: <strong>10</strong>)
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td><strong>Regularization</strong></td>
-        <td>
-          <p>
-            Defines the regularization constant of the CoCoA algorithm. 
-            The higher the value, the smaller will the 2-norm of the weight vector be. 
-            In case of a SVM with hinge loss this means that the SVM margin will be wider even though it might contain some false classifications.
-            (Default value: <strong>1.0</strong>)
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td><strong>Stepsize</strong></td>
-        <td>
-          <p>
-            Defines the initial step size for the updates of the weight vector. 
-            The larger the step size is, the larger will be the contribution of the weight vector updates to the next weight vector value. 
-            The effective scaling of the updates is $\frac{stepsize}{blocks}$.
-            This value has to be tuned in case that the algorithm becomes instable. 
-            (Default value: <strong>1.0</strong>)
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td><strong>Seed</strong></td>
-        <td>
-          <p>
-            Defines the seed to initialize the random number generator. 
-            The seed directly controls which data points are chosen for the SDCA method. 
-            (Default value: <strong>0</strong>)
-          </p>
-        </td>
-      </tr>
-    </tbody>
-  </table>
-
-## Examples
-
-{% highlight scala %}
-// Read the training data set
-val trainingDS: DataSet[LabeledVector] = env.readSVMFile(pathToTrainingFile)
-
-// Create the CoCoA learner
-val cocoa = CoCoA()
-.setBlocks(10)
-.setIterations(10)
-.setLocalIterations(10)
-.setRegularization(0.5)
-.setStepsize(0.5)
-
-// Learn the SVM model
-val svm = cocoa.fit(trainingDS)
-
-// Read the testing data set
-val testingDS: DataSet[Vector] = env.readVectorFile(pathToTestingFile)
-
-// Calculate the predictions for the testing data set
-val predictionDS: DataSet[LabeledVector] = model.transform(testingDS)
-{% endhighlight %}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/ml/multiple_linear_regression.md
----------------------------------------------------------------------
diff --git a/docs/ml/multiple_linear_regression.md b/docs/ml/multiple_linear_regression.md
deleted file mode 100644
index 840e899..0000000
--- a/docs/ml/multiple_linear_regression.md
+++ /dev/null
@@ -1,124 +0,0 @@
----
-mathjax: include
-title: "Multiple linear regression"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-## Description
-
- Multiple linear regression tries to find a linear function which best fits the provided input data.
- Given a set of input data with its value $(\mathbf{x}, y)$, the multiple linear regression finds
- a vector $\mathbf{w}$ such that the sum of the squared residuals is minimized:
-
- $$ S(\mathbf{w}) = \sum_{i=1} \left(y - \mathbf{w}^T\mathbf{x_i} \right)^2$$
-
- Written in matrix notation, we obtain the following formulation:
-
- $$\mathbf{w}^* = \arg \min_{\mathbf{w}} (\mathbf{y} - X\mathbf{w})^2$$
-
- This problem has a closed form solution which is given by:
-
-  $$\mathbf{w}^* = \left(X^TX\right)^{-1}X^T\mathbf{y}$$
-
-  However, in cases where the input data set is so huge that a complete parse over the whole data
-  set is prohibitive, one can apply stochastic gradient descent (SGD) to approximate the solution.
-  The SGD first calculates for a random subset of the input data set the gradients. The gradient
-  for a given point $\mathbf{x}_i$ is given by:
-
-  $$\nabla_{\mathbf{w}} S(\mathbf{w}, \mathbf{x_i}) = 2\left(\mathbf{w}^T\mathbf{x_i} -
-    y\right)\mathbf{x_i}$$
-
-  The gradients are averaged and scaled. The scaling is defined by $\gamma = \frac{s}{\sqrt{j}}$
-  with $s$ being the initial step size and $j$ being the current iteration number. The resulting gradient is subtracted from the
-  current weight vector giving the new weight vector for the next iteration:
-
-  $$\mathbf{w}_{t+1} = \mathbf{w}_t - \gamma \frac{1}{n}\sum_{i=1}^n \nabla_{\mathbf{w}} S(\mathbf{w}, \mathbf{x_i})$$
-
-  The multiple linear regression algorithm computes either a fixed number of SGD iterations or terminates based on a dynamic convergence criterion.
-  The convergence criterion is the relative change in the sum of squared residuals:
-
-  $$\frac{S_{k-1} - S_k}{S_{k-1}} < \rho$$
-
-## Parameters
-
-  The multiple linear regression implementation can be controlled by the following parameters:
-  
-   <table class="table table-bordered">
-    <thead>
-      <tr>
-        <th class="text-left" style="width: 20%">Parameters</th>
-        <th class="text-center">Description</th>
-      </tr>
-    </thead>
-
-    <tbody>
-      <tr>
-        <td><strong>Iterations</strong></td>
-        <td>
-          <p>
-            The maximum number of iterations. (Default value: <strong>10</strong>)
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td><strong>Stepsize</strong></td>
-        <td>
-          <p>
-            Initial step size for the gradient descent method.
-            This value controls how far the gradient descent method moves in the opposite direction of the gradient.
-            Tuning this parameter might be crucial to make it stable and to obtain a better performance. 
-            (Default value: <strong>0.1</strong>)
-          </p>
-        </td>
-      </tr>
-      <tr>
-        <td><strong>ConvergenceThreshold</strong></td>
-        <td>
-          <p>
-            Threshold for relative change of the sum of squared residuals until the iteration is stopped.
-            (Default value: <strong>None</strong>)
-          </p>
-        </td>
-      </tr>
-    </tbody>
-  </table>
-
-## Examples
-
-{% highlight scala %}
-// Create multiple linear regression learner
-val mlr = MultipleLinearRegression()
-.setIterations(10)
-.setStepsize(0.5)
-.setConvergenceThreshold(0.001)
-
-// Obtain training and testing data set
-val trainingDS: DataSet[LabeledVector] = ...
-val testingDS: DataSet[Vector] = ...
-
-// Fit the linear model to the provided data
-val model = mlr.fit(trainingDS)
-
-// Calculate the predictions for the test data
-val predictions = model.transform(testingDS)
-{% endhighlight %}

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/ml/polynomial_base_feature_mapper.md
----------------------------------------------------------------------
diff --git a/docs/ml/polynomial_base_feature_mapper.md b/docs/ml/polynomial_base_feature_mapper.md
deleted file mode 100644
index 2964f04..0000000
--- a/docs/ml/polynomial_base_feature_mapper.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-mathjax: include
-title: Polynomial Base Feature Mapper
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-## Description
-
-The polynomial base feature mapper maps a vector into the polynomial feature space of degree $d$.
-The dimension of the input vector determines the number of polynomial factors whose values are the respective vector entries.
-Given a vector $(x, y, z, \ldots)^T$ the resulting feature vector looks like:
-
-$$\left(x, y, z, x^2, xy, y^2, yz, z^2, x^3, x^2y, x^2z, xy^2, xyz, xz^2, y^3, \ldots\right)^T$$
-
-Flink's implementation orders the polynomials in decreasing order of their degree.
-
-Given the vector $\left(3,2\right)^T$, the polynomial base feature vector of degree 3 would look like
- 
- $$\left(3^3, 3^2\cdot2, 3\cdot2^2, 2^3, 3^2, 3\cdot2, 2^2, 3, 2\right)^T$$
-
-This transformer can be prepended to all `Transformer` and `Learner` implementations which expect an input of type `LabeledVector`.
-
-## Parameters
-
-The polynomial base feature mapper can be controlled by the following parameters:
-
-<table class="table table-bordered">
-    <thead>
-      <tr>
-        <th class="text-left" style="width: 20%">Parameters</th>
-        <th class="text-center">Description</th>
-      </tr>
-    </thead>
-
-    <tbody>
-      <tr>
-        <td><strong>Degree</strong></td>
-        <td>
-          <p>
-            The maximum polynomial degree. 
-            (Default value: <strong>10</strong>)
-          </p>
-        </td>
-      </tr>
-    </tbody>
-  </table>
-
-## Examples
-
-{% highlight scala %}
-// Obtain the training data set
-val trainingDS: DataSet[LabeledVector] = ...
-
-// Setup polynomial base feature extractor of degree 3
-val polyBase = PolynomialBase()
-.setDegree(3)
-
-// Setup the multiple linear regression learner
-val mlr = MultipleLinearRegression()
-
-// Control the learner via the parameter map
-val parameters = ParameterMap()
-.add(MultipleLinearRegression.Iterations, 20)
-.add(MultipleLinearRegression.Stepsize, 0.5)
-
-// Create pipeline PolynomialBase -> MultipleLinearRegression
-val chained = polyBase.chain(mlr)
-
-// Learn the model
-val model = chained.fit(trainingDS)
-{% endhighlight %}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/ml/standard_scaler.md
----------------------------------------------------------------------
diff --git a/docs/ml/standard_scaler.md b/docs/ml/standard_scaler.md
deleted file mode 100644
index aae4620..0000000
--- a/docs/ml/standard_scaler.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-mathjax: include
-title: "Standard Scaler"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-* This will be replaced by the TOC
-{:toc}
-
-## Description
-
- The standard scaler scales the given data set, so that all features will have a user specified mean and variance. 
- In case the user does not provide a specific mean and standard deviation, the standard scaler transforms the features of the input data set to have mean equal to 0 and standard deviation equal to 1.
- Given a set of input data $x_{1}, x_{2},... x_{n}$, with mean: 
- 
- $$\bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_{i}$$ 
- 
- and standard deviation: 
- 
- $$\sigma_{x}=\sqrt{ \frac{1}{n} \sum_{i=1}^{n}(x_{i}-\bar{x})^{2}}$$
-
-The scaled data set $z_{1}, z_{2},...,z_{n}$ will be:
-
- $$z_{i}= std \left (\frac{x_{i} - \bar{x}  }{\sigma_{x}}\right ) + mean$$
-
-where $\textit{std}$ and $\textit{mean}$ are the user specified values for the standard deviation and mean.
-
-## Parameters
-
-The standard scaler implementation can be controlled by the following two parameters:
-
- <table class="table table-bordered">
-  <thead>
-    <tr>
-      <th class="text-left" style="width: 20%">Parameters</th>
-      <th class="text-center">Description</th>
-    </tr>
-  </thead>
-
-  <tbody>
-    <tr>
-      <td><strong>Mean</strong></td>
-      <td>
-        <p>
-          The mean of the scaled data set. (Default value: <strong>0.0</strong>)
-        </p>
-      </td>
-    </tr>
-    <tr>
-      <td><strong>Std</strong></td>
-      <td>
-        <p>
-          The standard deviation of the scaled data set. (Default value: <strong>1.0</strong>)
-        </p>
-      </td>
-    </tr>
-  </tbody>
-</table>
-
-## Examples
-
-{% highlight scala %}
-// Create standard scaler transformer
-val scaler = StandardScaler()
-.setMean(10.0)
-.setStd(2.0)
-
-// Obtain data set to be scaled
-val dataSet: DataSet[Vector] = ...
-
-// Scale the provided data set to have mean=10.0 and std=2.0
-val scaledDS = scaler.transform(dataSet)
-{% endhighlight %}

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/css/codetabs.css
----------------------------------------------------------------------
diff --git a/docs/page/css/codetabs.css b/docs/page/css/codetabs.css
new file mode 100644
index 0000000..420d559
--- /dev/null
+++ b/docs/page/css/codetabs.css
@@ -0,0 +1,62 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+**/
+
+/**
+ * Make dropdown menus in nav bars show on hover instead of click
+ * using solution at http://stackoverflow.com/questions/8878033/how-
+ * to-make-twitter-bootstrap-menu-dropdown-on-hover-rather-than-click
+ **/
+ul.nav li.dropdown:hover ul.dropdown-menu{
+  display: block;
+}
+
+a.menu:after, .dropdown-toggle:after {
+  content: none;
+}
+
+/** Make the submenus open on hover on the parent menu item */
+ul.nav li.dropdown ul.dropdown-menu li.dropdown-submenu:hover ul.dropdown-menu {
+  display: block;
+}
+
+/** Make the submenus be invisible until the parent menu item is hovered upon */
+ul.nav li.dropdown ul.dropdown-menu li.dropdown-submenu ul.dropdown-menu {
+  display: none;
+}
+
+/**
+ * Made the navigation bar buttons not grey out when clicked.
+ * Essentially making nav bar buttons not react to clicks, only hover events.
+ */
+.navbar .nav li.dropdown.open > .dropdown-toggle {
+  background-color: transparent;
+}
+
+/**
+ * Made the active tab caption blue. Otherwise the active tab is black, and inactive tab is blue.
+ * That looks weird. Changed the colors to active - blue, inactive - black, and
+ * no color change on hover.
+ */
+.nav-tabs > .active > a, .nav-tabs > .active > a:hover {
+  color: #08c;
+}
+
+.nav-tabs > li > a, .nav-tabs > li > a:hover {
+  color: #333;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/css/flink.css
----------------------------------------------------------------------
diff --git a/docs/page/css/flink.css b/docs/page/css/flink.css
new file mode 100644
index 0000000..2a32910
--- /dev/null
+++ b/docs/page/css/flink.css
@@ -0,0 +1,122 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+/*=============================================================================
+                         Navbar at the top of the page
+=============================================================================*/
+
+/* Padding at top because of the fixed navbar. */
+body {
+	padding-top: 70px;
+}
+
+/* Our logo. */
+.navbar-logo {
+	padding: 5px 15px 5px 15px;
+}
+.navbar-logo img {
+	height: 40px;
+}
+
+/* Links */
+.navbar-default .navbar-nav > li > a {
+	color: black;
+	font-weight: bold;
+}
+.navbar-default .navbar-nav > li > a:hover {
+	background: #E7E7E7;
+}
+
+.navbar-collapse .dropdown-header {
+	color: black;
+}
+
+.version {
+	display: block-inline;
+	font-size: 90%;
+}
+
+/*=============================================================================
+                        Navbar at the side of the page
+=============================================================================*/
+
+/* Move the side nav a little bit down to align with the main heading */
+#markdown-toc {
+	font-size: 90%;
+}
+
+/* Custom list styling */
+#markdown-toc, #markdown-toc ul {
+	list-style: none;
+	display: block;
+	position: relative;
+	padding-left: 0;
+	margin-bottom: 0;
+}
+
+/* All element */
+#markdown-toc li > a {
+	display: block;
+	padding: 5px 10px;
+	border: 1px solid #E5E5E5;
+	margin:-1px;
+}
+#markdown-toc li > a:hover,
+#markdown-toc li > a:focus {
+  text-decoration: none;
+  background-color: #eee;
+}
+
+/* 1st-level elements */
+#markdown-toc > li > a {
+	font-weight: bold;
+}
+
+/* 2nd-level element */
+#markdown-toc > li li > a {
+	padding-left: 20px; /* A little more indentation*/
+}
+
+/* >= 3rd-level element */
+#markdown-toc > li li li {
+	display: none; /* hide */
+}
+
+#markdown-toc li:last-child > a {
+	border-bottom: 1px solid #E5E5E5;
+}
+
+/*=============================================================================
+                                    Text
+=============================================================================*/
+
+h2, h3 {
+	padding-top: 1em;
+	padding-bottom: 5px;
+	border-bottom: 1px solid #E5E5E5;
+}
+
+
+code {
+	background: none;
+	color: black;
+}
+
+pre {
+	font-size: 85%;
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/css/syntax.css
----------------------------------------------------------------------
diff --git a/docs/page/css/syntax.css b/docs/page/css/syntax.css
new file mode 100644
index 0000000..ba3c0ba
--- /dev/null
+++ b/docs/page/css/syntax.css
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+**/
+
+.highlight  { background: #ffffff; }
+.highlight .c { color: #999988; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { font-weight: bold } /* Keyword */
+.highlight .o { font-weight: bold } /* Operator */
+.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
+.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #999999 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { font-weight: bold } /* Keyword.Constant */
+.highlight .kd { font-weight: bold } /* Keyword.Declaration */
+.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #009999 } /* Literal.Number */
+.highlight .s { color: #d14 } /* Literal.String */
+.highlight .na { color: #008080 } /* Name.Attribute */
+.highlight .nb { color: #0086B3 } /* Name.Builtin */
+.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
+.highlight .no { color: #008080 } /* Name.Constant */
+.highlight .ni { color: #800080 } /* Name.Entity */
+.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
+.highlight .nn { color: #555555 } /* Name.Namespace */
+.highlight .nt { color: #000080 } /* Name.Tag */
+.highlight .nv { color: #008080 } /* Name.Variable */
+.highlight .ow { font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #009999 } /* Literal.Number.Float */
+.highlight .mh { color: #009999 } /* Literal.Number.Hex */
+.highlight .mi { color: #009999 } /* Literal.Number.Integer */
+.highlight .mo { color: #009999 } /* Literal.Number.Oct */
+.highlight .sb { color: #d14 } /* Literal.String.Backtick */
+.highlight .sc { color: #d14 } /* Literal.String.Char */
+.highlight .sd { color: #d14 } /* Literal.String.Doc */
+.highlight .s2 { color: #d14 } /* Literal.String.Double */
+.highlight .se { color: #d14 } /* Literal.String.Escape */
+.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
+.highlight .si { color: #d14 } /* Literal.String.Interpol */
+.highlight .sx { color: #d14 } /* Literal.String.Other */
+.highlight .sr { color: #009926 } /* Literal.String.Regex */
+.highlight .s1 { color: #d14 } /* Literal.String.Single */
+.highlight .ss { color: #990073 } /* Literal.String.Symbol */
+.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #008080 } /* Name.Variable.Class */
+.highlight .vg { color: #008080 } /* Name.Variable.Global */
+.highlight .vi { color: #008080 } /* Name.Variable.Instance */
+.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/favicon.ico
----------------------------------------------------------------------
diff --git a/docs/page/favicon.ico b/docs/page/favicon.ico
new file mode 100644
index 0000000..34a467a
Binary files /dev/null and b/docs/page/favicon.ico differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/img/LICENSE.txt
----------------------------------------------------------------------
diff --git a/docs/page/img/LICENSE.txt b/docs/page/img/LICENSE.txt
new file mode 100644
index 0000000..35b8673
--- /dev/null
+++ b/docs/page/img/LICENSE.txt
@@ -0,0 +1,17 @@
+All image files in the folder and its subfolders are
+licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/img/navbar-brand-logo.jpg
----------------------------------------------------------------------
diff --git a/docs/page/img/navbar-brand-logo.jpg b/docs/page/img/navbar-brand-logo.jpg
new file mode 100644
index 0000000..5993ee8
Binary files /dev/null and b/docs/page/img/navbar-brand-logo.jpg differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/img/quickstart-example/compiler-webclient-new.png
----------------------------------------------------------------------
diff --git a/docs/page/img/quickstart-example/compiler-webclient-new.png b/docs/page/img/quickstart-example/compiler-webclient-new.png
new file mode 100644
index 0000000..e60689e
Binary files /dev/null and b/docs/page/img/quickstart-example/compiler-webclient-new.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/img/quickstart-example/jobmanager-running-new.png
----------------------------------------------------------------------
diff --git a/docs/page/img/quickstart-example/jobmanager-running-new.png b/docs/page/img/quickstart-example/jobmanager-running-new.png
new file mode 100644
index 0000000..6255022
Binary files /dev/null and b/docs/page/img/quickstart-example/jobmanager-running-new.png differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/page/img/quickstart-example/kmeans003.png
----------------------------------------------------------------------
diff --git a/docs/page/img/quickstart-example/kmeans003.png b/docs/page/img/quickstart-example/kmeans003.png
new file mode 100644
index 0000000..32f8dbb
Binary files /dev/null and b/docs/page/img/quickstart-example/kmeans003.png differ


[16/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/projects_dependencies.svg
----------------------------------------------------------------------
diff --git a/docs/img/projects_dependencies.svg b/docs/img/projects_dependencies.svg
deleted file mode 100644
index d537ab8..0000000
--- a/docs/img/projects_dependencies.svg
+++ /dev/null
@@ -1,586 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.0"
-   width="184.83mm"
-   height="182.98mm"
-   id="svg2985"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="Picture1.emf">
-  <metadata
-     id="metadata3185">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="640"
-     inkscape:window-height="480"
-     id="namedview3183"
-     showgrid="false"
-     inkscape:zoom="1.5284853"
-     inkscape:cx="327.45474"
-     inkscape:cy="324.17715"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg2985" />
-  <defs
-     id="defs2987" />
-  <g
-     id="g2989">
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 260.48364 21.380326   C 260.48364 18.510862 262.80922 16.185282 265.69744 16.185282   L 378.24423 16.185282   C 381.13245 16.185282 383.45803 18.510862 383.45803 21.380326   L 383.45803 42.216767   C 383.45803 45.086232 381.13245 47.411811 378.24423 47.411811   L 265.69744 47.411811   C 262.80922 47.411811 260.48364 45.086232 260.48364 42.216767   z"
-       id="path2991" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 260.48364 21.380326   C 260.48364 18.510862 262.80922 16.185282 265.69744 16.185282   L 378.24423 16.185282   C 381.13245 16.185282 383.45803 18.510862 383.45803 21.380326   L 383.45803 42.216767   C 383.45803 45.086232 381.13245 47.411811 378.24423 47.411811   L 265.69744 47.411811   C 262.80922 47.411811 260.48364 45.086232 260.48364 42.216767   z"
-       id="path2993" />
-    <text
-       xml:space="preserve"
-       x="275.28831"
-       y="39.668396"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text2995">flink</text>
-    <text
-       xml:space="preserve"
-       x="316.69863"
-       y="39.668396"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text2997">-</text>
-    <text
-       xml:space="preserve"
-       x="325.70087"
-       y="39.668396"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text2999">core</text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 130.86073 96.502166   C 130.86073 93.670211 133.1488 91.372763 135.98075 91.372763   L 233.41127 91.372763   C 236.23385 91.372763 238.5313 93.670211 238.5313 96.502166   L 238.5313 116.98227   C 238.5313 119.81422 236.23385 122.10229 233.41127 122.10229   L 135.98075 122.10229   C 133.1488 122.10229 130.86073 119.81422 130.86073 116.98227   z"
-       id="path3001" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.5037487px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 130.86073 96.502166   C 130.86073 93.670211 133.1488 91.372763 135.98075 91.372763   L 233.41127 91.372763   C 236.23385 91.372763 238.5313 93.670211 238.5313 96.502166   L 238.5313 116.98227   C 238.5313 119.81422 236.23385 122.10229 233.41127 122.10229   L 135.98075 122.10229   C 133.1488 122.10229 130.86073 119.81422 130.86073 116.98227   z"
-       id="path3003" />
-    <text
-       xml:space="preserve"
-       x="138.4718"
-       y="114.6131"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3005">flink</text>
-    <text
-       xml:space="preserve"
-       x="179.88211"
-       y="114.6131"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3007">-</text>
-    <text
-       xml:space="preserve"
-       x="188.88436"
-       y="114.6131"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3009">java</text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 260.48364 96.567807   C 260.48364 93.754607 262.77171 91.466537 265.58491 91.466537   L 363.05295 91.466537   C 365.86615 91.466537 368.15422 93.754607 368.15422 96.567807   L 368.15422 117.0104   C 368.15422 119.8236 365.86615 122.11167 363.05295 122.11167   L 265.58491 122.11167   C 262.77171 122.11167 260.48364 119.8236 260.48364 117.0104   z"
-       id="path3011" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 260.48364 96.567807   C 260.48364 93.754607 262.77171 91.466537 265.58491 91.466537   L 363.05295 91.466537   C 365.86615 91.466537 368.15422 93.754607 368.15422 96.567807   L 368.15422 117.0104   C 368.15422 119.8236 365.86615 122.11167 363.05295 122.11167   L 265.58491 122.11167   C 262.77171 122.11167 260.48364 119.8236 260.48364 117.0104   z"
-       id="path3013" />
-    <text
-       xml:space="preserve"
-       x="264.04551"
-       y="114.65651"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3015">flink</text>
-    <text
-       xml:space="preserve"
-       x="305.45583"
-       y="114.65651"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3017">-</text>
-    <text
-       xml:space="preserve"
-       x="314.45807"
-       y="114.65651"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3019">scala</text>
-    <text
-       xml:space="preserve"
-       x="20.936318"
-       y="28.495681"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3021">c</text>
-    <text
-       xml:space="preserve"
-       x="28.738261"
-       y="28.495681"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3023">ore types, common API, utils,</text>
-    <text
-       xml:space="preserve"
-       x="102.25658"
-       y="46.500168"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3025">core data structures</text>
-    <text
-       xml:space="preserve"
-       x="277.67823"
-       y="145.73346"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3027">Scala API</text>
-    <text
-       xml:space="preserve"
-       x="152.42842"
-       y="145.73346"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3029">Java API</text>
-    <text
-       xml:space="preserve"
-       x="127.97233"
-       y="163.73794"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3031">Old Record API</text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 260.48364 198.25564   C 260.48364 195.0861 263.05303 192.51671 266.20382 192.51671   L 399.26822 192.51671   C 402.419 192.51671 404.98839 195.0861 404.98839 198.25564   L 404.98839 221.13634   C 404.98839 224.30588 402.419 226.87527 399.26822 226.87527   L 266.20382 226.87527   C 263.05303 226.87527 260.48364 224.30588 260.48364 221.13634   z"
-       id="path3033" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 260.48364 198.25564   C 260.48364 195.0861 263.05303 192.51671 266.20382 192.51671   L 399.26822 192.51671   C 402.419 192.51671 404.98839 195.0861 404.98839 198.25564   L 404.98839 221.13634   C 404.98839 224.30588 402.419 226.87527 399.26822 226.87527   L 266.20382 226.87527   C 263.05303 226.87527 260.48364 224.30588 260.48364 221.13634   z"
-       id="path3035" />
-    <text
-       xml:space="preserve"
-       x="268.52797"
-       y="217.56563"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3037">flink</text>
-    <text
-       xml:space="preserve"
-       x="309.93829"
-       y="217.56563"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3039">-</text>
-    <text
-       xml:space="preserve"
-       x="318.94053"
-       y="217.56563"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3041">runtime</text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 260.48364 262.94051   C 260.48364 259.77097 263.05303 257.22033 266.20382 257.22033   L 399.26822 257.22033   C 402.419 257.22033 404.98839 259.77097 404.98839 262.94051   L 404.98839 285.83996   C 404.98839 288.99074 402.419 291.56013 399.26822 291.56013   L 266.20382 291.56013   C 263.05303 291.56013 260.48364 288.99074 260.48364 285.83996   z"
-       id="path3043" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 260.48364 262.94051   C 260.48364 259.77097 263.05303 257.22033 266.20382 257.22033   L 399.26822 257.22033   C 402.419 257.22033 404.98839 259.77097 404.98839 262.94051   L 404.98839 285.83996   C 404.98839 288.99074 402.419 291.56013 399.26822 291.56013   L 266.20382 291.56013   C 263.05303 291.56013 260.48364 288.99074 260.48364 285.83996   z"
-       id="path3045" />
-    <text
-       xml:space="preserve"
-       x="264.77703"
-       y="282.25536"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3047">flink</text>
-    <text
-       xml:space="preserve"
-       x="306.18735"
-       y="282.25536"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3049">-</text>
-    <text
-       xml:space="preserve"
-       x="315.18959"
-       y="282.25536"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3051">compiler</text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 260.48364 326.7439   C 260.48364 323.57436 263.05303 321.02373 266.20382 321.02373   L 399.26822 321.02373   C 402.419 321.02373 404.98839 323.57436 404.98839 326.7439   L 404.98839 349.64335   C 404.98839 352.79414 402.419 355.36353 399.26822 355.36353   L 266.20382 355.36353   C 263.05303 355.36353 260.48364 352.79414 260.48364 349.64335   z"
-       id="path3053" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 260.48364 326.7439   C 260.48364 323.57436 263.05303 321.02373 266.20382 321.02373   L 399.26822 321.02373   C 402.419 321.02373 404.98839 323.57436 404.98839 326.7439   L 404.98839 349.64335   C 404.98839 352.79414 402.419 355.36353 399.26822 355.36353   L 266.20382 355.36353   C 263.05303 355.36353 260.48364 352.79414 260.48364 349.64335   z"
-       id="path3055" />
-    <text
-       xml:space="preserve"
-       x="275.72976"
-       y="346.05788"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3057">flink</text>
-    <text
-       xml:space="preserve"
-       x="317.14008"
-       y="346.05788"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3059">-</text>
-    <text
-       xml:space="preserve"
-       x="326.14232"
-       y="346.05788"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3061">clients</text>
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 333.49558 397.91788   L 333.94569 363.25925   L 331.45132 363.22174   L 331.00121 397.88037   z  M 338.07172 370.17972   L 332.7454 360.74612   L 327.1565 370.02968   C 326.80016 370.62983 326.98771 371.39877 327.58786 371.75511   C 328.16926 372.11145 328.9382 371.92391 329.29454 371.32376   L 329.29454 371.32376   L 333.7769 363.87815   L 331.62011 363.8594   L 335.89618 371.41753   C 336.23376 372.01768 337.00271 372.22398 337.60286 371.8864   C 338.203 371.54881 338.40931 370.77987 338.07172 370.17972   z"
-       id="path3063" />
-    <text
-       xml:space="preserve"
-       x="90.010614"
-       y="280.17295"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3065">compiler </text>
-    <text
-       xml:space="preserve"
-       x="159.62796"
-       y="280.17295"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3067">/ </text>
-    <text
-       xml:space="preserve"
-       x="171.78098"
-       y="280.17295"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3069">optimizer</text>
-    <text
-       xml:space="preserve"
-       x="48.60059"
-       y="208.5999"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3071">l</text>
-    <text
-       xml:space="preserve"
-       x="52.651599"
-       y="208.5999"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3073">ocal/distributed execution,</text>
-    <text
-       xml:space="preserve"
-       x="71.706347"
-       y="226.60439"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3075">runtime </text>
-    <text
-       xml:space="preserve"
-       x="135.92234"
-       y="226.60439"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3077">web monitor</text>
-    <text
-       xml:space="preserve"
-       x="73.125502"
-       y="323.98799"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3079">local/remote execution</text>
-    <text
-       xml:space="preserve"
-       x="124.13821"
-       y="341.99247"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3081">CLI </text>
-    <text
-       xml:space="preserve"
-       x="154.44576"
-       y="341.99247"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3083">client</text>
-    <text
-       xml:space="preserve"
-       x="74.775913"
-       y="359.99696"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3085">compiler web frontend</text>
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 413.72807 12.678158   C 421.54877 12.678158 427.9066 13.72842 427.9066 15.041247   L 427.9066 68.229498   C 427.9066 69.52357 434.24568 70.592586 442.08513 70.592586   C 434.24568 70.592586 427.9066 71.642848 427.9066 72.955675   L 427.9066 126.14393   C 427.9066 127.45675 421.54877 128.50701 413.72807 128.50701 "
-       id="path3087" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 409.35823 181.56398   C 417.17893 181.56398 423.53676 182.61424 423.53676 183.92707   L 423.53676 273.18056   C 423.53676 274.49338 429.87584 275.54364 437.7153 275.54364   C 429.87584 275.54364 423.53676 276.61266 423.53676 277.90673   L 423.53676 367.17897   C 423.53676 368.47305 417.17893 369.54206 409.35823 369.54206 "
-       id="path3089" />
-    <text
-       xml:space="preserve"
-       x="464.00202"
-       y="69.388546"
-       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3091">Needed to </text>
-    <text
-       xml:space="preserve"
-       x="486.95774"
-       y="90.393779"
-       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3093">write </text>
-    <text
-       xml:space="preserve"
-       x="467.00277"
-       y="111.39901"
-       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3095">programs</text>
-    <text
-       xml:space="preserve"
-       x="440.46593"
-       y="265.59638"
-       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3097">Needed </text>
-    <text
-       xml:space="preserve"
-       x="512.93399"
-       y="265.59638"
-       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3099">in addition for </text>
-    <text
-       xml:space="preserve"
-       x="472.87401"
-       y="286.60161"
-       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3101">embedded </text>
-    <text
-       xml:space="preserve"
-       x="571.14849"
-       y="286.60161"
-       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3103">and </text>
-    <text
-       xml:space="preserve"
-       x="445.41717"
-       y="307.60684"
-       style="font-size:17.554373px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3105">distributed execution</text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 126.70657 484.20813   C 126.70657 479.61323 130.43875 475.88105 135.05239 475.88105   L 288.46561 475.88105   C 293.07926 475.88105 296.81144 479.61323 296.81144 484.20813   L 296.81144 517.57269   C 296.81144 522.16759 293.07926 525.91852 288.46561 525.91852   L 135.05239 525.91852   C 130.43875 525.91852 126.70657 522.16759 126.70657 517.57269   z"
-       id="path3107" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 126.70657 484.20813   C 126.70657 479.61323 130.43875 475.88105 135.05239 475.88105   L 288.46561 475.88105   C 293.07926 475.88105 296.81144 479.61323 296.81144 484.20813   L 296.81144 517.57269   C 296.81144 522.16759 293.07926 525.91852 288.46561 525.91852   L 135.05239 525.91852   C 130.43875 525.91852 126.70657 522.16759 126.70657 517.57269   z"
-       id="path3109" />
-    <text
-       xml:space="preserve"
-       x="161.02009"
-       y="496.75874"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3111">flink</text>
-    <text
-       xml:space="preserve"
-       x="202.4304"
-       y="496.75874"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3113">-</text>
-    <text
-       xml:space="preserve"
-       x="211.43265"
-       y="496.75874"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3115">java</text>
-    <text
-       xml:space="preserve"
-       x="253.59315"
-       y="496.75874"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3117">-</text>
-    <text
-       xml:space="preserve"
-       x="164.17087"
-       y="520.76472"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3119">examples</text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 68.867157 548.64918   C 68.867157 544.12931 72.543072 540.45339 77.062948 540.45339   L 251.57517 540.45339   C 256.09505 540.45339 259.77097 544.12931 259.77097 548.64918   L 259.77097 581.43235   C 259.77097 585.95223 256.09505 589.62814 251.57517 589.62814   L 77.062948 589.62814   C 72.543072 589.62814 68.867157 585.95223 68.867157 581.43235   z"
-       id="path3121" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 68.867157 548.64918   C 68.867157 544.12931 72.543072 540.45339 77.062948 540.45339   L 251.57517 540.45339   C 256.09505 540.45339 259.77097 544.12931 259.77097 548.64918   L 259.77097 581.43235   C 259.77097 585.95223 256.09505 589.62814 251.57517 589.62814   L 77.062948 589.62814   C 72.543072 589.62814 68.867157 585.95223 68.867157 581.43235   z"
-       id="path3123" />
-    <text
-       xml:space="preserve"
-       x="109.65675"
-       y="560.90686"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3125">flink</text>
-    <text
-       xml:space="preserve"
-       x="151.06706"
-       y="560.90686"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3127">-</text>
-    <text
-       xml:space="preserve"
-       x="160.06931"
-       y="560.90686"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3129">scala</text>
-    <text
-       xml:space="preserve"
-       x="210.18179"
-       y="560.90686"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3131">-</text>
-    <text
-       xml:space="preserve"
-       x="116.85854"
-       y="584.91284"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3133">examples</text>
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 273.3681 606.75116   C 273.3681 603.22528 276.25632 600.33706 279.7822 600.33706   L 402.92538 600.33706   C 406.48877 600.33706 409.37699 603.22528 409.37699 606.75116   L 409.37699 632.52008   C 409.37699 636.04595 406.48877 638.93417 402.92538 638.93417   L 279.7822 638.93417   C 276.25632 638.93417 273.3681 636.04595 273.3681 632.52008   z"
-       id="path3135" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.5131261px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 273.3681 606.75116   C 273.3681 603.22528 276.25632 600.33706 279.7822 600.33706   L 402.92538 600.33706   C 406.48877 600.33706 409.37699 603.22528 409.37699 606.75116   L 409.37699 632.52008   C 409.37699 636.04595 406.48877 638.93417 402.92538 638.93417   L 279.7822 638.93417   C 276.25632 638.93417 273.3681 636.04595 273.3681 632.52008   z"
-       id="path3137" />
-    <text
-       xml:space="preserve"
-       x="292.11598"
-       y="627.49492"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3139">flink</text>
-    <text
-       xml:space="preserve"
-       x="333.5263"
-       y="627.49492"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3141">-</text>
-    <text
-       xml:space="preserve"
-       x="342.52854"
-       y="627.49492"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3143">tests</text>
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 298.83695 81.395278   L 308.45809 60.108725   L 306.17002 59.077218   L 296.56763 80.382525   z  M 309.47085 68.098215   L 308.34557 57.333033   L 299.51212 63.615848   C 298.94948 64.009696 298.81819 64.797393 299.2308 65.360033   C 299.62464 65.922673 300.41234 66.053956 300.97498 65.641353   L 308.04549 60.615101   L 306.07625 59.733631   L 306.97648 68.36078   C 307.05149 69.054703 307.6704 69.542325 308.34557 69.467306   C 309.03949 69.411042 309.52711 68.792138 309.47085 68.098215   z"
-       id="path3145" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.0093773361px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 214.32839 88.962788   L 264.78784 60.765138   L 263.56879 58.589596   L 213.10934 86.777869   z  M 260.83998 67.788763   L 266.34448 58.467691   L 255.52303 58.261389   C 254.82911 58.252012 254.25709 58.805275 254.24771 59.48982   C 254.23834 60.183743 254.78222 60.755761 255.47615 60.765138   L 264.15956 60.924553   L 263.09992 59.039708   L 258.69257 66.522823   C 258.33623 67.113595 258.53316 67.882536 259.13331 68.229498   C 259.72408 68.585836 260.49302 68.388912 260.83998 67.788763   z"
-       id="path3147" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 358.60809 184.69601   L 363.55932 174.3997   L 365.97867 169.27967   L 368.34176 164.19716   L 370.64859 159.1709   L 372.86164 154.20092   L 374.96216 149.30595   L 376.95016 144.50475   L 378.78812 139.77857   L 380.47604 135.16492   L 381.97641 130.6638   L 383.30799 126.31272   L 383.87063 124.21219   L 384.39576 122.11167   L 384.88338 120.06741   L 385.27723 118.06066   L 385.63357 116.09142   L 385.93365 114.17844   L 386.13995 112.30298   L 386.30874 110.48377   L 386.38376 108.70208   L 386.40251 106.97665   L 386.365 105.28873   L 386.27123 103.65707   L 386.10244 102.04417   L 385.87738 100.48753   L 385.61482 98.949651   L 385.29599 97.449277   L 384.48954 94.561058   L 383.49554 91.804121   L 382.33275 89.140957   L 381.01992 86.590322   L 379.55706 84.114705   L 377.98166 81.714107   L 376.29374 79.351018   L 374.53081 77.062948   L 372.67409 74.812388   L 370.76112 72.580582   L 368.4918 70.011192   L 370.36727 68.342026   L 372.67409 70.948925   L 374.6
 0582 73.21824   L 376.50005 75.54382   L 378.338 77.906909   L 380.08219 80.326261   L 381.7326 82.839387   L 383.23297 85.446287   L 384.62082 88.14696   L 385.83987 90.96016   L 386.89013 93.885889   L 387.73409 96.942901   L 388.07168 98.518293   L 388.353 100.1312   L 388.59681 101.80036   L 388.7656 103.48828   L 388.87813 105.23247   L 388.91564 107.01416   L 388.89688 108.83336   L 388.78436 110.69008   L 388.63432 112.60305   L 388.39051 114.55354   L 388.09043 116.54153   L 387.73409 118.56704   L 387.30274 120.63005   L 386.83387 122.73058   L 386.28998 124.84985   L 385.68984 127.04415   L 384.35825 131.47025   L 382.82037 136.02764   L 381.11369 140.6788   L 379.25698 145.44248   L 377.26899 150.29994   L 375.14971 155.23242   L 372.9179 160.22117   L 370.61108 165.26617   L 368.22924 170.34869   L 365.80988 175.46871   L 360.8774 185.76503   z  M 369.8984 77.944418   L 367.77912 67.310519   L 378.07544 70.705114   C 378.7131 70.93017 379.06944 71.624093 378.86313 72.280
 507   C 378.63808 72.93692 377.94416 73.293259 377.28774 73.086958   L 369.03569 70.36753   L 370.64859 68.923421   L 372.33651 77.456796   C 372.48655 78.131965 372.03643 78.788378 371.36127 78.919661   C 370.6861 79.050944 370.02968 78.619586 369.8984 77.944418   z"
-       id="path3149" />
-    <path
-       style="fill:#ffffff;fill-rule:evenodd;fill-opacity:1;stroke:none;"
-       d="  M 259.48965 415.00339   C 259.48965 411.89011 262.02153 409.35823 265.1348 409.35823   L 399.36199 409.35823   C 402.47527 409.35823 404.98839 411.89011 404.98839 415.00339   L 404.98839 437.50899   C 404.98839 440.62227 402.47527 443.1354 399.36199 443.1354   L 265.1348 443.1354   C 262.02153 443.1354 259.48965 440.62227 259.48965 437.50899   z"
-       id="path3151" />
-    <path
-       style="fill:none;stroke:#000000;stroke-width:2.4943714px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 259.48965 415.00339   C 259.48965 411.89011 262.02153 409.35823 265.1348 409.35823   L 399.36199 409.35823   C 402.47527 409.35823 404.98839 411.89011 404.98839 415.00339   L 404.98839 437.50899   C 404.98839 440.62227 402.47527 443.1354 399.36199 443.1354   L 265.1348 443.1354   C 262.02153 443.1354 259.48965 440.62227 259.48965 437.50899   z"
-       id="path3153" />
-    <text
-       xml:space="preserve"
-       x="263.06067"
-       y="434.12154"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3155">flink</text>
-    <text
-       xml:space="preserve"
-       x="304.47099"
-       y="434.12154"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3157">-</text>
-    <text
-       xml:space="preserve"
-       x="313.47323"
-       y="434.12154"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3159">test</text>
-    <text
-       xml:space="preserve"
-       x="350.83254"
-       y="434.12154"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3161">-</text>
-    <text
-       xml:space="preserve"
-       x="359.83478"
-       y="434.12154"
-       style="font-size:19.954971px;fill:#000000;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3163">utils</text>
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 333.9832 252.40038   L 333.9832 237.32162   L 331.48883 237.32162   L 331.48883 252.40038   z  M 338.18425 244.18583   L 332.7454 234.84601   L 327.28779 244.18583   C 326.93145 244.78598 327.13775 245.55492 327.7379 245.91126   C 328.31929 246.24885 329.08823 246.04255 329.44457 245.46115   L 333.81441 237.95928   L 331.65762 237.95928   L 336.02746 245.46115   L 336.02746 245.46115   C 336.3838 246.04255 337.15274 246.24885 337.73414 245.91126   C 338.33429 245.55492 338.54059 244.78598 338.18425 244.18583   z"
-       id="path3165" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 333.9832 314.38457   L 333.9832 299.28706   L 331.48883 299.28706   L 331.48883 314.38457   z  M 338.18425 306.17002   L 332.7454 296.81144   L 327.28779 306.17002   C 326.93145 306.77017 327.13775 307.52036 327.7379 307.8767   C 328.31929 308.23304 329.08823 308.02674 329.44457 307.42659   L 333.81441 299.92472   L 331.65762 299.92472   L 336.02746 307.42659   L 336.02746 307.42659   C 336.3838 308.02674 337.15274 308.23304 337.73414 307.8767   C 338.33429 307.52036 338.54059 306.77017 338.18425 306.17002   z"
-       id="path3167" />
-    <text
-       xml:space="preserve"
-       x="165.18987"
-       y="432.03911"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3169">Test </text>
-    <text
-       xml:space="preserve"
-       x="129.63101"
-       y="450.0436"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3171">environments</text>
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 334.03947 589.66565   L 331.05747 457.10763   L 333.55185 457.05136   L 336.53384 589.60939   z  M 327.00647 464.08437   L 332.23902 454.61326   L 337.90293 463.84055   C 338.27802 464.42195 338.09048 465.19089 337.49033 465.54723   C 336.90893 465.92232 336.13999 465.73478 335.78365 465.13463   L 335.78365 465.13463   L 331.22627 457.74529   L 333.40181 457.68902   L 329.18201 465.28466   C 328.84442 465.88481 328.09424 466.10987 327.49409 465.77229   C 326.87518 465.4347 326.66888 464.68451 327.00647 464.08437   z"
-       id="path3173" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.037509345px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 266.72895 617.7789   L 259.33961 617.55385   L 252.1003 617.29128   L 248.49941 617.10374   L 244.97353 616.91619   L 241.56018 616.69113   L 238.18434 616.42857   L 234.92102 616.09098   L 231.77024 615.7534   L 228.73198 615.30329   L 225.80625 614.81567   L 223.03056 614.25303   L 220.44242 613.61537   L 217.9668 612.90269   L 215.71624 612.07748   L 213.61572 611.17726   L 211.70274 610.127   L 209.97731 609.03923   L 208.40192 607.87644   L 206.97656 606.60112   L 205.66374 605.28829   L 204.53846 603.90045   L 203.48819 602.43758   L 202.58797 600.97472   L 201.76276 599.47434   L 201.01258 597.93646   L 200.33741 596.36107   L 199.13711 593.21028   L 198.87454 592.38508   L 201.23763 591.59738   L 201.5002 592.34757   L 202.62548 595.38583   L 203.26314 596.84869   L 203.97582 598.27405   L 204.68849 599.66189   L 205.55121 601.01223   L 206.45143 602.28754   L 207.46418 603.56286   L 208.62697 604.72565   L 209.90229 605.85093   L 211.29014 606.9387   L 212.865
 53 607.95146   L 214.62847 608.85168   L 216.54145 609.7144   L 218.67948 610.50209   L 221.00506 611.17726   L 223.55569 611.81492   L 226.21886 612.34005   L 229.06957 612.82767   L 232.03281 613.24027   L 235.14608 613.61537   L 238.37188 613.91544   L 241.71022 614.17801   L 245.12357 614.40306   L 248.61194 614.62812   L 252.17532 614.77816   L 259.41463 615.04072   L 266.80397 615.26578   z  M 197.11161 600.26204   L 199.24964 589.6469   L 207.42668 596.73616   C 207.95181 597.18627 208.02682 597.97397 207.5392 598.4991   C 207.08909 599.02423 206.30139 599.06174 205.77626 598.61163   L 199.21213 592.94772   L 201.27514 592.23504   L 199.54971 600.74966   C 199.43718 601.42483 198.76202 601.87494 198.08685 601.7249   C 197.41168 601.57487 196.96157 600.93721 197.11161 600.26204   z"
-       id="path3175" />
-    <path
-       style="fill:#000000;fill-rule:nonzero;fill-opacity:1;stroke:#000000;stroke-width:0.018754672px;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;"
-       d="  M 310.91496 593.04149   L 306.28255 588.76543   L 301.70641 584.52687   L 297.28031 580.32582   L 295.12352 578.24406   L 293.04175 576.21855   L 291.01625 574.17429   L 289.08452 572.1863   L 287.22781 570.21706   L 285.46487 568.28532   L 283.7957 566.40986   L 282.23906 564.55314   L 280.81371 562.7527   L 279.50088 560.98976   L 278.33809 559.28308   L 277.28783 557.61392   L 276.36885 556.00101   L 275.58115 554.42562   L 274.86848 552.88774   L 274.26833 551.36861   L 273.76195 549.90575   L 273.34935 548.48039   L 272.97425 547.07379   L 272.69293 545.68594   L 272.26158 543.02278   L 271.98026 540.39713   L 271.9615 540.30335   L 274.45587 540.11581   L 274.45587 540.13456   L 274.73719 542.62893   L 275.13104 545.17957   L 275.41236 546.45489   L 275.73119 547.76771   L 276.12504 549.09929   L 276.61266 550.46839   L 277.15655 551.85623   L 277.79421 553.28159   L 278.54439 554.76321   L 279.42586 556.30109   L 280.4011 557.87648   L 281.52639 559.50814   L 282.
 76419 561.19606   L 284.17079 562.959   L 285.67117 564.75945   L 287.30282 566.61616   L 289.02825 568.51038   L 290.86621 570.44211   L 292.79794 572.41135   L 294.78594 574.4181   L 296.86771 576.46236   L 298.98699 578.52538   L 303.41309 582.70767   L 307.97047 586.92747   L 312.62163 591.20353   z  M 268.34185 547.50515   L 273.01176 537.73396   L 279.21956 546.60492   C 279.61341 547.18632 279.46337 547.95526 278.90073 548.34911   C 278.33809 548.74296 277.55039 548.61167 277.15655 548.04903   L 272.18656 540.92226   L 274.34335 540.75347   L 270.59241 548.57416   C 270.29234 549.21182 269.54215 549.47439 268.92325 549.17431   C 268.30434 548.87424 268.04178 548.12405 268.34185 547.50515   z"
-       id="path3177" />
-    <text
-       xml:space="preserve"
-       x="441.23605"
-       y="616.32234"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3179">integration tests</text>
-    <text
-       xml:space="preserve"
-       x="435.68466"
-       y="634.32683"
-       style="font-size:15.003737px;fill:#000000;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;font-family:Verdana;"
-       id="text3181">(entire programs)</text>
-  </g>
-</svg>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/quickstart-example/compiler-webclient-new.png
----------------------------------------------------------------------
diff --git a/docs/img/quickstart-example/compiler-webclient-new.png b/docs/img/quickstart-example/compiler-webclient-new.png
deleted file mode 100644
index e60689e..0000000
Binary files a/docs/img/quickstart-example/compiler-webclient-new.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/quickstart-example/jobmanager-running-new.png
----------------------------------------------------------------------
diff --git a/docs/img/quickstart-example/jobmanager-running-new.png b/docs/img/quickstart-example/jobmanager-running-new.png
deleted file mode 100644
index 6255022..0000000
Binary files a/docs/img/quickstart-example/jobmanager-running-new.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/quickstart-example/kmeans003.png
----------------------------------------------------------------------
diff --git a/docs/img/quickstart-example/kmeans003.png b/docs/img/quickstart-example/kmeans003.png
deleted file mode 100644
index 32f8dbb..0000000
Binary files a/docs/img/quickstart-example/kmeans003.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/quickstart-example/kmeans008.png
----------------------------------------------------------------------
diff --git a/docs/img/quickstart-example/kmeans008.png b/docs/img/quickstart-example/kmeans008.png
deleted file mode 100644
index b372fd1..0000000
Binary files a/docs/img/quickstart-example/kmeans008.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/quickstart-example/kmeans015.png
----------------------------------------------------------------------
diff --git a/docs/img/quickstart-example/kmeans015.png b/docs/img/quickstart-example/kmeans015.png
deleted file mode 100644
index 8b6fb51..0000000
Binary files a/docs/img/quickstart-example/kmeans015.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/quickstart-example/result003.png
----------------------------------------------------------------------
diff --git a/docs/img/quickstart-example/result003.png b/docs/img/quickstart-example/result003.png
deleted file mode 100644
index bdcef44..0000000
Binary files a/docs/img/quickstart-example/result003.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/quickstart-example/result008.png
----------------------------------------------------------------------
diff --git a/docs/img/quickstart-example/result008.png b/docs/img/quickstart-example/result008.png
deleted file mode 100644
index 921c73c..0000000
Binary files a/docs/img/quickstart-example/result008.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/quickstart-example/result015.png
----------------------------------------------------------------------
diff --git a/docs/img/quickstart-example/result015.png b/docs/img/quickstart-example/result015.png
deleted file mode 100644
index 9dbc6c4..0000000
Binary files a/docs/img/quickstart-example/result015.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/quickstart-example/run-webclient.png
----------------------------------------------------------------------
diff --git a/docs/img/quickstart-example/run-webclient.png b/docs/img/quickstart-example/run-webclient.png
deleted file mode 100644
index 8b3d535..0000000
Binary files a/docs/img/quickstart-example/run-webclient.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/quickstart_cluster.png
----------------------------------------------------------------------
diff --git a/docs/img/quickstart_cluster.png b/docs/img/quickstart_cluster.png
deleted file mode 100644
index 9e24795..0000000
Binary files a/docs/img/quickstart_cluster.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/slots.svg
----------------------------------------------------------------------
diff --git a/docs/img/slots.svg b/docs/img/slots.svg
deleted file mode 100644
index 7d5dc2a..0000000
--- a/docs/img/slots.svg
+++ /dev/null
@@ -1,505 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="770.84375"
-   height="448.26599"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.5 r10040">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.5"
-     inkscape:cx="200.03973"
-     inkscape:cy="568.73823"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1600"
-     inkscape:window-height="838"
-     inkscape:window-x="1912"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(59.7139,-268.22389)">
-    <g
-       id="g2989"
-       transform="translate(-107.30765,87.786395)">
-      <path
-         id="path2991"
-         d="m 48.855921,209.35841 c 0,-15.26631 12.378084,-27.66315 27.663142,-27.66315 l 147.224177,0 c 15.2663,0 27.66314,12.39684 27.66314,27.66315 l 0,129.08841 c 0,15.28505 -12.39684,27.66314 -27.66314,27.66314 l -147.224177,0 c -15.285058,0 -27.663142,-12.37809 -27.663142,-27.66314 z"
-         style="fill:none;stroke:#85888d;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text2993"
-         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="206.08313"
-         x="57.055454"
-         xml:space="preserve">TaskManager</text>
-      <text
-         id="text2995"
-         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="206.08313"
-         x="170.78378"
-         xml:space="preserve">1</text>
-      <path
-         id="path2997"
-         d="m 70.573832,246.90526 c 0,-7.25806 5.907721,-13.16578 13.16578,-13.16578 l 10.390088,0 c 7.27681,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.390088,0 c -7.258059,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path2999"
-         d="m 70.573832,246.90526 c 0,-7.25806 5.907721,-13.16578 13.16578,-13.16578 l 10.390088,0 c 7.27681,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.390088,0 c -7.258059,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:none;stroke:#00882b;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3001"
-         d="m 128.09441,246.90526 c 0,-7.25806 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3003"
-         d="m 128.09441,246.90526 c 0,-7.25806 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:none;stroke:#00882b;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3005"
-         d="m 185.59624,246.90526 c 0,-7.25806 5.90772,-13.16578 13.18453,-13.16578 l 10.39009,0 c 7.25806,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.90772,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.18453,-5.88896 -13.18453,-13.16578 z"
-         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3007"
-         d="m 185.59624,246.90526 c 0,-7.25806 5.90772,-13.16578 13.18453,-13.16578 l 10.39009,0 c 7.25806,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.90772,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.18453,-5.88896 -13.18453,-13.16578 z"
-         style="fill:none;stroke:#00882b;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3009"
-         d="m 266.09129,209.35841 c 0,-15.26631 12.39684,-27.66315 27.66314,-27.66315 l 147.07414,0 c 15.2663,0 27.66314,12.39684 27.66314,27.66315 l 0,129.08841 c 0,15.28505 -12.39684,27.66314 -27.66314,27.66314 l -147.07414,0 c -15.2663,0 -27.66314,-12.37809 -27.66314,-27.66314 z"
-         style="fill:none;stroke:#85888d;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3011"
-         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="206.08313"
-         x="274.21527"
-         xml:space="preserve">TaskManager</text>
-      <text
-         id="text3013"
-         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="206.08313"
-         x="387.94357"
-         xml:space="preserve">2</text>
-      <path
-         id="path3015"
-         d="m 287.65916,246.96152 c 0,-7.29556 5.92648,-13.22204 13.22205,-13.22204 l 10.44635,0 c 7.29557,0 13.22204,5.92648 13.22204,13.22204 l 0,84.35852 c 0,7.31432 -5.92647,13.22204 -13.22204,13.22204 l -10.44635,0 c -7.29557,0 -13.22205,-5.90772 -13.22205,-13.22204 z"
-         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3017"
-         d="m 287.65916,246.96152 c 0,-7.29556 5.92648,-13.22204 13.22205,-13.22204 l 10.44635,0 c 7.29557,0 13.22204,5.92648 13.22204,13.22204 l 0,84.35852 c 0,7.31432 -5.92647,13.22204 -13.22204,13.22204 l -10.44635,0 c -7.29557,0 -13.22205,-5.90772 -13.22205,-13.22204 z"
-         style="fill:none;stroke:#00882b;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3019"
-         d="m 345.17974,246.90526 c 0,-7.25806 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3021"
-         d="m 345.17974,246.90526 c 0,-7.25806 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:none;stroke:#00882b;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3023"
-         d="m 402.68157,246.90526 c 0,-7.25806 5.90772,-13.16578 13.18453,-13.16578 l 10.39009,0 c 7.25806,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.90772,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.18453,-5.88896 -13.18453,-13.16578 z"
-         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3025"
-         d="m 402.68157,246.90526 c 0,-7.25806 5.90772,-13.16578 13.18453,-13.16578 l 10.39009,0 c 7.25806,0 13.16578,5.90772 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.90772,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.18453,-5.88896 -13.18453,-13.16578 z"
-         style="fill:none;stroke:#00882b;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3027"
-         d="m 178.65701,597.48635 c 7.20179,7.12677 7.20179,18.71716 0,25.84394 -7.2018,7.16428 -18.90471,7.16428 -26.10651,0 -7.20179,-7.12678 -7.20179,-18.71717 0,-25.84394 7.2018,-7.16429 18.90471,-7.16429 26.10651,0"
-         style="fill:#51a7f9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3029"
-         d="m 236.15883,597.48635 c 7.2018,7.12677 7.2018,18.71716 0,25.84394 -7.20179,7.16428 -18.8672,7.16428 -26.06899,0 -7.2018,-7.12678 -7.2018,-18.71717 0,-25.84394 7.20179,-7.16429 18.8672,-7.16429 26.06899,0"
-         style="fill:#f5d328;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3031"
-         d="m 293.54813,597.48635 c 7.16429,7.12677 7.16429,18.71716 0,25.84394 -7.16428,7.16428 -18.79218,7.16428 -25.95647,0 -7.20179,-7.12678 -7.20179,-18.71717 0,-25.84394 7.16429,-7.16429 18.79219,-7.16429 25.95647,0"
-         style="fill:#f39019;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3033"
-         d="m 351.04996,597.48635 c 7.16428,7.12677 7.16428,18.71716 0,25.84394 -7.16429,7.16428 -18.79219,7.16428 -25.95647,0 -7.16429,-7.12678 -7.16429,-18.71717 0,-25.84394 7.16428,-7.16429 18.79218,-7.16429 25.95647,0"
-         style="fill:#ec5d57;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3035"
-         d="m 181.47021,516.03481 c 7.18304,7.14553 7.18304,18.71716 0,25.86269 -7.16429,7.14553 -18.79218,7.14553 -25.95647,0 -7.18304,-7.14553 -7.18304,-18.71716 0,-25.86269 7.16429,-7.12678 18.79218,-7.12678 25.95647,0"
-         style="fill:#51a7f9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3037"
-         d="m 237.09657,516.03481 c 7.20179,7.14553 7.20179,18.71716 0,25.86269 -7.2018,7.14553 -18.88596,7.14553 -26.08775,0 -7.2018,-7.14553 -7.2018,-18.71716 0,-25.86269 7.20179,-7.12678 18.88595,-7.12678 26.08775,0"
-         style="fill:#f5d328;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3039"
-         d="m 292.59164,516.03481 c 7.18304,7.14553 7.18304,18.71716 0,25.86269 -7.16428,7.14553 -18.79218,7.14553 -25.95646,0 -7.18304,-7.14553 -7.18304,-18.71716 0,-25.86269 7.16428,-7.12678 18.79218,-7.12678 25.95646,0"
-         style="fill:#f39019;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3041"
-         d="m 348.23675,516.03481 c 7.16429,7.14553 7.16429,18.71716 0,25.86269 -7.16428,7.14553 -18.79218,7.14553 -25.97522,0 -7.16428,-7.14553 -7.16428,-18.71716 0,-25.86269 7.18304,-7.12678 18.81094,-7.12678 25.97522,0"
-         style="fill:#ec5d57;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3043"
-         d="m 207.38917,434.48949 c 7.20179,7.16429 7.20179,18.79218 0,25.95647 -7.2018,7.18304 -18.8672,7.18304 -26.069,0 -7.20179,-7.16429 -7.20179,-18.79218 0,-25.95647 7.2018,-7.18304 18.8672,-7.18304 26.069,0"
-         style="fill:#51a7f9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3045"
-         d="m 264.77846,434.48949 c 7.16429,7.16429 7.16429,18.79218 0,25.95647 -7.16428,7.18304 -18.79218,7.18304 -25.97522,0 -7.16428,-7.16429 -7.16428,-18.79218 0,-25.95647 7.18304,-7.18304 18.81094,-7.18304 25.97522,0"
-         style="fill:#f5d328;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3047"
-         d="m 322.29904,434.48949 c 7.16429,7.16429 7.16429,18.79218 0,25.95647 -7.18304,7.18304 -18.81093,7.18304 -25.97522,0 -7.16428,-7.16429 -7.16428,-18.79218 0,-25.95647 7.16429,-7.18304 18.79218,-7.18304 25.97522,0"
-         style="fill:#f39019;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3049"
-         d="m 166.84156,610.50209 2.70068,-76.48155 -2.51313,-0.075 -2.66316,76.48155 2.47561,0.075 z m 1.46287,-76.51906 3.63841,2.62565 -3.48837,-7.61439 -4.0135,7.35183 3.86346,-2.36309 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3051"
-         d="m 224.3809,610.50209 0.90022,-76.51906 -2.51312,0 -0.90023,76.48155 2.51313,0.0375 z m -0.37509,-76.51906 3.75093,2.55063 -3.67592,-7.53937 -3.82595,7.42685 3.75094,-2.43811 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3053"
-         d="m 279.40711,610.50209 -0.90023,-76.51906 2.51313,0 0.90022,76.48155 -2.51312,0.0375 z m 0.33758,-76.51906 -3.71342,2.55063 3.67591,-7.53937 3.82596,7.42685 -3.78845,-2.43811 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3055"
-         d="m 336.7964,610.50209 -2.70067,-76.48155 2.51313,-0.075 2.66316,76.48155 -2.47562,0.075 z m -1.42535,-76.51906 -3.67592,2.62565 3.48837,-7.61439 4.0135,7.35183 -3.82595,-2.36309 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3057"
-         d="m 334.09573,529.25685 -24.38107,-76.72536 2.38184,-0.75019 24.38108,76.72536 -2.38185,0.75019 z m -23.19953,-77.10046 -2.8132,3.52588 1.29407,-8.28956 5.85146,6.00149 -4.33233,-1.23781 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3059"
-         d="m 334.39581,529.78198 -79.81989,-78.00068 1.74419,-1.80045 79.81988,78.00068 -1.74418,1.80045 z m -78.93842,-78.9009 -0.84396,4.4261 -2.73818,-7.91447 7.98949,2.55063 -4.40735,0.93774 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3061"
-         d="m 334.62086,529.96953 -136.55277,-78.99468 1.23781,-2.15679 136.57153,78.97593 -1.25657,2.17554 z M 198.687,449.88708 l 0.28132,4.50112 -4.61365,-6.99549 8.38334,0.50637 -4.05101,1.988 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3063"
-         d="m 278.7882,529.78198 -81.67659,-78.03819 1.72543,-1.80045 81.67659,78.03819 -1.72543,1.80045 z m -80.81388,-78.93841 -0.7877,4.44485 -2.83195,-7.89571 8.027,2.47561 -4.40735,0.97525 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3065"
-         d="m 278.48813,529.29436 -26.18152,-76.76287 2.36308,-0.80645 26.18153,76.76287 -2.36309,0.80645 z m -24.99998,-77.17548 -2.73818,3.58215 1.12528,-8.30832 5.96398,5.88896 -4.35108,-1.16279 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3067"
-         d="m 280.86997,529.31312 27.98197,-76.80039 -2.34433,-0.84396 -28.00073,76.78163 2.36309,0.86272 z m 26.81918,-77.23175 2.66317,3.63841 -0.95649,-8.32707 -6.09527,5.75768 4.38859,-1.06902 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3069"
-         d="m 222.88053,529.31312 -27.98198,-76.80039 2.34434,-0.84396 28.00072,76.78163 -2.36308,0.86272 z m -26.81919,-77.23175 -2.66316,3.63841 0.95649,-8.32707 6.09527,5.75768 -4.3886,-1.06902 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3071"
-         d="m 225.24361,529.29436 26.18153,-76.76287 -2.38185,-0.80645 -26.18152,76.76287 2.38184,0.80645 z m 24.99998,-77.17548 2.73818,3.58215 -1.12528,-8.30832 -5.98274,5.88896 4.36984,-1.16279 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3073"
-         d="m 224.92478,529.78198 81.6766,-78.03819 -1.72543,-1.80045 -81.69535,78.03819 1.74418,1.80045 z m 80.81389,-78.93841 0.78769,4.44485 2.83196,-7.89571 -8.027,2.47561 4.40735,0.97525 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3075"
-         d="m 169.03586,529.96953 136.57152,-78.99468 -1.25656,-2.15679 -136.57152,78.97593 1.25656,2.17554 z m 135.95262,-80.08245 -0.30007,4.50112 4.61364,-6.99549 -8.36458,0.50637 4.05101,1.988 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3077"
-         d="m 169.27967,529.78198 79.81989,-78.00068 -1.74419,-1.80045 -79.81988,78.00068 1.74418,1.80045 z m 78.95717,-78.9009 0.82521,4.4261 2.73818,-7.91447 -7.97074,2.55063 4.40735,0.93774 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3079"
-         d="m 169.5985,529.25685 24.38108,-76.72536 -2.38185,-0.75019 -24.38107,76.72536 2.38184,0.75019 z m 23.19953,-77.10046 2.8132,3.52588 -1.31283,-8.28956 -5.8327,6.00149 4.33233,-1.23781 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3081"
-         d="m 252.92551,408.6268 0,-12.20929 -11.53412,0 16.97298,-31.71415 16.95422,31.71415 -11.53412,0 0,12.20929 z"
-         style="fill:none;stroke:#85888d;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3083"
-         d="m 478.80678,363.50306 19.14852,0 0,-20.66765 50.07498,30.40132 -50.07498,30.38257 0,-20.66765 -19.14852,0 z"
-         style="fill:none;stroke:#85888d;stroke-width:2.49437141px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3085"
-         d="m 611.02722,243.43565 c 0,-15.26631 12.37809,-27.64439 27.6819,-27.64439 l 147.03663,0 c 15.30381,0 27.6819,12.37808 27.6819,27.64439 l 0,129.10716 c 0,15.2663 -12.37809,27.64439 -27.6819,27.64439 l -147.03663,0 c -15.30381,0 -27.6819,-12.37809 -27.6819,-27.64439 z"
-         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3087"
-         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="240.15894"
-         x="619.12134"
-         xml:space="preserve">TaskManager</text>
-      <text
-         id="text3089"
-         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="240.15894"
-         x="732.84967"
-         xml:space="preserve">1</text>
-      <path
-         id="path3091"
-         d="m 632.5951,280.9825 c 0,-7.27681 5.88896,-13.16578 13.16578,-13.16578 l 10.39008,0 c 7.27682,0 13.16578,5.88897 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88896,13.16578 -13.16578,13.16578 l -10.39008,0 c -7.27682,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3093"
-         d="m 632.5951,280.9825 c 0,-7.27681 5.88896,-13.16578 13.16578,-13.16578 l 10.39008,0 c 7.27682,0 13.16578,5.88897 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88896,13.16578 -13.16578,13.16578 l -10.39008,0 c -7.27682,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:none;stroke:#00882b;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3095"
-         d="m 690.09692,280.9825 c 0,-7.27681 5.92648,-13.16578 13.20329,-13.16578 l 10.39009,0 c 7.2393,0 13.16578,5.88897 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.92648,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.20329,-5.88896 -13.20329,-13.16578 z"
-         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3097"
-         d="m 690.09692,280.9825 c 0,-7.27681 5.92648,-13.16578 13.20329,-13.16578 l 10.39009,0 c 7.2393,0 13.16578,5.88897 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.92648,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.20329,-5.88896 -13.20329,-13.16578 z"
-         style="fill:none;stroke:#00882b;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3099"
-         d="m 747.63625,280.9825 c 0,-7.27681 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27682,0 13.16578,5.88897 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88896,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3101"
-         d="m 747.63625,280.9825 c 0,-7.27681 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27682,0 13.16578,5.88897 13.16578,13.16578 l 0,84.47104 c 0,7.27682 -5.88896,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:none;stroke:#00882b;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3103"
-         d="m 614.62812,464.4407 c 0,-15.30381 12.37808,-27.68189 27.64439,-27.68189 l 147.22417,0 c 15.30382,0 27.6819,12.37808 27.6819,27.68189 l 0,129.06966 c 0,15.30381 -12.37808,27.68189 -27.6819,27.68189 l -147.22417,0 c -15.26631,0 -27.64439,-12.37808 -27.64439,-27.68189 z"
-         style="fill:none;stroke:#85888d;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <text
-         id="text3105"
-         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="461.10257"
-         x="622.8421"
-         xml:space="preserve">TaskManager</text>
-      <text
-         id="text3107"
-         style="font-size:16.20403671px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
-         y="461.10257"
-         x="736.57043"
-         xml:space="preserve">2</text>
-      <path
-         id="path3109"
-         d="m 636.34603,501.98756 c 0,-7.27682 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.88896 13.16578,13.16578 l 0,84.321 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3111"
-         d="m 636.34603,501.98756 c 0,-7.27682 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.88896 13.16578,13.16578 l 0,84.321 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:none;stroke:#00882b;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3113"
-         d="m 693.84785,501.98756 c 0,-7.27682 5.92648,-13.16578 13.20329,-13.16578 l 10.39009,0 c 7.23931,0 13.16578,5.88896 13.16578,13.16578 l 0,84.321 c 0,7.27682 -5.92647,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.20329,-5.88896 -13.20329,-13.16578 z"
-         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3115"
-         d="m 693.84785,501.98756 c 0,-7.27682 5.92648,-13.16578 13.20329,-13.16578 l 10.39009,0 c 7.23931,0 13.16578,5.88896 13.16578,13.16578 l 0,84.321 c 0,7.27682 -5.92647,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.20329,-5.88896 -13.20329,-13.16578 z"
-         style="fill:none;stroke:#00882b;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3117"
-         d="m 751.38719,501.98756 c 0,-7.27682 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.88896 13.16578,13.16578 l 0,84.321 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:#d9d9d9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3119"
-         d="m 751.38719,501.98756 c 0,-7.27682 5.88897,-13.16578 13.16578,-13.16578 l 10.39009,0 c 7.27681,0 13.16578,5.88896 13.16578,13.16578 l 0,84.321 c 0,7.27682 -5.88897,13.16578 -13.16578,13.16578 l -10.39009,0 c -7.27681,0 -13.16578,-5.88896 -13.16578,-13.16578 z"
-         style="fill:none;stroke:#00882b;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3121"
-         d="m 657.20123,356.52632 c 3.45085,3.45086 3.45085,9.03975 0,12.49061 -3.48837,3.45086 -9.15228,3.45086 -12.60314,0 -3.48837,-3.45086 -3.48837,-9.03975 0,-12.49061 3.45086,-3.45086 9.11477,-3.45086 12.60314,0"
-         style="fill:#51a7f9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3123"
-         d="m 657.46379,316.99147 c 3.52588,3.45086 3.52588,9.03975 0,12.49061 -3.48837,3.45086 -9.18979,3.45086 -12.71567,0 -3.48837,-3.45086 -3.48837,-9.03975 0,-12.49061 3.52588,-3.45086 9.2273,-3.45086 12.71567,0"
-         style="fill:#51a7f9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3125"
-         d="m 657.46379,277.45662 c 3.52588,3.45086 3.52588,9.03975 0,12.4531 -3.48837,3.45086 -9.18979,3.45086 -12.71567,0 -3.48837,-3.41335 -3.48837,-9.00224 0,-12.4531 3.52588,-3.45086 9.2273,-3.45086 12.71567,0"
-         style="fill:#51a7f9;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3127"
-         d="m 652.13746,362.67785 0.18755,-34.50859 -2.47562,-0.0375 -0.22505,34.5461 2.51312,0 z m -1.05026,-34.5461 3.75094,2.55063 -3.71343,-7.53938 -3.78844,7.50187 3.75093,-2.51312 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3129"
-         d="m 649.77438,323.29304 0,-34.54611 2.51312,0 0,34.54611 -2.51312,0 z m 1.27531,-34.54611 -3.75093,2.51313 3.75093,-7.50187 3.75094,7.50187 -3.75094,-2.51313 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3131"
-         d="m 714.70305,356.52632 c 3.48837,3.45086 3.48837,9.03975 0,12.49061 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.48837,-3.45086 -3.48837,-9.03975 0,-12.49061 3.48837,-3.45086 9.11477,-3.45086 12.60314,0"
-         style="fill:#f5d328;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3133"
-         d="m 714.85309,316.99147 c 3.48837,3.45086 3.48837,9.03975 0,12.49061 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.48837,-3.45086 -3.48837,-9.03975 0,-12.49061 3.48837,-3.45086 9.11477,-3.45086 12.60314,0"
-         style="fill:#f5d328;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3135"
-         d="m 714.85309,277.45662 c 3.48837,3.45086 3.48837,9.03975 0,12.4531 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.48837,-3.41335 -3.48837,-9.00224 0,-12.4531 3.48837,-3.45086 9.11477,-3.45086 12.60314,0"
-         style="fill:#f5d328;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3137"
-         d="m 709.63929,362.67785 0.22506,-34.50859 -2.51313,-0.0375 -0.18755,34.5461 2.47562,0 z m -1.05026,-34.5461 3.75093,2.55063 -3.71342,-7.53938 -3.78845,7.50187 3.75094,-2.51312 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3139"
-         d="m 709.78933,323.29304 0,-34.54611 -2.47562,0 0,34.54611 2.47562,0 z m -1.23781,-34.54611 3.75093,2.51313 -3.75093,-7.50187 -3.75094,7.50187 3.75094,-2.51313 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3141"
-         d="m 660.95216,577.38134 c 3.45086,3.48837 3.45086,9.11477 0,12.60314 -3.48837,3.48837 -9.15228,3.48837 -12.60314,0 -3.48837,-3.48837 -3.48837,-9.11477 0,-12.60314 3.45086,-3.48837 9.11477,-3.48837 12.60314,0"
-         style="fill:#ec5d57;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3143"
-         d="m 661.1022,537.84649 c 3.45086,3.48837 3.45086,9.11477 0,12.60314 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.48837,-3.48837 -3.48837,-9.11477 0,-12.60314 3.48837,-3.48837 9.11477,-3.48837 12.60314,0"
-         style="fill:#ec5d57;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3145"
-         d="m 655.8884,583.68291 0.18754,-34.54611 -2.47561,0 -0.22506,34.5086 2.51313,0.0375 z m -1.05026,-34.54611 3.75093,2.51313 -3.71342,-7.50187 -3.78845,7.46436 3.75094,-2.47562 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3147"
-         d="m 717.66629,577.34383 c 3.48837,3.45086 3.48837,9.03975 0,12.49061 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.48837,-3.45086 -3.48837,-9.03975 0,-12.49061 3.48837,-3.45086 9.11477,-3.45086 12.60314,0"
-         style="fill:#f39019;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3149"
-         d="m 717.81633,537.80898 c 3.48837,3.45086 3.48837,9.03975 0,12.49061 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.45086,-3.45086 -3.45086,-9.03975 0,-12.49061 3.48837,-3.45086 9.11477,-3.45086 12.60314,0"
-         style="fill:#f39019;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3151"
-         d="m 717.81633,498.27413 c 3.48837,3.45086 3.48837,9.03975 0,12.49061 -3.48837,3.45086 -9.11477,3.45086 -12.60314,0 -3.45086,-3.45086 -3.45086,-9.03975 0,-12.49061 3.48837,-3.45086 9.11477,-3.45086 12.60314,0"
-         style="fill:#f39019;fill-opacity:1;fill-rule:evenodd;stroke:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3153"
-         d="m 712.60253,583.68291 0.22505,-34.54611 -2.51312,0 -0.18755,34.5086 2.47562,0.0375 z m -1.05026,-34.54611 3.75093,2.51313 -3.71343,-7.50187 -3.78844,7.46436 3.75094,-2.47562 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <path
-         id="path3155"
-         d="m 712.79007,544.11055 0,-34.5086 -2.51312,0 0,34.5086 2.51312,0 z m -1.27531,-34.5086 3.75093,2.51313 -3.75093,-7.50187 -3.75094,7.50187 3.75094,-2.51313 z"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-    </g>
-  </g>
-</svg>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/spargel_example.png
----------------------------------------------------------------------
diff --git a/docs/img/spargel_example.png b/docs/img/spargel_example.png
deleted file mode 100644
index 21d20f8..0000000
Binary files a/docs/img/spargel_example.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/img/spargel_example_input.png
----------------------------------------------------------------------
diff --git a/docs/img/spargel_example_input.png b/docs/img/spargel_example_input.png
deleted file mode 100644
index 01ead46..0000000
Binary files a/docs/img/spargel_example_input.png and /dev/null differ


[13/30] flink git commit: [docs] Change doc layout

Posted by uc...@apache.org.
http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_program_life_cycle.md
----------------------------------------------------------------------
diff --git a/docs/internal_program_life_cycle.md b/docs/internal_program_life_cycle.md
deleted file mode 100644
index 17c22df..0000000
--- a/docs/internal_program_life_cycle.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title:  "Program Life Cycle"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-To be done...

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_setup_eclipse.md
----------------------------------------------------------------------
diff --git a/docs/internal_setup_eclipse.md b/docs/internal_setup_eclipse.md
deleted file mode 100644
index 3b6e6a5..0000000
--- a/docs/internal_setup_eclipse.md
+++ /dev/null
@@ -1,98 +0,0 @@
----
-title:  "How to set up Eclipse"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-A brief guide how to set up Eclipse for development of the Flink core.
-Flink uses mixed Scala/Java projects, which pose a challenge to some IDEs.
-Below is the setup guide that works best from our personal experience.
-
-For Eclipse users, we currently recomment the Scala IDE 3.0.3, as the most robust solution.
-
-
-## Eclipse Scala IDE 3.0.3
-
-**NOTE:** While this version of the Scala IDE is not the newest, we have found it to be the most reliably working
-version for complex projects like Flink. One restriction is, though, that it works only with Java 7, not with Java 8.
-
-**Note:** Before following this setup, make sure to run the build from the command line once
-(`mvn clean package -DskipTests`)
-
-1. Download the Scala IDE (preferred) or install the plugin to Eclipse Kepler. See section below for download links
-   and instructions.
-2. Add the "macroparadise" compiler plugin to the Scala compiler.
-   Open "Window" -> "Preferences" -> "Scala" -> "Compiler" -> "Advanced" and put into the "Xplugin" field the path to
-   the *macroparadise* jar file (typically "/home/*-your-user-*/.m2/repository/org/scalamacros/paradise_2.10.4/2.0.1/paradise_2.10.4-2.0.1.jar").
-   Note: If you do not have the jar file, you probably did not ran the command line build.
-3. Import the Flink Maven projects ("File" -> "Import" -> "Maven" -> "Existing Maven Projects") 
-4. During the import, Eclipse will ask to automatically install additional Maven build helper plugins.
-5. Close the "flink-java8" project. Since Eclipse Kepler does not support Java 8, you cannot develop this project.
-
-
-### Download links for Scala IDE 3.0.3
-
-The Scala IDE 3.0.3 is a previous stable release, and download links are a bit hidden.
-
-The pre-packaged Scala IDE can be downloaded from the following links:
-
-* [Linux (64 bit)](http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-linux.gtk.x86_64.tar.gz)
-* [Linux (32 bit)](http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-linux.gtk.x86.tar.gz)
-* [MaxOS X Cocoa (64 bit)](http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-macosx.cocoa.x86_64.zip)
-* [MaxOS X Cocoa (32 bit)](http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-macosx.cocoa.x86.zip)
-* [Windows (64 bit)](http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-win32.win32.x86_64.zip)
-* [Windows (32 bit)](http://downloads.typesafe.com/scalaide-pack/3.0.3.vfinal-210-20140327/scala-SDK-3.0.3-2.10-win32.win32.x86.zip)
-
-Alternatively, you can download Eclipse Kepler from [https://eclipse.org/downloads/packages/release/Kepler/SR2](https://eclipse.org/downloads/packages/release/Kepler/SR2)
-and manually add the Scala and Maven plugins by plugin site at [http://scala-ide.org/download/prev-stable.html](http://scala-ide.org/download/prev-stable.html).
-
-* Either use the update site to install the plugin ("Help" -> "Install new Software")
-* Or download the [zip file](http://download.scala-ide.org/sdk/helium/e38/scala211/stable/update-site.zip), unpack it, and move the contents of the
-  "plugins" and "features" folders into the equally named folders of the Eclipse root directory
-
-
-## Eclipse Scala IDE 4.0.0
-
-**NOTE: From personal experience, the use of the Scala IDE 4.0.0 performs worse than previous versions for complex projects like Flink.**
-**Version 4.0.0 does not handle mixed Java/Scala projects as robustly and it frequently raises incorrect import and type errors.**
-
-*Note:* Before following this setup, make sure to run the build from the command line once
-(`mvn clean package -DskipTests`)
-
-1. Download the Scala IDE: [http://scala-ide.org/download/sdk.html](http://scala-ide.org/download/sdk.html)
-2. Import the Flink Maven projects (File -> Import -> Maven -> Existing Maven Projects) 
-3. While importing the Flink project, the IDE may ask you to install an additional maven build helper plugin. 
-4. After the import, you need to set the Scala version of your projects to Scala 2.10 (from the default 2.11). 
-   To do that, select all projects that contain Scala code (marked by the small *S* on the project icon),
-   right click and select "Scala -> Set the Scala Installation" and pick "2.10.4".
-   Currently, the project to which that is relevant are "flink-runtime", "flink-scala", "flink-scala-examples",
-   "flink-streaming-example", "flink-streaming-scala", "flink-tests", "flink-test-utils", and "flink-yarn".
-5. Depending on your version of the Scala IDE, you may need to add the "macroparadise" compiler plugin to the
-   Scala compiler. Open "Window" -> "Preferences" -> "Scala" -> "Compiler" -> "Advanced" and put into the "Xplugin" field
-   the path to the *macroparadise* jar file (typically "/home/*-your-user-*/.m2/repository/org/scalamacros/paradise_2.10.4/2.0.1/paradise_2.10.4-2.0.1.jar")
-6. In order to compile the "flink-java-8" project, you may need to add a Java 8 execution environment.
-   See [this post](http://stackoverflow.com/questions/25391207/how-do-i-add-execution-environment-1-8-to-eclipse-luna)
-   for details.
-
----
-
-*This documentation is maintained by the contributors of the individual components.
-We kindly ask anyone that adds and changes components to eventually provide a patch
-or pull request that updates these documents as well.*
-

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_setup_intellij.md
----------------------------------------------------------------------
diff --git a/docs/internal_setup_intellij.md b/docs/internal_setup_intellij.md
deleted file mode 100644
index ff6758b..0000000
--- a/docs/internal_setup_intellij.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title:  "How to set up IntelliJ IDEA"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-
-
-A brief guide on how to set up IntelliJ IDEA IDE for development of the Flink core.
-As Eclipse is known to have issues with mixed Scala and Java projects, more and more contributers are migrating to IntelliJ IDEA.
-
-The following documentation describes the steps to setup IntelliJ IDEA 14.0.3 (https://www.jetbrains.com/idea/download/) with the Flink sources.
-
-Prior to doing anything, make sure that the Flink project is built at least once from the terminal:
-`mvn clean package -DskipTests`
-
-# IntelliJ IDEA
-
-## Installing the Scala plugin
-1. Go to IntelliJ plugins settings (File -> Settings -> Plugins) and click on "Install Jetbrains plugin...". 
-2. Select and install the "Scala" plugin. 
-3. Restart IntelliJ
-
-## Installing the Scala compiler plugin
-1. Go to IntelliJ scala compiler settings (File -> Settings -> Build, Execution, Deployment -> Compiler -> Scala Compiler) and click on "Install Jetbrains plugin...". 
-2. Click on the green plus icon on the right to add a compiler plugin
-3. Point to the paradise jar: ~/.m2/repository/org/scalamacros/paradise_2.10.4/2.0.1/paradise_2.10.4-2.0.1.jar If there is no such file, this means that you should build Flink from the terminal as explained above.
-
-## Importing Flink
-1. Start IntelliJ IDEA and choose "Import Project"
-2. Select the root folder of the Flink repository
-3. Choose "Import project from external model" and select "Maven"
-4. Leave the default options and finish the import.
-
----
-
-*This documentation is maintained by the contributors of the individual components.
-We kindly ask anyone that adds and changes components to eventually provide a patch
-or pull request that updates these documents as well.*
-

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internal_types_serialization.md
----------------------------------------------------------------------
diff --git a/docs/internal_types_serialization.md b/docs/internal_types_serialization.md
deleted file mode 100644
index 187364b..0000000
--- a/docs/internal_types_serialization.md
+++ /dev/null
@@ -1,228 +0,0 @@
----
-title:  "Type Extraction and Serialization"
----
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-
-Flink handles types in a unique way, containing its own type descriptors,
-generic type extraction, and type serialization framework.
-This document describes the concepts and the rationale behind them.
-
-There are fundamental differences in the way that the Scala API and
-the Java API handle type information, so most of the issues described 
-here relate only to one of the to APIs.
-
-* This will be replaced by the TOC
-{:toc}
-
-
-## Type handling in Flink
-
-Flink tries to know as much information about what types enter and leave user functions as possible.
-This stands in contrast to the approach to just assuming nothing and letting the
-programming language and serialization framework handle all types dynamically.
-
-* To allow using POJOs and grouping/joining them by referring to field names, Flink needs the type
-  information to make checks (for typos and type compatibility) before the job is executed.
-
-* The more we know, the better serialization and data layout schemes the compiler/optimizer can develop.
-  That is quite important for the memory usage paradigm in Flink (work on serialized data
-  inside/outside the heap and make serialization very cheap).
-
-* For the upcoming logical programs (see roadmap draft) we need this to know the "schema" of functions.
-
-* Finally, it also spares users having to worry about serialization frameworks and having to register
-  types at those frameworks.
-
-
-## Flink's TypeInformation class
-
-The class {% gh_link /flink-core/src/main/java/org/apache/flink/api/common/typeinfo/TypeInformation.java "TypeInformation" %}
-is the base class for all type descriptors. It reveals some basic properties of the type and can generate serializers
-and, in specializations, comparators for the types.
-(*Note that comparators in Flink do much more than defining an order - they are basically the utility to handle keys*)
-
-Internally, Flink makes the following distinctions between types:
-
-* Basic types: All Java primitives and their boxed form, plus `void`, `String`, and `Date`.
-
-* Primitive arrays and Object arrays
-
-* Composite types 
-
-  * Flink Java Tuples (part of the Flink Java API)
-
-  * Scala *case classes* (including Scala tuples)
-
-  * POJOs: classes that follow a certain bean-like pattern
- 
-* Scala auxiliary types (Option, Either, Lists, Maps, ...)
-
-* Generic types: These will not be serialized by Flink itself, but by Kryo.
-
-POJOs are of particular interest, because they support the creation of complex types and the use of field
-names in the definition of keys: `dataSet.join(another).where("name").equalTo("personName")`.
-They are also transparent to the runtime and can be handled very efficiently by Flink.
-
-
-**Rules for POJO types**
-
-Flink recognizes a data type as a POJO type (and allows "by-name" field referencing) if the following
-conditions are fulfilled:
-
-* The class is public and standalone (no non-static inner class)
-* The class has a public no-argument constructor
-* All fields in the class (and all superclasses) are either public or
-  or have a public getter and a setter method that follows the Java beans
-  naming conventions for getters and setters.
-
-
-## Type Information in the Scala API
-
-Scala has very elaborate concepts for runtime type information though *type manifests* and *class tags*. In
-general, types and methods have access to the types of their generic parameters - thus, Scala programs do
-not suffer from type erasure as Java programs do.
-
-In addition, Scala allows to run custom code in the Scala Compiler through Scala Macros - that means that some Flink
-code gets executed whenever you compile a Scala program written against Flink's Scala API.
-
-We use the Macros to look at the parameter types and return types of all user functions during compilation - that
-is the point in time when certainly all type information is perfectly available. Within the macro, we create
-a *TypeInformation* for the function's return types (or parameter types) and make it part of the operation.
-
-
-#### No Implicit Value for Evidence Parameter Error
-
-In the case where TypeInformation could not be created, programs fail to compile with an error
-stating *"could not find implicit value for evidence parameter of type TypeInformation"*.
-
-A frequent reason if that the code that generates the TypeInformation has not been imported.
-Make sure to import the entire flink.api.scala package.
-{% highlight scala %}
-import org.apache.flink.api.scala._
-{% endhighlight %}
-
-Another common cause are generic methods, which can be fixed as described in the following section.
-
-
-#### Generic Methods
-
-Consider the following case below:
-
-{% highlight scala %}
-def[T] selectFirst(input: DataSet[(T, _)]) : DataSet[T] = {
-  input.map { v => v._1 }
-}
-
-val data : DataSet[(String, Long) = ...
-
-val result = selectFirst(data)
-{% endhighlight %}
-
-For such generic methods, the data types of the function parameters and return type may not be the same
-for every call and are not known at the site where the method is defined. The code above will result
-in an error that not enough implicit evidence is available.
-
-In such cases, the type information has to be generated at the invocation site and passed to the
-method. Scala offers *implicit parameters* for that. 
-
-The following code tells Scala to bring a type information for *T* into the function. The type
-information will then be generated at the sites where the method is invoked, rather than where the
-method is defined.
-
-{% highlight scala %}
-def[T : TypeInformation] selectFirst(input: DataSet[(T, _)]) : DataSet[T] = {
-  input.map { v => v._1 }
-}
-{% endhighlight %}
-
-
-
-## Type Information in the Java API
-
-Java in general erases generic type information. Only for subclasses of generic classes, the subclass
-stores the type to which the generic type variables bind.
-
-Flink uses reflection on the (anonymous) classes that implement the user functions to figure out the types of
-the generic parameters of the function. This logic also contains some simple type inference for cases where
-the return types of functions are dependent on input types, such as in the generic utility method below:
-
-{% highlight java %}
-public class AppendOne<T> extends MapFunction<T, Tuple2<T, Long>> {
-
-    public Tuple2<T, Long> map(T value) {
-        return new Tuple2<T, Long>(value, 1L);
-    }
-}
-{% endhighlight %}
-
-Not in all cases can Flink figure out the data types of functions reliably in Java.
-Some issues remain with generic lambdas (we are trying to solve this with the Java community,
-see below) and with generic type variables that we cannot infer.
-
-
-#### Type Hints in the Java API
-
-To help cases where Flink cannot reconstruct the erased generic type information, the Java API
-offers so called *type hints* from version 0.9 on. The type hints tell the system the type of
-the data set produced by a function. The following gives an example:
-
-{% highlight java %}
-DataSet<SomeType> result = dataSet
-    .map(new MyGenericNonInferrableFunction<Long, SomeType>())
-        .returns(SomeType.class);
-{% endhighlight %}
-
-The `returns` statement specifies the produced type, in this case via a class. The hints support
-type definition through
-
-* Classes, for non-parameterized types (no generics)
-* Strings in the form of `returns("Tuple2<Integer, my.SomeType>")`, which are parsed and converted
-  to a TypeInformation.
-* A TypeInformation directly
-
-
-#### Type extraction for Java 8 lambdas
-
-Type extraction for Java 8 lambdas works differently than for non-lambdas, because lambdas are not associated
-with an implementing class that extends the function interface.
-
-Currently, Flink tries to figure out which method implements the lambda and uses Java's generic signatures to
-determine the parameter types and the return type. However, these signatures are not generated for lambdas
-by all compilers (as of writing this document only reliably by the Eclipse JDT compiler 4.5 from Milestone 2
-onwards)
-
-
-**Improving Type information for Java Lambdas**
-
-One of the Flink committers (Timo Walther) has actually become active in the Eclipse JDT compiler community and
-in the OpenJDK community and submitted patches to the compiler to improve availability of type information 
-available for Java 8 lambdas.
-
-The Eclipse JDT compiler has added support for this as of version 4.5 M4. Discussion about the feature in the
-OpenJDK compiler is pending.
-
-
-
-
-
-
-
-

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/_draft_distributed_akka.md
----------------------------------------------------------------------
diff --git a/docs/internals/_draft_distributed_akka.md b/docs/internals/_draft_distributed_akka.md
new file mode 100644
index 0000000..49497b2
--- /dev/null
+++ b/docs/internals/_draft_distributed_akka.md
@@ -0,0 +1,47 @@
+---
+title:  "Distributed Communication and Coordination via Akka"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+This page discusses the implementation of Flink's distributed communication
+via Akka (http://akka.io)
+
+
+## Actor Systems
+
+### JobManager
+
+### TaskManager
+
+### JobClient
+
+
+## Actors and Messages
+
+
+## Failure Detection
+
+
+
+---
+
+*This documentation is maintained by the contributors of the individual components.
+We kindly ask anyone that adds and changes components to eventually provide a patch
+or pull request that updates these documents as well.*

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/add_operator.md
----------------------------------------------------------------------
diff --git a/docs/internals/add_operator.md b/docs/internals/add_operator.md
new file mode 100644
index 0000000..417178e
--- /dev/null
+++ b/docs/internals/add_operator.md
@@ -0,0 +1,250 @@
+---
+title:  "How to add a new Operator"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+Operators in the Java API can be added in multiple different ways: 
+
+1. On the DataSet, as a specialization/combination of existing operators
+2. As a custom extension operator
+3. As a new runtime operator
+
+The first two approaches are typically more lightweight and easier to implement. Sometimes,
+new functionality does require a new runtime operator, or it is much more efficient to 
+
+* This will be replaced by the TOC
+{:toc}
+
+## Implementing a new Operator on DataSet
+
+Many operators can be implemented as a specialization of another operator, or by means of a UDF.
+
+The simplest example are the `sum()`, `min()`, and `max()` functions on the
+{% gh_link /flink-java/src/main/java/org/apache/flink/api/java/DataSet.java "DataSet" %}.
+These functions simply call other operations with some pre-defined parameters:
+
+~~~java
+public AggregateOperator<T> sum (int field) {
+    return this.aggregate (Aggregations.SUM, field);
+}
+
+~~~
+
+Some operations can be implemented as compositions of multiple other operators. An example is to implement a
+*count()* function through a combination of *map* and *aggregate*. 
+
+A simple way to do this is to define a function on the {% gh_link /flink-java/src/main/java/org/apache/flink/api/java/DataSet.java "DataSet" %} that calls *map(...)* and *reduce(...)* in turn:
+
+~~~java
+public DataSet<Long> count() {
+    return this.map(new MapFunction<T, Long>() {
+                        public Long map(T value) {
+                            return 1L;
+                        }
+                    })
+               .reduce(new ReduceFunction<Long>() {
+                        public Long reduce(Long val1, Long val1) {
+                            return val1 + val2;
+                        }
+                    });
+}
+~~~
+
+To define a new operator without altering the DataSet class is possible by putting the functions as static members
+into another class. The example of the *count()* operator would look the following way:
+
+~~~java
+public static <T>DataSet<Long> count(DataSet<T> data) {
+    return data.map(...).reduce(...);
+}
+~~~
+
+### More Complex Operators
+
+A more complex example of an operation via specialization is the {% gh_link /flink-java/src/main/java/org/apache/flink/api/java/operators/AggregateOperator.java "Aggregation Operation" %} in the Java API. It is implemented by means of a *GroupReduce* UDF.
+
+The Aggregate Operation comes with its own operator in the *Java API*, but translates itself into a {% gh_link /flink-core/src/main/java/org/apache/flink/api/common/operators/base/GroupReduceOperatorBase.java "GroupReduceOperatorBase" %} in the *Common API*. (see [Program Life Cycle](internal_program_life_cycle.html) for details of how an operation from the *Java API* becomes an operation of the *Common API* and finally a runtime operation.)
+The Java API aggregation operator is only a builder that takes the types of aggregations and the field positions, and used that information to
+parameterize the GroupReduce UDF that performs the aggregations.
+
+Because the operation is translated into a GroupReduce operation, it appears as a GroupReduceOperator in the optimizer and runtime.
+
+
+
+## Implementing a Custom Extension Operator
+
+The DataSet offers a method for custom operators: `DataSet<X> runOperation(CustomUnaryOperation<T, X> operation)`.
+The *CustomUnaryOperation* interface defines operators by means of the two functions:
+
+~~~ java
+void setInput(DataSet<IN> inputData);
+	
+DataSet<OUT> createResult();
+~~~
+
+The {% gh_link /flink-staging/flink-spargel/src/main/java/org/apache/flink/spargel/java/VertexCentricIteration.java "VertexCentricIteration" %} operator is implemented that way. Below is an example how to implement the *count()* operator that way.
+
+~~~ java
+public class Counter<T> implements CustomUnaryOperation<T, Long> {
+
+    private DataSet<T> input;
+
+    public void setInput(DataSet<IN> inputData) { this.input = inputData; }
+
+    public DataSet<Long> createResult() {
+        return input.map(...).reduce(...);
+    }
+}
+~~~
+
+The CountOperator can be called in the following way:
+
+~~~ java
+DataSet<String> lines = ...;
+DataSet<Long> count = lines.runOperation(new Counter<String>());
+~~~
+
+
+## Implementing a new Runtime Operator
+
+Adding an new runtime operator requires changes throughout the entire stack, from the API to the runtime:
+
+- *Java API*
+- *Common API*
+- *Optimizer*
+- *Runtime*
+
+We start the description bottom up, at the example of the *mapPartition()* function, which is like a *map*
+function, but invoked only once per parallel partition.
+
+**Runtime**
+
+Runtime Operators are implemented using the {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/operators/PactDriver.java "Driver" %} interface. The interface defines the methods that describe the operator towards the runtime. The {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/operators/MapDriver.java "MapDriver" %} serves as a simple example of how those operators work.
+
+The runtime works with the `MutableObjectIterator`, which describes data streams with the ability to reuse objects, to reduce pressure on the garbage collector.
+
+An implementation of the central `run()` method for the *mapPartition* operator could look the following way:
+
+~~~ java
+public void run() throws Exception {
+    final MutableObjectIterator<IN> input = this.taskContext.getInput(0);
+    final MapPartitionFunction<IN, OUT> function = this.taskContext.getStub();
+    final Collector<OUT> output = this.taskContext.getOutputCollector();
+    final TypeSerializer<IN> serializer = this.taskContext.getInputSerializer(0);
+
+    // we assume that the UDF takes a java.util.Iterator, so we wrap the MutableObjectIterator
+    Iterator<IN> iterator = new MutableToRegularIteratorWrapper(input, serializer);
+
+    function.mapPartition(iterator, output);
+}
+~~~
+
+To increase efficiency, it is often beneficial to implement a *chained* version of an operator. Chained
+operators run in the same thread as their preceding operator, and work with nested function calls.
+This is very efficient, because it saves serialization/deserialization overhead.
+
+To learn how to implement a chained operator, take a look at the {% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/operators/MapDriver.java "MapDriver" %} (regular) and the
+{% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/operators/chaining/ChainedMapDriver.java "ChainedMapDriver" %} (chained variant).
+
+
+### Optimizer/Compiler
+
+This section does a minimal discussion of the important steps to add an operator. Please see the [Optimizer](internal_optimizer.html) docs for more detail on how the optimizer works.
+To allow the optimizer to include a new operator in its planning, it needs a bit of information about it; in particular, the following information:
+
+- *{% gh_link /flink-runtime/src/main/java/org/apache/flink/runtime/operators/DriverStrategy.java "DriverStrategy" %}*: The operation needs to be added to the Enum, to make it available to the optimizer. The parameters to the Enum entry define which class implements the runtime operator, its chained version, whether the operator accumulates records (and needs memory for that), and whether it requires a comparator (works on keys). For our example, we can add the entry
+~~~ java
+MAP_PARTITION(MapPartitionDriver.class, null /* or chained variant */, PIPELINED, false)
+~~~
+
+- *Cost function*: The class {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/costs/CostEstimator.java "CostEstimator" %} needs to know how expensive the operation is to the system. The costs here refer to the non-UDF part of the operator. Since the operator does essentially no work (it forwards the record stream to the UDF), the costs are zero. We change the `costOperator(...)` method by adding the *MAP_PARTITION* constant to the switch statement similar to the *MAP* constant such that no cost is accounted for it.
+
+- *OperatorDescriptor*: The operator descriptors define how an operation needs to be treated by the optimizer. They describe how the operation requires the input data to be (e.g., sorted or partitioned) and that way allows the optimizer to optimize the data movement, sorting, grouping in a global fashion. They do that by describing which {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/dataproperties/RequestedGlobalProperties.java "RequestedGlobalProperties" %} (partitioning, replication, etc) and which {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/dataproperties/RequestedLocalProperties.java "RequestedLocalProperties" %} (sorting, grouping, uniqueness) the operator has, as well as how the operator affects the existing {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/dataproperties/GlobalProperties.java "GlobalProperties" %} and {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/dataproperties/LocalProperties.j
 ava "LocalProperties" %}. In addition, it defines a few utility methods, for example to instantiate an operator candidate.
+Since the *mapPartition()* function is very simple (no requirements on partitioning/grouping), the descriptor is very simple. Other operators have more complex requirements, for example the {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/operators/GroupReduceProperties.java "GroupReduce" %}. Some operators, like *join* have multiple ways in which they can be executed and therefore have multiple descriptors ({% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/operators/HashJoinBuildFirstProperties.java "Hash Join 1" %}, {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/operators/HashJoinBuildSecondProperties.java "Hash Join 2" %}, {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/operators/SortMergeJoinDescriptor.java "SortMerge Join" %}).
+The code sample below explains (with comments) how to create a descriptor for the *MapPartitionOperator* 
+
+  ~~~ java
+    public DriverStrategy getStrategy() {
+        return MAP_PARTITION;
+    }
+
+    // Instantiate the operator with the strategy over the input given in the form of the Channel
+    public SingleInputPlanNode instantiate(Channel in, SingleInputNode node) {
+        return new SingleInputPlanNode(node, "MapPartition", in, MAP_PARTITION);
+    }
+
+    // The operation accepts data with default global properties (arbitrary distribution)
+    protected List<RequestedGlobalProperties> createPossibleGlobalProperties() {
+        return Collections.singletonList(new RequestedGlobalProperties());
+    }
+
+    // The operation can accept data with any local properties. No grouping/sorting is necessary
+    protected List<RequestedLocalProperties> createPossibleLocalProperties() {
+        return Collections.singletonList(new RequestedLocalProperties());
+    }
+
+    // the operation itself does not affect the existing global properties.
+    // The effect of the UDF's semantics// are evaluated separately (by interpreting the
+    // semantic assertions)
+    public GlobalProperties computeGlobalProperties(GlobalProperties gProps) {
+        return gProps;
+    }
+
+    // since the operation can mess up all order, grouping, uniqueness, we cannot make any statements
+    // about how local properties are preserved
+    public LocalProperties computeLocalProperties(LocalProperties lProps) {
+        return LocalProperties.EMPTY;
+    }
+  ~~~
+
+- *OptimizerNode*: The optimizer node is the place where all comes together. It creates the list of *OperatorDescriptors*, implements the result data set size estimation, and assigns a name to the operation. It is a relatively small class and can be more or less copied again from the {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/dag/MapNode.java "MapNode" %}.
+
+
+### Common API
+
+To make the operation available to the higher-level APIs, it needs to be added to the Common API. The simplest way to do this is to add a
+base operator. Create a class `MapPartitionOperatorBase`, after the pattern of the {% gh_link /flink-core/src/main/java/org/apache/flink/api/common/operators/base/MapOperatorBase.java "MapOperatorBase" %}.
+
+In addition, the optimizer needs to know which OptimizerNode how to create an OptimizerNode from the OperatorBase. This happens in the class
+`GraphCreatingVisitor` in the {% gh_link /flink-compiler/src/main/java/org/apache/flink/compiler/PactCompiler.java "Optimizer" %}.
+
+*Note:* A pending idea is to allow to skip this step by unifying the OptimizerNode and the Common API operator. They essentially fulfill the
+same function. The Common API operator exists only in order for the `flink-java` and `flink-scala` packages to not have a dependency on the
+optimizer.
+
+
+### Java API
+
+Create a Java API operator that is constructed in the same way as the {% gh_link /flink-java/src/main/java/org/apache/flink/api/java/operators/MapOperator.java "MapOperator" %}. The core method is the `translateToDataFlow(...)` method, which creates the Common API operator for the Java API operator.
+
+The final step is to add a function to the `DataSet` class:
+
+~~~ java
+public <R> DataSet<R> mapPartition(MapPartitionFunction<T, R> function) {
+    return new MapPartitionOperator<T, R>(this, function);
+}
+~~~
+
+---
+
+*This documentation is maintained by the contributors of the individual components.
+We kindly ask anyone that adds and changes components to eventually provide a patch
+or pull request that updates these documents as well.*
+

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/coding_guidelines.md
----------------------------------------------------------------------
diff --git a/docs/internals/coding_guidelines.md b/docs/internals/coding_guidelines.md
new file mode 100644
index 0000000..6a75e4a
--- /dev/null
+++ b/docs/internals/coding_guidelines.md
@@ -0,0 +1,23 @@
+---
+title:  "Coding Guidelines"
+---
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+The *Coding Guidelines* are located [on the project website](http://flink.apache.org/coding_guidelines.html).
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/fig/ClientJmTm.svg
----------------------------------------------------------------------
diff --git a/docs/internals/fig/ClientJmTm.svg b/docs/internals/fig/ClientJmTm.svg
new file mode 100644
index 0000000..b158b7d
--- /dev/null
+++ b/docs/internals/fig/ClientJmTm.svg
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="817.49274"
+   height="463.47787"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.5 r10040">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="118.68649"
+     inkscape:cy="265.49231"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1600"
+     inkscape:window-height="838"
+     inkscape:window-x="1912"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0.17493185,-2.7660971)">
+    <g
+       id="g2989"
+       transform="translate(-24.016809,-116.88402)">
+      <path
+         id="path2991"
+         d="m 400.33723,121.08016 0,124.38099 248.19934,0 0,-124.38099 -248.19934,0 z"
+         style="fill:#f2dcdb;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path2993"
+         d="m 400.33723,121.08016 248.19934,0 0,124.38099 -248.19934,0 z"
+         style="fill:none;stroke:#000000;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text2995"
+         style="font-size:22.5056076px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="162.61018"
+         x="447.93558"
+         xml:space="preserve">JobManager</text>
+      <path
+         id="path2997"
+         d="m 40.510092,137.88435 164.103378,0 0,37.75316 163.46573,0 0,-12.58439 25.16877,25.16877 -25.16877,25.16877 0,-12.58438 -163.46573,0 0,37.75315 -164.103378,0 z"
+         style="fill:#b9cde5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path2999"
+         d="m 40.510092,137.88435 164.103378,0 0,37.75316 163.46573,0 0,-12.58439 25.16877,25.16877 -25.16877,25.16877 0,-12.58438 -163.46573,0 0,37.75315 -164.103378,0 z"
+         style="fill:none;stroke:#000000;stroke-width:2.55063534px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3001"
+         d="m 55.288774,144.86109 0,36.45908 132.483006,0 0,-36.45908 -132.483006,0 z"
+         style="fill:#b9cde5;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3003"
+         style="font-size:22.5056076px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="171.84125"
+         x="85.103935"
+         xml:space="preserve">Client</text>
+      <path
+         id="path3005"
+         d="m 24.46547,120.27371 42.507465,0 0,42.46058 -7.079889,7.07989 -35.427576,0 z"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3007"
+         d="m 59.893046,169.81418 1.415978,-5.66391 5.663911,-1.41598 z"
+         style="fill:#cdcdcd;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3009"
+         d="m 59.893046,169.81418 1.415978,-5.66391 5.663911,-1.41598 -7.079889,7.07989 -35.427576,0 0,-49.54047 42.507465,0 0,42.46058"
+         style="fill:none;stroke:#000000;stroke-width:1.24718571px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3011"
+         d="m 29.78242,124.80297 26.584747,0"
+         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3013"
+         d="m 29.78242,129.18218 31.901697,0"
+         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3015"
+         d="m 29.78242,133.71144 21.267798,0"
+         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3017"
+         d="m 29.78242,138.24069 31.901697,0"
+         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3019"
+         d="m 29.78242,142.77932 31.901697,0"
+         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3021"
+         d="m 29.78242,147.30857 13.287685,0"
+         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3023"
+         d="m 29.78242,151.83783 26.556615,0"
+         style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3025"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="229.55898"
+         x="239.21106"
+         xml:space="preserve">Submit Job</text>
+      <text
+         id="text3027"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="206.73724"
+         x="78.214714"
+         xml:space="preserve">Compiler/</text>
+      <text
+         id="text3029"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="227.74248"
+         x="78.814865"
+         xml:space="preserve">Optimizer</text>
+      <text
+         id="text3031"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="206.94733"
+         x="473.13199"
+         xml:space="preserve">Scheduling,</text>
+      <text
+         id="text3033"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="227.95258"
+         x="424.21982"
+         xml:space="preserve">Resource Management</text>
+      <path
+         id="path3035"
+         d="m 591.89746,422.65529 0,124.38099 248.16182,0 0,-124.38099 -248.16182,0 z"
+         style="fill:#d7e4bd;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3037"
+         d="m 591.89746,422.65529 248.16182,0 0,124.38099 -248.16182,0 z"
+         style="fill:none;stroke:#000000;stroke-width:2.55063534px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3039"
+         d="m 621.82991,437.28394 0,36.30904 187.99684,0 0,-36.30904 -187.99684,0 z"
+         style="fill:#d7e4bd;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3041"
+         style="font-size:22.5056076px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="464.15421"
+         x="631.76624"
+         xml:space="preserve">TaskManager</text>
+      <path
+         id="path3043"
+         d="m 177.34418,422.65529 0,124.38099 248.16182,0 0,-124.38099 -248.16182,0 z"
+         style="fill:#d7e4bd;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3045"
+         d="m 177.34418,422.65529 248.16182,0 0,124.38099 -248.16182,0 z"
+         style="fill:none;stroke:#000000;stroke-width:2.55063534px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3047"
+         d="m 207.42668,437.28394 0,36.30904 187.84679,0 0,-36.30904 -187.84679,0 z"
+         style="fill:#d7e4bd;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3049"
+         style="font-size:22.5056076px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="464.15421"
+         x="217.23552"
+         xml:space="preserve">TaskManager</text>
+      <path
+         id="path3051"
+         d="m 416.89761,258.47689 -147.58052,146.38022 3.95724,3.99475 147.58052,-146.38022 z m -143.26694,128.76958 -6.30157,23.53712 23.59338,-6.11403 c 1.50037,-0.37509 2.40059,-1.91297 2.0255,-3.41335 -0.39385,-1.51913 -1.93173,-2.41935 -3.4321,-2.0255 l -18.92347,4.89497 3.43211,3.45086 5.045,-18.8672 c 0.39385,-1.51913 -0.48762,-3.05701 -1.98799,-3.45086 -1.50038,-0.41261 -3.05701,0.48762 -3.45086,1.98799 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3053"
+         d="m 612.90269,257.57667 140.0974,144.26094 -4.05101,3.93848 -140.0974,-144.26094 z m 136.12141,126.59404 5.85146,23.63088 -23.48085,-6.52662 c -1.50038,-0.45011 -2.36309,-1.988 -1.95049,-3.48837 0.41261,-1.50038 1.95049,-2.36309 3.45086,-1.95049 l 18.82969,5.25131 -3.48837,3.37584 -4.68866,-18.94222 c -0.3751,-1.53788 0.56264,-3.03825 2.06301,-3.41335 1.50037,-0.37509 3.03826,0.52513 3.41335,2.06302 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3055"
+         d="m 320.29229,409.69582 134.95862,-137.19043 -4.0135,-3.93848 -134.93986,137.19042 z m 130.85135,-119.52353 6.0015,-23.61213 -23.49961,6.39534 c -1.50037,0.39385 -2.38184,1.95049 -1.96924,3.45086 0.39385,1.50037 1.95049,2.38184 3.45086,1.96924 l 18.84845,-5.12003 -3.46962,-3.41335 -4.80119,18.94222 c -0.39385,1.50038 0.52513,3.03826 2.0255,3.41335 1.50037,0.3751 3.03826,-0.52513 3.41335,-2.0255 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3057"
+         d="m 713.84034,414.29071 -141.48525,-148.76206 4.08852,-3.90097 141.48524,148.79957 z m -137.69681,-131.05765 -5.58889,-23.70591 23.40583,6.7892 c 1.46286,0.45011 2.32558,1.98799 1.91298,3.48837 -0.45012,1.50037 -1.988,2.36308 -3.48837,1.91297 l -18.79218,-5.43885 3.52587,-3.33833 4.50113,19.01723 c 0.37509,1.50038 -0.56264,3.00075 -2.10053,3.37584 -1.50037,0.33759 -3.00074,-0.60015 -3.37584,-2.10052 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3059"
+         d="m 294.48586,342.57284 c 0.95649,1.01276 1.61291,2.21305 1.95049,3.6009 0.35634,1.38785 0.31883,2.75694 -0.11253,4.08852 -0.26256,0.8252 -0.63766,1.53788 -1.10652,2.1943 -0.48763,0.63765 -1.08777,1.29407 -1.80045,1.98799 l -2.49437,2.38184 -6.67667,-11.27155 2.15679,-2.04426 c 0.67517,-0.63766 1.33158,-1.18155 1.96924,-1.6129 0.63766,-0.43136 1.33158,-0.71268 2.08177,-0.84396 0.73143,-0.13129 1.42535,-0.0563 2.10052,0.18754 0.69393,0.26257 1.33158,0.69392 1.93173,1.33158 z m -1.2003,1.33159 c -0.45011,-0.46887 -0.91897,-0.7877 -1.4066,-0.97525 -0.50637,-0.18754 -1.01275,-0.22505 -1.57539,-0.13128 -0.54388,0.0938 -1.05026,0.28132 -1.50037,0.58139 -0.46887,0.28132 -0.97524,0.69393 -1.55664,1.25657 l -1.03151,0.97524 5.19505,8.8147 1.29407,-1.21906 c 0.58139,-0.56264 1.06902,-1.12528 1.44411,-1.66916 0.37509,-0.52513 0.65641,-1.12528 0.84396,-1.74419 0.30007,-1.01275 0.28132,-2.04426 -0.0563,-3.09452 -0.33759,-1.05026 -0.88147,-1.98799 -1.65042,-2.79444 z m 8.90847,-5.87022 
 c -0.0938,-0.13128 -0.16879,-0.24381 -0.24381,-0.33758 -0.0563,-0.0938 -0.15003,-0.18755 -0.24381,-0.28132 -0.4126,-0.45011 -0.86271,-0.67517 -1.35033,-0.69392 -0.46887,-0.0188 -0.97525,0.22505 -1.51913,0.73143 -0.5814,0.56264 -0.93774,1.23781 -1.05026,2.04426 -0.0938,0.78769 0.0563,1.55664 0.45011,2.30682 z m 1.85672,6.60165 c -0.97525,0.91898 -1.93173,1.4066 -2.90698,1.48162 -0.97524,0.075 -1.87546,-0.33759 -2.70067,-1.2003 -1.21905,-1.27532 -1.85671,-2.73818 -1.91298,-4.42611 -0.0563,-1.66916 0.50638,-3.05701 1.68792,-4.18229 0.7877,-0.75018 1.5754,-1.12528 2.36309,-1.14403 0.7877,0 1.51913,0.35634 2.1943,1.06901 0.11253,0.11253 0.28132,0.33759 0.50638,0.63766 0.22505,0.30008 0.45011,0.65642 0.71267,1.08777 l -5.10127,4.87622 c 0.0938,0.13128 0.18755,0.26256 0.28132,0.39385 0.0938,0.13128 0.18755,0.24381 0.28132,0.33758 0.56264,0.5814 1.18155,0.88147 1.85671,0.86272 0.67517,0 1.33159,-0.31883 1.988,-0.93774 0.45011,-0.43136 0.84396,-0.95649 1.14403,-1.59414 0.31883,-0.63766 0.525
 14,-1.23781 0.63766,-1.76294 l 0.075,-0.075 0.95649,1.51913 c -0.15004,0.26256 -0.26256,0.50637 -0.37509,0.73143 -0.11253,0.22505 -0.26257,0.48762 -0.45011,0.78769 -0.20631,0.30008 -0.3751,0.56264 -0.54389,0.7877 -0.16879,0.22506 -0.4126,0.46887 -0.69392,0.75019 z m 6.69541,-15.71642 c 0.65642,0.67517 1.16279,1.42536 1.51913,2.23181 0.3751,0.80645 0.5814,1.59415 0.61891,2.34433 0.0563,0.7877 -0.0188,1.51913 -0.26257,2.21305 -0.22505,0.71268 -0.6189,1.31283 -1.14403,1.81921 -0.3751,0.35634 -0.75019,0.63766 -1.14404,0.84396 -0.39385,0.2063 -0.80645,0.35634 -1.21905,0.45011 l 2.11928,3.56339 -1.18155,1.10652 -6.8267,-11.59039 1.16279,-1.10652 0.52513,0.88147 c 0.13128,-0.63766 0.30008,-1.21905 0.50638,-1.74419 0.2063,-0.52513 0.54388,-0.99399 0.994,-1.42535 0.67516,-0.63766 1.38784,-0.91898 2.13803,-0.84396 0.75018,0.075 1.48162,0.50638 2.19429,1.25656 z m -1.01275,1.38785 c -0.46886,-0.48762 -0.93773,-0.76894 -1.4066,-0.84396 -0.46886,-0.0563 -0.93773,0.13128 -1.4066,0.58139 -0.33758,
 0.33759 -0.6189,0.75019 -0.8252,1.27532 -0.20631,0.52513 -0.35634,1.03151 -0.48763,1.55664 l 2.83196,4.80119 c 0.4126,-0.11252 0.76894,-0.24381 1.08777,-0.4126 0.30008,-0.16879 0.63766,-0.4126 0.994,-0.73143 0.4126,-0.4126 0.71268,-0.88147 0.84396,-1.4066 0.15004,-0.54389 0.16879,-1.06902 0.075,-1.6129 -0.0938,-0.5814 -0.28132,-1.14404 -0.56264,-1.66917 -0.30008,-0.54388 -0.67517,-1.05026 -1.14404,-1.53788 z m 0.63766,-10.39009 6.95798,11.77793 -1.16279,1.10653 -6.95798,-11.77793 z m 11.81544,-1.38785 c 0.5814,0.63766 1.05027,1.31283 1.40661,2.06302 0.35633,0.75018 0.56264,1.51913 0.6189,2.26931 0.0563,0.76894 -0.0375,1.51913 -0.28132,2.21305 -0.22506,0.69393 -0.65641,1.33159 -1.29407,1.93174 -0.82521,0.78769 -1.68792,1.16279 -2.58815,1.14403 -0.91898,-0.0375 -1.76294,-0.46887 -2.55063,-1.29407 -0.60015,-0.61891 -1.06902,-1.31283 -1.4066,-2.04426 -0.35634,-0.75019 -0.56264,-1.50037 -0.61891,-2.28807 -0.0563,-0.75019 0.0375,-1.48162 0.30008,-2.21305 0.26256,-0.73143 0.69392,-1.36909 
 1.27531,-1.93173 0.80646,-0.76895 1.65042,-1.14404 2.56939,-1.12528 0.90023,0 1.76294,0.43135 2.56939,1.27531 z m 0.5814,4.44486 c -0.075,-0.54388 -0.28132,-1.10652 -0.5814,-1.65041 -0.28132,-0.54389 -0.65641,-1.05026 -1.12528,-1.53788 -0.54388,-0.5814 -1.10652,-0.88147 -1.66916,-0.91898 -0.56264,-0.0375 -1.08777,0.18754 -1.59415,0.65641 -0.4126,0.39385 -0.67517,0.82521 -0.80645,1.33158 -0.13128,0.48762 -0.16879,1.01276 -0.075,1.5754 0.0938,0.54388 0.28132,1.08777 0.5814,1.63165 0.30007,0.56264 0.65641,1.06902 1.10652,1.53789 0.54389,0.58139 1.10653,0.88146 1.66917,0.91897 0.58139,0.0563 1.10652,-0.16879 1.63165,-0.65641 0.39385,-0.37509 0.65642,-0.82521 0.80646,-1.31283 0.13128,-0.50637 0.15003,-1.0315 0.0563,-1.57539 z m 8.27081,0.56264 -1.29407,1.21905 -0.80645,-4.89496 -7.46436,-5.32633 1.2003,-1.14404 5.90772,4.23856 -1.59415,-8.32708 1.25656,-1.21905 z m 8.92722,-29.01348 -3.28206,3.13203 5.90772,10.015 -1.23781,1.18154 -5.92648,-10.01499 -3.28206,3.15078 -0.76895,-1.27531 7.8
 3946,-7.46436 z m 8.66466,0.43136 c -0.6189,0.63766 -1.14403,1.21905 -1.57539,1.76294 -0.4126,0.54389 -0.73143,1.03151 -0.91898,1.48162 -0.2063,0.45011 -0.28132,0.88147 -0.24381,1.27532 0.0563,0.4126 0.24381,0.78769 0.5814,1.12528 0.28132,0.30007 0.60014,0.43135 0.95648,0.39385 0.33759,-0.0375 0.73144,-0.26257 1.16279,-0.65642 0.3751,-0.35634 0.67517,-0.80645 0.91898,-1.35033 0.22506,-0.54389 0.39385,-1.08778 0.50638,-1.65042 z m 2.10053,3.56339 c -0.0563,0.16879 -0.11253,0.4126 -0.18755,0.71268 -0.075,0.31883 -0.18755,0.60015 -0.30008,0.88147 -0.11252,0.30007 -0.28132,0.60015 -0.46886,0.90022 -0.2063,0.31883 -0.46887,0.63766 -0.82521,0.95649 -0.54388,0.52513 -1.14403,0.78769 -1.78169,0.80645 -0.65642,0 -1.23781,-0.26257 -1.72543,-0.76894 -0.52513,-0.56264 -0.84396,-1.14404 -0.95649,-1.74419 -0.11253,-0.60015 -0.0563,-1.25656 0.18755,-1.95048 0.24381,-0.67517 0.65641,-1.38785 1.2003,-2.11928 0.56264,-0.73143 1.25656,-1.51913 2.08176,-2.34434 -0.0938,-0.15003 -0.16879,-0.26256 -0.225
 05,-0.37509 -0.0563,-0.0938 -0.13128,-0.18755 -0.22506,-0.28132 -0.18754,-0.2063 -0.37509,-0.31883 -0.58139,-0.37509 -0.18755,-0.0375 -0.39385,-0.0375 -0.61891,0.0187 -0.2063,0.075 -0.43135,0.18755 -0.65641,0.33759 -0.2063,0.15003 -0.43136,0.33758 -0.67517,0.56264 -0.33758,0.33758 -0.69392,0.76894 -1.03151,1.31282 -0.33758,0.54389 -0.60014,1.01276 -0.78769,1.38785 l -0.0563,0.0563 -0.88147,-1.38784 c 0.1688,-0.28132 0.45012,-0.67517 0.84396,-1.18155 0.3751,-0.52513 0.76895,-0.97524 1.2003,-1.36909 0.84396,-0.8252 1.63166,-1.29407 2.30683,-1.44411 0.69392,-0.13128 1.31283,0.075 1.87547,0.65642 0.0938,0.11252 0.2063,0.24381 0.30007,0.39384 0.11253,0.15004 0.2063,0.28132 0.28132,0.41261 l 3.3946,5.73893 -1.16279,1.10652 z m 6.22655,-4.20105 c -0.50638,0.48762 -1.03151,0.86272 -1.5754,1.12528 -0.52513,0.26257 -0.99399,0.45011 -1.4066,0.56264 l -0.93773,-1.50037 0.075,-0.0563 c 0.15004,-0.0188 0.35634,-0.0375 0.58139,-0.0563 0.24381,-0.0375 0.50638,-0.11253 0.82521,-0.2063 0.28132,-0.093
 8 0.58139,-0.22506 0.90022,-0.39385 0.31883,-0.16879 0.61891,-0.39385 0.90023,-0.65641 0.58139,-0.56264 0.93773,-1.10653 1.06901,-1.63166 0.11253,-0.52513 -0.0188,-1.01275 -0.4126,-1.42535 -0.2063,-0.22506 -0.45011,-0.30008 -0.73143,-0.26257 -0.28132,0.0375 -0.6189,0.16879 -1.01275,0.4126 -0.2063,0.11253 -0.43136,0.24381 -0.69393,0.41261 -0.28132,0.16879 -0.56264,0.33758 -0.84396,0.50637 -0.6189,0.31883 -1.16279,0.46887 -1.63165,0.43136 -0.48762,-0.0563 -0.90023,-0.24381 -1.25657,-0.6189 -0.30007,-0.33759 -0.52513,-0.69393 -0.65641,-1.10653 -0.13128,-0.43136 -0.16879,-0.88147 -0.11253,-1.38785 0.0563,-0.46886 0.22506,-0.97524 0.50638,-1.50037 0.26256,-0.52513 0.65641,-1.03151 1.16279,-1.50037 0.4126,-0.39385 0.88147,-0.73144 1.38784,-1.03151 0.50638,-0.28132 0.97525,-0.46887 1.3691,-0.5814 l 0.88147,1.44411 -0.0563,0.0563 c -0.11253,0 -0.28132,0.0375 -0.50637,0.0563 -0.22506,0.0375 -0.48763,0.11253 -0.76895,0.22506 -0.26256,0.075 -0.52513,0.2063 -0.8252,0.37509 -0.30008,0.16879 -0.5
 6264,0.3751 -0.82521,0.61891 -0.52513,0.50637 -0.84396,1.01275 -0.95649,1.53788 -0.11252,0.52513 0.0188,0.97524 0.3751,1.35034 0.18754,0.2063 0.43136,0.30007 0.73143,0.28132 0.28132,0 0.6189,-0.13129 1.01275,-0.35634 0.26257,-0.13129 0.50638,-0.30008 0.76894,-0.46887 0.28132,-0.15004 0.52513,-0.31883 0.7877,-0.46887 0.60015,-0.33758 1.12528,-0.48762 1.6129,-0.46886 0.48762,0.0187 0.90023,0.22505 1.27532,0.60015 0.30007,0.31883 0.50638,0.71267 0.65641,1.16279 0.13129,0.45011 0.16879,0.91897 0.0938,1.4066 -0.075,0.52513 -0.24381,1.0315 -0.54389,1.57539 -0.28132,0.52513 -0.69392,1.03151 -1.21905,1.53788 z m 10.67141,-10.48386 -1.4066,1.35034 -5.12003,-0.93774 -0.22506,1.76294 1.61291,2.71943 -1.18155,1.12528 -6.95798,-11.77793 1.18154,-1.12528 4.46361,7.55813 0.75019,-7.33308 1.53788,-1.46286 -0.84396,7.05175 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3061"
+         d="m 383.62682,392.9854 c -0.58139,0.60015 -1.2003,1.08777 -1.83796,1.50038 -0.65641,0.4126 -1.35033,0.75018 -2.11927,1.01275 l -1.10653,-1.65041 0.0938,-0.0938 c 0.75019,-0.0188 1.50038,-0.22505 2.26932,-0.60015 0.75019,-0.37509 1.38784,-0.8252 1.91297,-1.35033 0.84397,-0.88147 1.33159,-1.70668 1.44411,-2.51313 0.0938,-0.80645 -0.11252,-1.46286 -0.63765,-1.98799 -0.28132,-0.28132 -0.60015,-0.41261 -0.95649,-0.43136 -0.35634,-0.0188 -0.73143,0.075 -1.12528,0.30007 -0.33759,0.20631 -0.71268,0.45012 -1.14404,0.75019 -0.4126,0.30008 -0.8252,0.5814 -1.23781,0.82521 -0.76894,0.50637 -1.50037,0.75018 -2.19429,0.76894 -0.69393,0.0188 -1.29408,-0.22506 -1.80045,-0.73143 -0.86272,-0.86272 -1.23781,-1.93174 -1.08777,-3.24456 0.15003,-1.29407 0.78769,-2.53188 1.93173,-3.69467 0.6189,-0.63766 1.25656,-1.16279 1.89422,-1.53789 0.65641,-0.39384 1.23781,-0.69392 1.80045,-0.90022 l 1.03151,1.55664 -0.0938,0.0938 c -0.54388,0.0188 -1.18154,0.22506 -1.89422,0.56264 -0.71268,0.35634 -1.36909,
 0.82521 -1.95048,1.4066 -0.73144,0.75019 -1.14404,1.50038 -1.25657,2.26932 -0.11253,0.75018 0.0938,1.38784 0.60015,1.87546 0.26257,0.26257 0.5814,0.41261 0.93774,0.46887 0.35633,0.0375 0.78769,-0.0938 1.29407,-0.4126 0.31883,-0.2063 0.73143,-0.46887 1.23781,-0.82521 0.52513,-0.33758 0.95648,-0.6189 1.31282,-0.84396 0.73144,-0.4126 1.4066,-0.6189 2.00675,-0.6189 0.61891,0 1.16279,0.24381 1.63166,0.71268 0.39385,0.39384 0.71268,0.88147 0.90022,1.46286 0.20631,0.58139 0.28132,1.2003 0.22506,1.8192 -0.075,0.67517 -0.26257,1.35034 -0.5814,2.00675 -0.33758,0.67517 -0.8252,1.35034 -1.50037,2.04426 z m 6.32033,-15.11626 c -0.0938,-0.13129 -0.1688,-0.24381 -0.24382,-0.33759 -0.075,-0.075 -0.16879,-0.16879 -0.26256,-0.26256 -0.43136,-0.43136 -0.90022,-0.65642 -1.36909,-0.65642 -0.48762,0 -0.97524,0.26257 -1.50038,0.7877 -0.56264,0.58139 -0.90022,1.27532 -0.97524,2.08177 -0.075,0.78769 0.0938,1.55664 0.52513,2.30682 z m 2.08176,6.54538 c -0.93773,0.93773 -1.87546,1.46286 -2.85071,1.57539 -0.97
 524,0.0938 -1.89422,-0.28132 -2.75693,-1.10653 -1.23781,-1.2378 -1.93173,-2.68191 -2.04426,-4.35108 -0.13128,-1.66917 0.37509,-3.09452 1.51913,-4.25731 0.76894,-0.76894 1.53788,-1.18154 2.32558,-1.21905 0.78769,-0.0188 1.53788,0.30007 2.2318,0.97524 0.13128,0.13128 0.30008,0.33758 0.52513,0.63766 0.24381,0.28132 0.48762,0.63766 0.76894,1.06901 l -4.93247,5.04501 c 0.0938,0.13128 0.18754,0.26257 0.28132,0.39385 0.11252,0.11253 0.2063,0.22505 0.31882,0.31883 0.56265,0.56264 1.2003,0.8252 1.85672,0.80645 0.67517,-0.0375 1.33158,-0.37509 1.96924,-1.01275 0.43136,-0.45012 0.80645,-0.994 1.08777,-1.65041 0.30007,-0.63766 0.48762,-1.23781 0.58139,-1.7817 l 0.075,-0.0563 0.994,1.46286 c -0.13128,0.28132 -0.24381,0.52513 -0.33758,0.75019 -0.0938,0.22506 -0.24381,0.48762 -0.43136,0.80645 -0.18755,0.31883 -0.35634,0.58139 -0.52513,0.80645 -0.15004,0.22506 -0.3751,0.48762 -0.65642,0.7877 z m 5.45761,-16.44785 c 0.0938,0.0938 0.22506,0.24381 0.3751,0.4126 0.13128,0.18755 0.26256,0.35634 0.35634,
 0.50638 l 3.4321,5.38259 -1.12528,1.14403 -3.0195,-4.70742 c -0.16879,-0.26256 -0.31883,-0.48762 -0.45011,-0.67517 -0.13129,-0.16879 -0.28132,-0.33758 -0.45012,-0.50637 -0.33758,-0.33759 -0.67516,-0.50638 -1.01275,-0.50638 -0.33758,0 -0.73143,0.22506 -1.16279,0.67517 -0.30007,0.30007 -0.54388,0.73143 -0.75018,1.27532 -0.18755,0.54388 -0.33759,1.10652 -0.45012,1.68792 l 3.93848,6.18904 -1.12528,1.14403 -5.28881,-8.28956 1.12528,-1.14404 0.58139,0.91898 c 0.13128,-0.73143 0.30008,-1.36909 0.50638,-1.91297 0.2063,-0.54389 0.50637,-1.01276 0.91898,-1.42536 0.58139,-0.58139 1.18154,-0.90022 1.80045,-0.93773 0.63765,-0.0375 1.2378,0.2063 1.80044,0.76894 z m 4.40735,-12.99699 7.35183,11.55288 -1.12528,1.14403 -0.54388,-0.86271 c -0.15004,0.86271 -0.33759,1.51913 -0.50638,1.95049 -0.18755,0.43135 -0.46887,0.84396 -0.8252,1.21905 -0.63766,0.63766 -1.35034,0.95649 -2.11928,0.93773 -0.7877,-0.0375 -1.55664,-0.43135 -2.34434,-1.18154 -0.65641,-0.65641 -1.18154,-1.36909 -1.55663,-2.13803 -0.3938
 5,-0.7877 -0.63766,-1.55664 -0.73144,-2.34434 -0.0938,-0.76894 -0.0375,-1.51913 0.1688,-2.25056 0.2063,-0.71268 0.58139,-1.35033 1.10652,-1.87547 0.35634,-0.35633 0.71268,-0.65641 1.08777,-0.88147 0.3751,-0.24381 0.76894,-0.4126 1.2003,-0.52513 l -2.30682,-3.58214 z m 1.89422,5.90772 c -0.4126,0.13129 -0.78769,0.30008 -1.10652,0.48763 -0.31883,0.2063 -0.63766,0.45011 -0.91898,0.75018 -0.4126,0.4126 -0.69392,0.90023 -0.80645,1.42536 -0.13128,0.54388 -0.13128,1.10652 0,1.68792 0.11253,0.52513 0.33758,1.06901 0.67517,1.63165 0.33758,0.56264 0.71267,1.05027 1.14403,1.46287 0.48762,0.48762 0.97524,0.75019 1.46287,0.80645 0.46886,0.0375 0.93773,-0.18755 1.4066,-0.65641 0.33758,-0.35634 0.60015,-0.7877 0.76894,-1.31283 0.18754,-0.52513 0.31883,-1.03151 0.4126,-1.53788 z m 15.2288,-3.99474 c -0.5814,0.58139 -1.18155,1.08777 -1.83796,1.50037 -0.63766,0.4126 -1.35034,0.75019 -2.11928,1.01275 l -1.08777,-1.65041 0.075,-0.0938 c 0.75019,-0.0187 1.51913,-0.22506 2.26931,-0.60015 0.75019,-0.37509
  1.38785,-0.82521 1.91298,-1.35034 0.86272,-0.88147 1.33158,-1.70667 1.44411,-2.51312 0.11253,-0.80645 -0.11253,-1.46287 -0.63766,-1.988 -0.28132,-0.28132 -0.60015,-0.43135 -0.95649,-0.45011 -0.33758,-0.0188 -0.71267,0.0938 -1.12528,0.31883 -0.31883,0.2063 -0.71267,0.45011 -1.12528,0.75019 -0.43135,0.30007 -0.84396,0.56264 -1.23781,0.8252 -0.78769,0.50638 -1.51912,0.75019 -2.19429,0.76894 -0.69392,0 -1.29407,-0.24381 -1.8192,-0.75018 -0.86272,-0.84396 -1.21906,-1.91298 -1.08778,-3.22581 0.15004,-1.29407 0.7877,-2.53188 1.93174,-3.69467 0.63765,-0.63766 1.25656,-1.16279 1.91297,-1.55663 0.63766,-0.3751 1.23781,-0.67517 1.7817,-0.88147 l 1.0315,1.55663 -0.075,0.0938 c -0.56264,0.0187 -1.20029,0.2063 -1.91297,0.56264 -0.71268,0.35634 -1.36909,0.8252 -1.95049,1.4066 -0.71268,0.75018 -1.14403,1.50037 -1.23781,2.26931 -0.11252,0.75019 0.075,1.38785 0.5814,1.87547 0.26256,0.26257 0.58139,0.4126 0.93773,0.45011 0.3751,0.0375 0.80645,-0.0938 1.29407,-0.39385 0.31883,-0.2063 0.73144,-0.46886 
 1.25657,-0.8252 0.50637,-0.33759 0.93773,-0.61891 1.31282,-0.84396 0.73144,-0.43136 1.38785,-0.63766 2.00675,-0.61891 0.60015,0 1.14404,0.24381 1.61291,0.71268 0.4126,0.39385 0.71267,0.88147 0.91897,1.46287 0.20631,0.58139 0.26257,1.18154 0.20631,1.8192 -0.0563,0.67517 -0.26257,1.33158 -0.5814,2.00675 -0.31883,0.67517 -0.8252,1.35034 -1.50037,2.04426 z m 3.26331,-17.32932 0.73143,1.12528 -2.34433,2.36309 2.43811,3.82595 c 0.13128,0.2063 0.28132,0.41261 0.45011,0.65642 0.16879,0.22505 0.31883,0.4126 0.45011,0.52513 0.30008,0.30007 0.5814,0.43136 0.88147,0.43136 0.30007,-0.0188 0.63766,-0.22506 1.03151,-0.61891 0.16879,-0.16879 0.33758,-0.39385 0.50637,-0.69392 0.1688,-0.28132 0.28132,-0.48762 0.31883,-0.60015 l 0.0563,-0.0563 0.78769,1.18155 c -0.16879,0.28132 -0.35634,0.58139 -0.58139,0.86271 -0.2063,0.30008 -0.43136,0.54389 -0.61891,0.75019 -0.54388,0.56264 -1.10652,0.88147 -1.65041,0.93773 -0.54388,0.075 -1.08777,-0.15003 -1.63165,-0.67516 -0.13129,-0.13129 -0.24381,-0.26257 -0.35
 634,-0.41261 -0.11253,-0.15003 -0.22506,-0.31883 -0.35634,-0.50637 l -2.85071,-4.44486 -0.75019,0.76894 -0.73143,-1.12528 0.76894,-0.76894 -1.51913,-2.38184 1.12528,-1.16279 1.51913,2.38184 z m 7.95198,-1.63166 c -0.60015,0.63766 -1.10652,1.25657 -1.50037,1.80045 -0.4126,0.56264 -0.71268,1.06902 -0.88147,1.51913 -0.18755,0.46887 -0.26257,0.90023 -0.18755,1.29407 0.0563,0.39385 0.26257,0.75019 0.60015,1.08778 0.30008,0.30007 0.61891,0.4126 0.97524,0.37509 0.33759,-0.0563 0.73144,-0.28132 1.14404,-0.71268 0.35634,-0.37509 0.65641,-0.8252 0.86271,-1.36909 0.20631,-0.54389 0.35634,-1.10653 0.45012,-1.66917 z m 2.21305,3.48837 c -0.0375,0.1688 -0.0938,0.41261 -0.16879,0.71268 -0.0563,0.30008 -0.15004,0.60015 -0.24381,0.88147 -0.11253,0.30008 -0.26257,0.61891 -0.45011,0.93773 -0.18755,0.31883 -0.45011,0.63766 -0.7877,0.97525 -0.52513,0.54388 -1.12528,0.8252 -1.76294,0.86271 -0.65641,0.0188 -1.23781,-0.2063 -1.74418,-0.71268 -0.54389,-0.54388 -0.88147,-1.10652 -1.01275,-1.70667 -0.15004,-0
 .60015 -0.0938,-1.25656 0.11252,-1.96924 0.22506,-0.67517 0.60015,-1.4066 1.14404,-2.15679 0.52513,-0.75019 1.18154,-1.55664 1.98799,-2.41935 -0.0938,-0.13128 -0.16879,-0.24381 -0.24381,-0.33758 -0.0563,-0.11253 -0.13128,-0.20631 -0.22505,-0.28133 -0.2063,-0.2063 -0.39385,-0.31882 -0.60015,-0.35633 -0.18755,-0.0375 -0.39385,-0.0375 -0.61891,0.0375 -0.2063,0.075 -0.43135,0.18754 -0.63766,0.35633 -0.2063,0.1688 -0.43135,0.35634 -0.65641,0.5814 -0.33758,0.35634 -0.67517,0.80645 -0.994,1.35034 -0.31883,0.56264 -0.56264,1.0315 -0.73143,1.42535 l -0.0563,0.0563 -0.93774,-1.35033 c 0.1688,-0.30008 0.43136,-0.71268 0.80645,-1.23781 0.35634,-0.52513 0.73144,-0.994 1.14404,-1.4066 0.82521,-0.84396 1.59415,-1.35034 2.26931,-1.51913 0.67517,-0.15004 1.31283,0.0375 1.89423,0.60015 0.0938,0.11253 0.2063,0.24381 0.31883,0.37509 0.11252,0.15004 0.2063,0.28132 0.28132,0.41261 l 3.60089,5.6264 -1.12528,1.12528 z m 2.02551,-14.29106 0.71268,1.12528 -2.32558,2.38185 2.4381,3.82595 c 0.13129,0.18755 0.2
 6257,0.4126 0.45012,0.63766 0.16879,0.24381 0.31882,0.4126 0.43135,0.54388 0.30008,0.28132 0.60015,0.43136 0.90023,0.41261 0.28132,0 0.63766,-0.2063 1.0315,-0.61891 0.1688,-0.16879 0.33759,-0.39384 0.50638,-0.67516 0.16879,-0.30008 0.26257,-0.48763 0.31883,-0.60015 l 0.0563,-0.075 0.7877,1.18154 c -0.16879,0.30008 -0.37509,0.5814 -0.5814,0.88147 -0.22505,0.28132 -0.43135,0.54389 -0.6189,0.73143 -0.56264,0.56264 -1.10652,0.88147 -1.65041,0.95649 -0.56264,0.0563 -1.10653,-0.16879 -1.63166,-0.69392 -0.13128,-0.13128 -0.24381,-0.26257 -0.35634,-0.4126 -0.11252,-0.13129 -0.24381,-0.30008 -0.37509,-0.50638 l -2.83195,-4.44486 -0.76895,0.76894 -0.71267,-1.10652 0.76894,-0.7877 -1.51913,-2.38184 1.12528,-1.16279 1.51913,2.38184 z m 6.88296,-7.033 5.30757,8.27081 -1.12528,1.14404 -0.60015,-0.90023 c -0.13128,0.71268 -0.28132,1.35034 -0.48762,1.89422 -0.2063,0.54389 -0.50637,1.03151 -0.91898,1.44411 -0.58139,0.5814 -1.18154,0.90023 -1.80044,0.93774 -0.61891,0.0375 -1.21906,-0.22506 -1.7817,-0
 .76894 -0.13128,-0.13129 -0.26256,-0.28132 -0.37509,-0.43136 -0.11253,-0.15004 -0.24381,-0.31883 -0.3751,-0.50638 l -3.4321,-5.38259 1.12528,-1.14403 3.0195,4.70742 c 0.11253,0.2063 0.26257,0.4126 0.43136,0.63766 0.18755,0.24381 0.31883,0.4126 0.45011,0.52513 0.33759,0.35634 0.69392,0.52513 1.05026,0.50638 0.33759,0 0.73144,-0.20631 1.14404,-0.63766 0.30007,-0.30008 0.54388,-0.73144 0.75019,-1.29408 0.2063,-0.56264 0.35633,-1.12528 0.45011,-1.66916 l -3.95724,-6.18904 z m 9.78994,4.03226 c -0.50637,0.50637 -1.01275,0.90022 -1.53788,1.18154 -0.52513,0.28132 -0.994,0.48762 -1.4066,0.6189 l -0.97525,-1.46286 0.0563,-0.075 c 0.16879,0 0.35634,-0.0375 0.60015,-0.075 0.22505,-0.0375 0.50637,-0.11253 0.80645,-0.22505 0.28132,-0.11253 0.58139,-0.24381 0.88147,-0.43136 0.31883,-0.16879 0.60015,-0.4126 0.88147,-0.69392 0.56264,-0.56264 0.90022,-1.12528 1.01275,-1.65041 0.11253,-0.54389 -0.0563,-1.01276 -0.46887,-1.42536 -0.2063,-0.2063 -0.45011,-0.28132 -0.73143,-0.22506 -0.28132,0.0563 -0.61
 89,0.18755 -0.994,0.43136 -0.18754,0.13128 -0.43135,0.28132 -0.69392,0.46887 -0.26256,0.16879 -0.52513,0.33758 -0.80645,0.50637 -0.6189,0.35634 -1.14403,0.50638 -1.63166,0.48763 -0.48762,-0.0188 -0.90022,-0.20631 -1.27531,-0.56264 -0.31883,-0.31883 -0.54389,-0.67517 -0.67517,-1.08778 -0.15004,-0.4126 -0.2063,-0.86271 -0.16879,-1.36909 0.0375,-0.48762 0.18754,-0.99399 0.45011,-1.51912 0.24381,-0.54389 0.6189,-1.06902 1.10652,-1.55664 0.39385,-0.41261 0.84396,-0.76894 1.35034,-1.06902 0.50638,-0.30007 0.95649,-0.50638 1.35034,-0.6189 l 0.93773,1.38784 -0.0563,0.075 c -0.11253,0 -0.28132,0.0375 -0.50638,0.075 -0.22506,0.0563 -0.46887,0.13128 -0.76894,0.24381 -0.24381,0.0938 -0.52513,0.22506 -0.80645,0.4126 -0.28132,0.18755 -0.56264,0.39385 -0.80645,0.65642 -0.48763,0.50637 -0.7877,1.01275 -0.90023,1.55663 -0.0938,0.52514 0.0375,0.97525 0.4126,1.33159 0.20631,0.2063 0.45012,0.28132 0.75019,0.26256 0.28132,-0.0188 0.61891,-0.15004 1.01275,-0.39385 0.24381,-0.15003 0.48763,-0.31883 0.7501
 9,-0.48762 0.26257,-0.16879 0.50638,-0.33758 0.76894,-0.50637 0.5814,-0.35634 1.10653,-0.52513 1.59415,-0.52513 0.48762,0 0.90022,0.18754 1.27532,0.56264 0.31883,0.30007 0.56264,0.69392 0.71267,1.12528 0.15004,0.45011 0.20631,0.91897 0.15004,1.4066 -0.0563,0.52513 -0.22505,1.05026 -0.48762,1.59414 -0.28132,0.54389 -0.67517,1.06902 -1.16279,1.5754 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3063"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="507.19437"
+         x="233.59662"
+         xml:space="preserve">Task Execution,</text>
+      <text
+         id="text3065"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="528.19958"
+         x="236.89745"
+         xml:space="preserve">Data Exchange</text>
+      <text
+         id="text3067"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="507.19437"
+         x="646.51672"
+         xml:space="preserve">Task Execution,</text>
+      <text
+         id="text3069"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="528.19958"
+         x="649.8175"
+         xml:space="preserve">Data Exchange</text>
+      <path
+         id="path3071"
+         d="m 564.90948,478.2629 -122.78684,1.87546 0.0938,5.62641 122.76808,-1.87547 z m -15.24755,15.32256 20.8552,-12.60314 -21.23029,-11.94672 c -1.35034,-0.76894 -3.05701,-0.28132 -3.82595,1.06901 -0.75019,1.35034 -0.28132,3.07577 1.06901,3.84471 l 17.02925,9.58364 -0.075,-4.85746 -16.72917,10.09001 c -1.33158,0.80645 -1.74418,2.53188 -0.93773,3.86347 0.78769,1.33158 2.53188,1.76294 3.8447,0.95648 z m -92.21672,-23.14326 -20.85519,12.60314 21.23028,11.94672 c 1.35034,0.76895 3.07577,0.28133 3.82596,-1.06901 0.76894,-1.35034 0.28132,-3.07577 -1.06902,-3.82595 l 0,0 -17.02924,-9.6024 0.075,4.87622 16.72917,-10.10877 c 1.33158,-0.80645 1.76293,-2.53188 0.95648,-3.86346 -0.80645,-1.33158 -2.53188,-1.76294 -3.86346,-0.95649 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <text
+         id="text3073"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="516.58087"
+         x="466.24557"
+         xml:space="preserve">Exchange </text>
+      <text
+         id="text3075"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="537.58606"
+         x="451.39188"
+         xml:space="preserve">Intermediate</text>
+      <text
+         id="text3077"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="558.59131"
+         x="476.7482"
+         xml:space="preserve">Results</text>
+      <text
+         id="text3079"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="579.59656"
+         x="418.08359"
+         xml:space="preserve">(</text>
+      <text
+         id="text3081"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="579.59656"
+         x="426.03558"
+         xml:space="preserve">shuffle</text>
+      <text
+         id="text3083"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="579.59656"
+         x="490.85172"
+         xml:space="preserve">/ </text>
+      <text
+         id="text3085"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="579.59656"
+         x="504.95523"
+         xml:space="preserve">broadcast</text>
+      <text
+         id="text3087"
+         style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana"
+         y="579.59656"
+         x="591.22675"
+         xml:space="preserve">) </text>
+    </g>
+  </g>
+</svg>

http://git-wip-us.apache.org/repos/asf/flink/blob/f1ee90cc/docs/internals/fig/LICENSE.txt
----------------------------------------------------------------------
diff --git a/docs/internals/fig/LICENSE.txt b/docs/internals/fig/LICENSE.txt
new file mode 100644
index 0000000..35b8673
--- /dev/null
+++ b/docs/internals/fig/LICENSE.txt
@@ -0,0 +1,17 @@
+All image files in the folder and its subfolders are
+licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
\ No newline at end of file