<?xml version="1.0"?>
<!--
  ~ 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.
  -->

<!--
 +======================================================================+
 |****                                                              ****|
 |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
 |****                    DO NOT EDIT DIRECTLY                      ****|
 |****                                                              ****|
 +======================================================================+
 | TEMPLATE FILE: download-page-template.xml                            |
 | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
 +======================================================================+
 |                                                                      |
 | 1) Re-generate using: mvn commons:download-page                      |
 |                                                                      |
 | 2) Set the following properties in the component's pom:              |
 |    - commons.componentid (required, alphabetic, lower case)          |
 |    - commons.release.version (required)                              |
 |    - commons.binary.suffix (optional)                                |
 |      (defaults to "-bin", set to "" for pre-maven2 releases)         |
 |                                                                      |
 | 3) Example Properties                                                |
 |                                                                      |
 |  <properties>                                                        |
 |    <commons.componentid>math</commons.componentid>                   |
 |    <commons.release.version>1.2</commons.release.version>            |
 |  </properties>                                                       |
 |                                                                      |
 +======================================================================+
-->
<document>
  <properties>
    <title>Download Commons Proxy</title>
    <author email="dev@commons.apache.org">Commons Documentation Team</author>
  </properties>
  <body>
    <section name="Download Commons Proxy">
      <p>
        We recommend you use a mirror to download our release
        builds, but you <strong>must</strong> verify the integrity of
        the downloaded files using signatures downloaded from our main 
        distribution directories. Recent releases (48 hours) may not yet
        be available from the mirrors.
      </p>

      <p>
        You are currently using <b>[preferred]</b>.  If you
        encounter a problem with this mirror, please select another
        mirror.  If all mirrors are failing, there are <i>backup</i>
        mirrors (at the end of the mirrors list) that should be
        available.
        <br></br>
        [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"></img></a>[end]
      </p>

      <form action="[location]" method="get" id="SelectMirror">
        <p>
          Other mirrors: 
          <select name="Preferred">
          [if-any http]
            [for http]<option value="[http]">[http]</option>[end]
          [end]
          [if-any ftp]
            [for ftp]<option value="[ftp]">[ftp]</option>[end]
          [end]
          [if-any backup]
            [for backup]<option value="[backup]">[backup] (backup)</option>[end]
          [end]
          </select>
          <input type="submit" value="Change"></input>
        </p>
      </form>

      <p>
        The <code>KEYS</code> link links to the code signing keys used to sign the product.
        The <code>PGP</code> link downloads the OpenPGP compatible signature from our main site. 
        The <code>MD5</code> link downloads the checksum from the main site.
      </p>

      <p>
        For more information concerning Commons Proxy, see the 
        <a href="index.html" class="name">Commons Proxy</a> web site.
      </p>

      <p>
        <div class="links"><span class="link"><a href="http://www.apache.org/dist/commons/KEYS">KEYS</a></span></div>
        <ul class="downloads">
          <li class="group"><div class="links"><span class="label">Binary</span></div>
            <ul>
              <li class="download"><a href="[preferred]/commons/proxy/binaries/commons-proxy-1.0.tar.gz">1.0.tar.gz</a>
                <ul class="attributes">
                  <li><span class="md5">[<a href="http://www.apache.org/dist/commons/proxy/binaries/commons-proxy-1.0.tar.gz.md5">md5</a>]</span>
                      <span class="pgp">[<a href="http://www.apache.org/dist/commons/proxy/binaries/commons-proxy-1.0.tar.gz.asc">pgp</a>]</span>
                  </li>
                </ul>
              </li>
              <li class="download"><a href="[preferred]/commons/proxy/binaries/commons-proxy-1.0.zip">1.0.zip</a>
                <ul class="attributes">
                  <li><span class="md5">[<a href="http://www.apache.org/dist/commons/proxy/binaries/commons-proxy-1.0.zip.md5">md5</a>]</span>
                      <span class="pgp">[<a href="http://www.apache.org/dist/commons/proxy/binaries/commons-proxy-1.0.zip.asc">pgp</a>]</span>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li class="group"><div class="links"><span class="label">Source</span></div>
            <ul>
              <li class="download"><a href="[preferred]/commons/proxy/source/commons-proxy-1.0-src.tar.gz">1.0.tar.gz</a>
                <ul class="attributes">
                  <li><span class="md5">[<a href="http://www.apache.org/dist/commons/proxy/source/commons-proxy-1.0-src.tar.gz.md5">md5</a>]</span>
                      <span class="pgp">[<a href="http://www.apache.org/dist/commons/proxy/source/commons-proxy-1.0-src.tar.gz.asc">pgp</a>]</span>
                  </li>
                </ul>
              </li>
              <li class="download"><a href="[preferred]/commons/proxy/source/commons-proxy-1.0-src.zip">1.0.zip</a>
                <ul class="attributes">
                  <li><span class="md5">[<a href="http://www.apache.org/dist/commons/proxy/source/commons-proxy-1.0-src.zip.md5">md5</a>]</span>
                      <span class="pgp">[<a href="http://www.apache.org/dist/commons/proxy/source/commons-proxy-1.0-src.zip.asc">pgp</a>]</span>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li class="download"><a href="[preferred]/commons/proxy/">browse download area</a></li>
          <li><a href="http://archive.apache.org/dist/commons/proxy/">archives...</a></li>
        </ul>
      </p>
    </section>
  </body>
</document>
