<!--
  ~ 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.
  -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
<meta http-equiv="content-type" content="" />
<title>Axis2 M2 Release</title>
</head>
<body>
<h2>Axis2 Milestone 2 Release</h2>
<div align="left">
<h3>Source Distribution</h3>
<p><a href=
"http://cvs.apache.org/dist/axis/v2.0-M2/axis2-M2-src.zip" title=
"http://cvs.apache.org/dist/axis/v2.0-M2/axis2-M2-src.zip">zip</a><br />
</p>
<h3>Binary Distribution</h3>
<p><a href=
"http://cvs.apache.org/dist/axis/v2.0-M2/axis2-M2-bin.zip" title=
"http://cvs.apache.org/dist/axis/v2.0-M2/axis2-M2-bin.zip">zip</a></p>
</div>
<div align="left"><br />
<p>[if-any logo] <a href="[link]"><img align="right" src="[logo]"
border="0" /></a>[end] The currently selected mirror is
<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.</p>
<form action="[location]" method="get" id="SelectMirror" name=
"SelectMirror">Other mirrors: <select name="Preferred">
<option value="[http]" selected="selected">[http]</option>
<option value="[ftp]">[ftp]</option>
<option value="[backup]">[backup] (backup)</option>
</select> <input type="submit" value="Change" /></form>
<p>You may also consult the <a href=
"http://www.apache.org/mirrors/">complete list of mirrors</a>.</p>
<p><strong>Note:</strong> when downloading from a mirror please
check the <a href=
"http://www.apache.org/dev/release-signing#md5">md5sum</a> and
verify the <a href=
"http://www.apache.org/dev/release-signing#openpgp">OpenPGP</a>
compatible signature from the main Apache site. These can be
downloaded by following the links above. This <a href=
"http://www.apache.org/dist/ws/axis2/KEYS">KEYS</a> file contains
the public keys used for signing release. It is recommended that
(when possible) a <a href=
"http://www.apache.org/dev/release-signing#web-of-trust">web of
trust</a> is used to confirm the identity of these keys.</p>
</div>
</body>
</html>
