<?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>
   	<table>
   		<tr>
   			<td><div wicket:id="img"></div></td>
   			<td>
   				<h3><wicket:ommessage key="376"/>&nbsp;<span wicket:id="firstname"></span>&nbsp;<span wicket:id="lastname"></span></h3>
   				<wicket:ommessage key="1143"/>&nbsp;<span wicket:id="tz"></span><br/>
   				<wicket:ommessage key="378"/>&nbsp;<a wicket:id="openUnread"><span wicket:id="unread"></span></a><br/>
   				<a wicket:id="editProfile"><wicket:ommessage key="377"/></a>
   			</td>
   		</tr>
   		<tr>
   			<td colspan="2" class="help support">
   				<h3><wicket:ommessage key="281"/></h3>
   				<a wicket:ommessage="href:282"><wicket:ommessage key="286"/></a><br/>
   				<a wicket:ommessage="href:283"><wicket:ommessage key="287"/></a><br/>
				<a wicket:id="netTest" target="_blank"><wicket:ommessage key="1527"/></a><br/>
			</td>
   		</tr>
   	</table>
</wicket:panel>
</html>
