<?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.
  
-->
<html xmlns:wicket="http://wicket.apache.org">
	<wicket:panel>
		<h3><wicket:message key="774"/></h3>
		<div><div wicket:id="step1" class="clickable start_step1"><wicket:message key="768"/></div></div>
		<div><div wicket:id="step2" class="clickable start_step2"><wicket:message key="771"/></div></div>
		<div><div wicket:id="step3" class="clickable start_step3"><wicket:message key="772"/></div></div>
		<div><div wicket:id="step4" class="clickable start_step4"><wicket:message key="773"/></div></div>
		<table>
			<tr>
				<td><span wicket:id="desc"></span></td>
				<td>
					<button wicket:id="start" type="button"><wicket:message key="788"/></button><br/>
					<button wicket:id="calendar" type="button"><wicket:message key="291"/></button>
				</td>
			</tr>
		</table>
	</wicket:panel>
</html>