<!--
/**
 * 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 id="lineageGraph">
  <h4><small>Legends</small></h4>
  <ul class="lineage-legend">
    <li class="lineage-legend-feed-inst"><span>Feed instance</span></li>
    <li class="lineage-legend-feed-inst lineage-legend-terminal"><span>Feed instance (terminal)</span></li>
    <li class="lineage-legend-process-inst"><span>Process instance</span></li>
    <li class="lineage-legend-process-inst lineage-legend-terminal"><span>Process instance (terminal)</span></li>
  </ul>
</div>
<div>
  <center>
    <svg id="lineage-graph"></svg>
  </center>
</div>
<div>
  <div id="lineage-info-panel"></div>
</div>