<!--
 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 name="Log4j IOStreams"
         xmlns="http://maven.apache.org/DECORATION/1.4.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 http://maven.apache.org/xsd/decoration-1.4.0.xsd">
  <body>
    <links>
      <item name="Apache" href="http://www.apache.org/" />
      <item name="Logging Services" href="http://logging.apache.org/"/>
      <item name="Log4j" href="../index.html"/>
    </links>

    <!-- Component-specific reports -->
    <menu ref="reports"/>

	<!-- Overall Project Info -->
    <menu name="Log4j Project Information" img="icon-info-sign">
      <item name="Dependencies" href="../dependencies.html" />
      <item name="Dependency Convergence" href="../dependency-convergence.html" />
      <item name="Dependency Management" href="../dependency-management.html" />
      <item name="Project Team" href="../team-list.html" />
      <item name="Mailing Lists" href="../mail-lists.html" />
      <item name="Issue Tracking" href="../issue-tracking.html" />
      <item name="Project License" href="../license.html" />
      <item name="Source Repository" href="../source-repository.html" />
      <item name="Project Summary" href="../project-summary.html" />
    </menu>

    <menu name="Log4j Project Reports" img="icon-cog">
      <item name="Changes Report" href="../changes-report.html" />
      <item name="JIRA Report" href="../jira-report.html" />
      <item name="Surefire Report" href="../surefire-report.html" />
      <item name="RAT Report" href="../rat-report.html" />
    </menu>
  </body>
</project>
