<!--
 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.4.0"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 https://maven.apache.org/xsd/decoration-1.4.0.xsd"
			name="log4cxx">

	<publishDate	position="right" />
	<version		position="right" />

	<bannerLeft>
		<name>Logging Services</name>
		<src>images/logos/ls-logo.jpg</src>
		<href>https://logging.apache.org</href>
		<title>Open the Apache Logging homepage</title>
	</bannerLeft>

	<body>
		<links>
			<item	name="Logging Wiki"
					href="https://wiki.apache.org/logging"
			/>
			<item	name="Apache"
					href="https://www.apache.org/"
			/>
			<item	name="Logging Services"
					href="https://logging.apache.org/"
			/>
			<item	name="GitHub"
					href="https://github.com/apache/logging-log4cxx"
			/>
		</links>

		<menu	name="About"
				img="icon-home">
			<item	name="What is log4cxx?"
					href="/index.html"
			/>
			<item	name="Project Information"
					href="project-info.html"
			/>
			<item	name="Generated Reports"
					href="project-reports.html"
			/>
		</menu>

		<menu	name="Usage"
				img="icon-book">
			<item	name="How to use log4cxx?"
					href="/usage.html"
			/>
			<item	name="API Documentation"
					href="/apidocs/index.html"
			/>
			<item	name="FAQ"
					href="/faq.html"
			/>
		</menu>

		<menu	name="Get"
				img="icon-cog">
			<item	name="Download"
					href="/download.html"
			/>
			<item	name="Changes"
					href="/changes-report.html"
			/>
			<item	name="License"
					href="/license.html"
			/>
		</menu>

		<menu	name="Community"
				img="icon-pencil">
			<item	name="Mailing Lists"
					href="/mail-lists.html"
			/>
			<item	name="Issue Tracking"
					href="/community/issue-tracking.html"
			/>
			<item	name="Wiki"
					href="https://wiki.apache.org/logging-log4cxx"
			/>
		</menu>

		<menu	name="Development"
				img="icon-pencil">
			<item	name="Repository"
					href="/source-repository.html"
			/>
			<item	name="Dependencies"
					href="dependencies.html"
			/>
			<item	name="Building"
					href="/building/index.html">
				<item	name="Apache Maven 2"
						href="/building/maven.html"
				/>
				<item	name="Autotools"
						href="/building/autotools.html"
				/>
				<item	name="CMake"
						href="/building/cmake.html"
				/>
				<item	name="Microsoft vcpkg"
						href="/building/vcpkg.html"
				/>
			</item>
		</menu>

		<menu	name="Apache"
				img="icon-info-sign">
			<item	name="Home"
					href="https://www.apache.org"
			/>
			<item	name="Sponsorship"
					href="https://www.apache.org/foundation/sponsorship.html"
			/>
			<item	name="Thanks"
					href="https://www.apache.org/foundation/thanks.html"
			/>
			<item	name="Conferences"
					href="https://www.apachecon.com"
			/>
		</menu>
	</body>
</project>
