<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-->


<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
  <bannerLeft>
    <name>Apache HTrace</name>
    <href>http://htrace.incubator.apache.org/</href>
  </bannerLeft>
  <bannerRight>
    <src>http://htrace.incubator.apache.org/images/owl.png</src>
    <href>http://htrace.incubator.apache.org/</href>
  </bannerRight>
  <body>
    <menu name="Apache HTrace Project">
      <item name="Developer Guide" href="developer_guide.html"/>
      <item name="License" href="license.html" />
      <item name="Downloads" href="http://www.apache.org/dyn/closer.cgi/incubator/htrace/" />
      <item name="Distribution" href="dependency-management.html" />
      <item name="Dependency" href="htrace-core4/dependency-info.html" />
      <item name="Issue Tracking" href="issue-tracking.html" />
      <item name="CI" href="integration.html" />
      <item name="Mailing Lists" href="mail-lists.html" />
      <item name="Source Repository" href="source-repository.html" />
      <item name="Modules" href="modules.html" />
      <item name="Project Info" href="project-info.html" />
      <item name="Team" href="team-list.html" />
      <item name="Building" href="building.html" />
    </menu>
    <menu name="ASF">
        <item name="Apache Software Foundation"      href="http://www.apache.org/foundation/" />
        <item name="How Apache Works"      href="http://www.apache.org/foundation/how-it-works.html" />
        <item name="Sponsoring Apache"      href="http://www.apache.org/foundation/sponsorship.html" />
    </menu>
  </body>
 <custom>
    <reflowSkin>
      <theme>bootswatch-flatly</theme>
      <toc>top</toc>
      <highlightJs>true</highlightJs>
      <slogan position="bannerRight">A tracing framework for use with distributed systems</slogan>
    </reflowSkin>
 </custom>
    <skin>
      <groupId>lt.velykis.maven.skins</groupId>
      <artifactId>reflow-maven-skin</artifactId>
      <version>1.1.1</version>
    </skin>
</project>
