<?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.3.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/DECORATION/1.3.0 http://maven.apache.org/xsd/decoration-1.3.0.xsd">
<skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.6</version>
</skin>

<bannerLeft>
    <name>Apache Ranger</name>
    <src>/ranger.jpg</src>
    <height>200px</height>
    <width>400px</width>
    <href>https://ranger.apache.org</href>
</bannerLeft>

<body>
    <breadcrumbs>
      <item name="Ranger"  href="http://ranger.apache.org/" />
    </breadcrumbs>
    <menu name="Overview">
      <item name="Introduction" href="index.html"/>
      <item name="News" href="https://cwiki.apache.org/confluence/display/RANGER/News" />
      <item name="Download" href="download.html"/>
      <item name="FAQ" href="faq.html"/>
    </menu>
    <menu name="Resources">
	  <item name="Wiki" href="https://cwiki.apache.org/confluence/display/RANGER/Index" />
      <item name="Quick Start Guide" href="quick_start_guide.html"/>
      <item name="Ranger REST API Documentation" href="apidocs/index.html"/>
      <item name="Ranger KMS REST API Documentation" href="kms/apidocs/index.html"/>
      <!-- According to http://jira.codehaus.org/browse/MNGSITE-152 -->
      <item name="License"         href="https://www.apache.org/licenses/" />
    </menu>
    <menu name="Project Information">
        <item name="Project Summary" href="project-summary.html"/>
        <item name="Mailing Lists" href="mail-lists.html"/>
        <item name="Issue Tracking" href="https://issues.apache.org/jira/browse/RANGER"/>
        <item name="Team" href="team-list.html"/>
	    <item name="Security Advisories" href="https://cwiki.apache.org/confluence/display/RANGER/Vulnerabilities+found+in+Ranger" />
    </menu>
    <menu name="Releases">
        <item name="2.0.0" href="https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+2.0.0+-+Release+Notes" />
        <item name="1.2.0" href="https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+1.2.0+-+Release+Notes" />
        <item name="1.1.0" href="https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+1.1.0+-+Release+Notes" />
        <item name="1.0.0" href="https://cwiki.apache.org/confluence/display/RANGER/1.0.0+Release+-+Apache+Ranger" />
        <item name="0.7.1" href="https://cwiki.apache.org/confluence/display/RANGER/0.7.1+Release+-+Apache+Ranger" />
        <item name="0.7.0" href="https://cwiki.apache.org/confluence/display/RANGER/0.7.0+Release+-+Apache+Ranger" />
        <item name="0.6.3" href="https://cwiki.apache.org/confluence/display/RANGER/0.6.3+Release+-+Apache+Ranger" />
        <item name="0.6.2" href="https://cwiki.apache.org/confluence/display/RANGER/0.6.2+Release+-+Apache+Ranger" />
        <item name="0.6.1" href="https://cwiki.apache.org/confluence/display/RANGER/0.6.1+Release+-+Apache+Ranger" />
        <item name="0.6.0" href="https://cwiki.apache.org/confluence/display/RANGER/0.6+Release+-+Apache+Ranger" />
        <item name="0.5.3" href="https://cwiki.apache.org/confluence/display/RANGER/0.5.3+Release+-+Apache+Ranger" />
        <item name="0.5.2" href="https://cwiki.apache.org/confluence/display/RANGER/0.5.2+Release+-+Apache+Ranger" />
        <item name="0.5.1" href="https://cwiki.apache.org/confluence/display/RANGER/0.5.1+Release+-+Apache+Ranger" />
        <item name="0.5.0" href="https://cwiki.apache.org/confluence/display/RANGER/0.5+Release+-+Apache+Ranger" />
        <item name="0.4.0" href="https://cwiki.apache.org/confluence/display/RANGER/0.4+Release" />
    </menu>

    <menu name="Apache" title="Apache Software Foundation">
        <item name="Home"            href="https://www.apache.org" />
        <item name="Events"          href="https://www.apache.org/events/current-event" />
        <item name="License"         href="https://www.apache.org/licenses/" />
        <item name="Sponsorship"     href="https://www.apache.org/foundation/sponsorship" />
        <item name="Security"        href="https://www.apache.org/security" />
        <item name="Thanks"          href="https://www.apache.org/foundation/thanks" />
        <item name="Code of Conduct" href="https://www.apache.org/foundation/policies/conduct" />
    </menu>

    <footer><![CDATA[
<p><a href="https://www.apache.org/foundation/contributing"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support the ASF" id="asf-logo" height="20" width="20" /></a>Copyright © 2011-2018 The Apache Software Foundation. Licensed under the <a href="https://www.apache.org/licenses/">Apache License, Version 2.0</a>.<br/>
Apache Ranger, Ranger, Apache, the Apache feather logo are trademarks of the <a href="https://www.apache.org">Apache Software Foundation</a>.<br/>
All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
]]></footer>

</body>

<poweredBy>
    <logo name="Maven" href="http://maven.apache.org/" img="https://maven.apache.org/images/logos/maven-feather.png"/>
</poweredBy>
<custom>
    <fluidoSkin>
        <sideBarEnabled>true</sideBarEnabled>
        <sourceLineNumbersEnabled>true</sourceLineNumbersEnabled>
		<!--
        <twitter>
            <user>Ranger4Hadoop</user>
            <showUser>true</showUser>
            <showFollowers>true</showFollowers>
        </twitter>
		-->
        <facebookLike />
        <skipGenerationDate>true</skipGenerationDate>
    </fluidoSkin>
</custom>
</project>
