<?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>
	<form wicket:id="form">
		<table>
			<tr>
				<td><label wicket:for="login"><wicket:ommessage key="314" /></label></td>
				<td><input type="text" readonly wicket:id="login" /></td>
			</tr>
			<tr>
				<td><label><wicket:ommessage key="328" /></label></td>
				<td><input type="password" wicket:id="password" /></td>
			</tr>
			<tr>
				<td><label><wicket:ommessage key="329" /></label></td>
				<td><input type="password" wicket:id="confirmPassword" /></td>
			</tr>
		</table>
		<span wicket:id="feedback"></span>
		<input type="submit" wicket:id="submit" class="invisible-form-component"/>
	</form>
	<div wicket:id="confirmReset"></div>
</wicket:panel>
</html>