<?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-build:download-page                |
 |                                                                      |
 | 2) Set the following properties in the component's pom:              |
 |    - commons.componentid     (required, alphabetic, lower case)      |
 |    - commons.release.version (required)                              |
 |    - commons.release.name    (required)                              |
 |    - commons.binary.suffix   (optional)                              |
 |      (defaults to "-bin", set to "" for pre-maven2 releases)         |
 |    - commons.release.desc    (optional)                              |
 |    - commons.release.subdir  (optional)                              |
 |    - commons.release.hash    (optional, lowercase, default sha512)   |
 |                                                                      |
 |    - commons.release.[234].version       (conditional)               |
 |    - commons.release.[234].name          (conditional)               |
 |    - commons.release.[234].binary.suffix (optional)                  |
 |    - commons.release.[234].desc          (optional)                  |
 |    - commons.release.[234].subdir        (optional)                  |
 |    - commons.release.[234].hash       (optional, lowercase, [sha512])|
 |                                                                      |
 | 3) Example Properties                                                |
 |    (commons.release.name inherited by parent:                        |
 |     ${project.artifactId}-${commons.release.version}                 |
 |                                                                      |
 |  <properties>                                                        |
 |    <commons.componentid>math</commons.componentid>                   |
 |    <commons.release.version>1.2</commons.release.version>            |
 |  </properties>                                                       |
 |                                                                      |
 +======================================================================+
-->
<document>
  <properties>
    <title>Download Apache Commons Codec</title>
    <author email="dev@commons.apache.org">Apache Commons Documentation Team</author>
  </properties>
  <body>
    <section name="Download Apache Commons Codec">
    <subsection name="Using a Mirror">
      <p>
        We recommend you use a mirror to download our release
        builds, but you <strong>must</strong> <a href="https://www.apache.org/info/verification.html">verify the integrity</a> of
        the downloaded files using signatures downloaded from our main
        distribution directories. Recent releases (48 hours) may not yet
        be available from all 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>
        It is essential that you
        <a href="https://www.apache.org/info/verification.html">verify the integrity</a>
        of downloaded files, preferably using the <code>PGP</code> signature (<code>*.asc</code> files);
        failing that using the <code>SHA512</code> hash (<code>*.sha512</code> checksum files).
      </p>
      <p>
        The <a href="https://downloads.apache.org/commons/KEYS">KEYS</a>
        file contains the public PGP keys used by Apache Commons developers
        to sign releases.
      </p>
    </subsection>
    </section>
    <section name="Apache Commons Codec 1.17.0 ">
      <subsection name="Binaries">
        <table>
          <tr>
              <td><a href="[preferred]/commons/codec/binaries/commons-codec-1.17.0-bin.tar.gz">commons-codec-1.17.0-bin.tar.gz</a></td>
              <td><a href="https://downloads.apache.org/commons/codec/binaries/commons-codec-1.17.0-bin.tar.gz.sha512">sha512</a></td>
              <td><a href="https://downloads.apache.org/commons/codec/binaries/commons-codec-1.17.0-bin.tar.gz.asc">pgp</a></td>
          </tr>
          <tr>
              <td><a href="[preferred]/commons/codec/binaries/commons-codec-1.17.0-bin.zip">commons-codec-1.17.0-bin.zip</a></td>
              <td><a href="https://downloads.apache.org/commons/codec/binaries/commons-codec-1.17.0-bin.zip.sha512">sha512</a></td>
              <td><a href="https://downloads.apache.org/commons/codec/binaries/commons-codec-1.17.0-bin.zip.asc">pgp</a></td>
          </tr>
        </table>
      </subsection>
      <subsection name="Source">
        <table>
          <tr>
              <td><a href="[preferred]/commons/codec/source/commons-codec-1.17.0-src.tar.gz">commons-codec-1.17.0-src.tar.gz</a></td>
              <td><a href="https://downloads.apache.org/commons/codec/source/commons-codec-1.17.0-src.tar.gz.sha512">sha512</a></td>
              <td><a href="https://downloads.apache.org/commons/codec/source/commons-codec-1.17.0-src.tar.gz.asc">pgp</a></td>
          </tr>
          <tr>
              <td><a href="[preferred]/commons/codec/source/commons-codec-1.17.0-src.zip">commons-codec-1.17.0-src.zip</a></td>
              <td><a href="https://downloads.apache.org/commons/codec/source/commons-codec-1.17.0-src.zip.sha512">sha512</a></td>
              <td><a href="https://downloads.apache.org/commons/codec/source/commons-codec-1.17.0-src.zip.asc">pgp</a></td>
          </tr>
        </table>
      </subsection>
    </section>
    <section name="Archives">
        <p>
          Older releases can be obtained from the archives.
        </p>
        <ul>
          <li class="download"><a href="[preferred]/commons/codec/">browse download area</a></li>
          <li><a href="https://archive.apache.org/dist/commons/codec/">archives...</a></li>
        </ul>
    </section>
  </body>
</document>
