<!--
  ~ 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="NPanday">
  <bannerRight>
    <src>./images/apache-incubator-logo.png</src>
  </bannerRight>

  <body>
    <links>
      <item name="Project Site" href="http://incubator.apache.org/projects/npanday.html"/>
      <item name="NPanday" href="http://incubator.apache.org/npanday"/>
      <item name="NPanday SVN" href="http://svn.apache.org/repos/asf/incubator/npanday/"/>
      <item name="Maven" href="http://maven.apache.org/"/>
      <item name="Mono Project" href="http://www.mono-project.com/"/>
      <item name="DotGNU" href="http://dotgnu.org/"/>
    </links>
    <menu name="General Info">
      <item name="About" href="assembly-plugin.html"/>
    </menu>
    ${reports}
  </body>
</project>