2009-08-20 22:22:07 +00:00
<%
2011-03-21 14:27:46 +00:00
// NOTE: Do the header carefully so there is no whitespace before the <?xml... line
2009-08-20 22:22:07 +00:00
// http://www.crazysquirrel.com/computing/general/form-encoding.jspx
if (request.getCharacterEncoding() == null)
request.setCharacterEncoding("UTF-8");
2011-03-21 14:27:46 +00:00
2012-05-13 13:05:17 +00:00
response.setHeader("X-Frame-Options", "SAMEORIGIN");
2014-07-26 11:01:16 +00:00
response.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'");
2014-07-26 09:32:26 +00:00
response.setHeader("X-XSS-Protection", "1; mode=block");
2016-02-25 14:56:06 +00:00
response.setHeader("X-Content-Type-Options", "nosniff");
2016-12-23 12:35:41 +00:00
response.setHeader("Referrer-Policy", "no-referrer");
2018-03-09 16:02:00 +00:00
response.setHeader("Accept-Ranges", "none");
2012-05-13 13:05:17 +00:00
2011-03-21 14:27:46 +00:00
%><%@page pageEncoding="UTF-8"
2012-01-10 13:21:35 +00:00
%><%@page trimDirectiveWhitespaces="true"
2011-03-21 14:27:46 +00:00
%><%@page contentType="text/html" import="net.i2p.i2ptunnel.web.IndexBean"
%><?xml version="1.0" encoding="UTF-8"?>
2009-07-17 12:26:29 +00:00
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<jsp:useBean class="net.i2p.i2ptunnel.web.IndexBean" id="indexBean" scope="request" />
<jsp:setProperty name="indexBean" property="*" />
2018-04-14 18:54:17 +00:00
<jsp:useBean class="net.i2p.i2ptunnel.ui.Messages" id="intl" scope="request" />
2009-07-17 12:26:29 +00:00
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
2015-09-25 19:55:36 +00:00
<title><%=intl._t("Hidden Services Manager")%></title>
2017-10-25 09:32:07 +00:00
2009-08-20 22:22:07 +00:00
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="/themes/console/images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
2017-10-25 09:32:07 +00:00
2009-07-17 22:56:06 +00:00
<% if (indexBean.allowCSS()) {
2012-07-30 13:15:58 +00:00
%><link rel="icon" href="<%=indexBean.getTheme()%>images/favicon.ico" />
2017-01-08 01:37:15 +00:00
<link href="<%=indexBean.getTheme()%>i2ptunnel.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" />
2009-07-17 22:56:06 +00:00
<% }
2009-07-17 12:26:29 +00:00
%>
2019-04-11 14:00:42 +00:00
</head><body id="tunnelListPage">
2019-07-19 20:30:22 +00:00
<div class="panel" id="overview"><h2><%=intl._t("Hidden Services Manager")%></h2><p>
<%=intl._t("These are the local services provided by your router.")%>
<%=intl._t("They may be clients started through the Tunnel Manager or external programs connecting through SAM, BOB, or directly to I2CP.")%>
<%=intl._t("By default, most of your client services (mail, http proxy, IRC) will share the same set of tunnels (for performance reasons) and be listed as \"Shared Clients\" and \"Shared Clients(DSA)\".")%>
<%=intl._t("However, if you experience a tunnel failure, all your services will go offline at the same time, so in some scenarios you may wish to configure client services to use their own set of tunnels.")%>
<%=intl._t("This can be done by unchecking the \"Share tunnels with other clients…\" option listed under \"Shared Clients\" on the configuration page of the relevant client service, after which you will need to restart the client service from this page.")%>
</p></div>
2017-12-03 17:33:20 +00:00
<%
2018-03-24 13:26:30 +00:00
boolean isInitialized = indexBean.isInitialized();
String nextNonce = isInitialized ? net.i2p.i2ptunnel.web.IndexBean.getNextNonce() : null;
2017-12-03 17:33:20 +00:00
// not synced, oh well
int lastID = indexBean.getLastMessageID();
String msgs = indexBean.getMessages();
if (msgs.length() > 0) {
%>
2017-05-14 05:30:13 +00:00
<div class="panel" id="messages">
2016-07-11 06:54:26 +00:00
<h2><%=intl._t("Status Messages")%></h2>
<table id="statusMessagesTable">
<tr>
<td id="tunnelMessages">
2018-01-26 14:28:41 +00:00
<textarea id="statusMessages" rows="4" cols="60" readonly="readonly"><%=msgs%></textarea>
2016-07-11 06:54:26 +00:00
</td>
2019-04-11 14:00:42 +00:00
</tr><tr>
2016-07-11 06:54:26 +00:00
<td class="buttons">
2015-09-25 19:55:36 +00:00
<a class="control" href="list"><%=intl._t("Refresh")%></a>
2018-03-24 13:26:30 +00:00
<%
if (isInitialized) {
%>
2017-12-03 17:33:20 +00:00
<a class="control" href="list?action=Clear&msgid=<%=lastID%>&nonce=<%=nextNonce%>"><%=intl._t("Clear")%></a>
2018-03-24 13:26:30 +00:00
<%
} // isInitialized
%>
2016-07-11 06:54:26 +00:00
</td>
</tr>
</table>
</div>
2012-10-27 18:51:50 +00:00
<%
2017-12-03 17:33:20 +00:00
} // !msgs.isEmpty()
2018-03-24 13:26:30 +00:00
if (isInitialized) {
2012-10-27 18:51:50 +00:00
%>
2016-07-11 06:54:26 +00:00
<div class="panel" id="globalTunnelControl">
<h2><%=intl._t("Global Tunnel Control")%></h2>
<table>
<tr>
<td class="buttons">
2015-09-25 19:55:36 +00:00
<a class="control" href="wizard"><%=intl._t("Tunnel Wizard")%></a>
2015-10-17 17:38:57 +00:00
<a class="control" href="list?nonce=<%=nextNonce%>&action=Stop%20all"><%=intl._t("Stop All")%></a>
<a class="control" href="list?nonce=<%=nextNonce%>&action=Start%20all"><%=intl._t("Start All")%></a>
<a class="control" href="list?nonce=<%=nextNonce%>&action=Restart%20all"><%=intl._t("Restart All")%></a>
2012-10-27 18:51:50 +00:00
<%--
//this is really bad because it stops and restarts all tunnels, which is probably not what you want
2015-10-17 17:38:57 +00:00
<a class="control" href="list?nonce=<%=nextNonce%>&action=Reload%20configuration"><%=intl._t("Reload Config")%></a>
2012-10-27 18:51:50 +00:00
--%>
2016-07-11 06:54:26 +00:00
</td>
</tr>
</table>
</div>
2017-05-14 05:30:13 +00:00
<div class="panel" id="servers">
2016-07-11 06:54:26 +00:00
<h2><%=intl._t("I2P Hidden Services")%></h2>
<table id="serverTunnels">
<tr>
<th class="tunnelName"><%=intl._t("Name")%></th>
<th class="tunnelType"><%=intl._t("Type")%></th>
<th class="tunnelLocation"><%=intl._t("Points at")%></th>
<th class="tunnelPreview"><%=intl._t("Preview")%></th>
<th class="tunnelStatus"><%=intl._t("Status")%></th>
<th class="tunnelControl"><%=intl._t("Control")%></th>
</tr>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
for (int curServer = 0; curServer < indexBean.getTunnelCount(); curServer++) {
if (indexBean.isClient(curServer)) continue;
2019-04-11 14:00:42 +00:00
%>
2016-07-11 06:54:26 +00:00
<tr class="tunnelProperties">
<td class="tunnelName">
<a href="edit?tunnel=<%=curServer%>" title="<%=intl._t("Edit Server Tunnel Settings for")%> <%=indexBean.getTunnelName(curServer)%>"><%=indexBean.getTunnelName(curServer)%></a>
2019-04-11 14:00:42 +00:00
</td><td class="tunnelType"><%=indexBean.getTunnelType(curServer)%>
</td><td class="tunnelLocation">
<%
2010-12-30 00:36:41 +00:00
if (indexBean.isServerTargetLinkValid(curServer)) {
2013-10-17 13:22:17 +00:00
if (indexBean.isSSLEnabled(curServer)) { %>
2016-07-11 06:54:26 +00:00
<a href="https://<%=indexBean.getServerTarget(curServer)%>/" title="<%=intl._t("Test HTTPS server, bypassing I2P")%>" target="_top"><%=indexBean.getServerTarget(curServer)%> SSL</a>
2019-04-11 14:00:42 +00:00
<% } else { %>
2016-07-11 06:54:26 +00:00
<a href="http://<%=indexBean.getServerTarget(curServer)%>/" title="<%=intl._t("Test HTTP server, bypassing I2P")%>" target="_top"><%=indexBean.getServerTarget(curServer)%></a>
2019-04-11 14:00:42 +00:00
<%
2013-10-17 13:22:17 +00:00
}
2009-07-17 12:26:29 +00:00
} else {
2009-07-17 22:56:06 +00:00
%><%=indexBean.getServerTarget(curServer)%>
2019-04-11 14:00:42 +00:00
<%
2013-10-17 13:22:17 +00:00
if (indexBean.isSSLEnabled(curServer)) { %>
SSL
2019-04-11 14:00:42 +00:00
<%
2013-10-17 13:22:17 +00:00
}
2009-07-17 12:26:29 +00:00
}
2019-04-11 14:00:42 +00:00
%>
</td><td class="tunnelPreview">
<%
2010-01-14 05:45:01 +00:00
if (("httpserver".equals(indexBean.getInternalType(curServer)) || ("httpbidirserver".equals(indexBean.getInternalType(curServer)))) && indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
2019-04-11 14:00:42 +00:00
%>
2016-07-11 06:54:26 +00:00
<a class="control" title="<%=intl._t("Test HTTP server through I2P")%>" href="http://<%=indexBean.getDestHashBase32(curServer)%>" target="_top"><%=intl._t("Preview")%></a>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
} else if (indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
2016-07-11 06:54:26 +00:00
%><%=intl._t("Base32 Address")%>:<%=indexBean.getDestHashBase32(curServer)%>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
} else {
2016-07-11 06:54:26 +00:00
%><%=intl._t("No Preview")%>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
}
2019-04-11 14:00:42 +00:00
%>
</td><td class="tunnelStatus">
<%
2009-07-17 12:26:29 +00:00
switch (indexBean.getTunnelStatus(curServer)) {
case IndexBean.STARTING:
2016-07-11 06:54:26 +00:00
%><div class="statusStarting text" title="<%=intl._t("Starting...")%>"><%=intl._t("Starting...")%></div>
2019-04-11 14:00:42 +00:00
</td><td class="tunnelControl">
2016-07-11 06:54:26 +00:00
<a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&action=stop&tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
break;
case IndexBean.RUNNING:
2016-07-11 06:54:26 +00:00
%><div class="statusRunning text" title="<%=intl._t("Running")%>"><%=intl._t("Running")%></div>
2019-04-11 14:00:42 +00:00
</td><td class="tunnelControl">
2016-07-11 06:54:26 +00:00
<a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&action=stop&tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
break;
case IndexBean.NOT_RUNNING:
2016-07-11 06:54:26 +00:00
%><div class="statusNotRunning text" title="<%=intl._t("Stopped")%>"><%=intl._t("Stopped")%></div>
2019-04-11 14:00:42 +00:00
</td><td class="tunnelControl">
2016-07-11 06:54:26 +00:00
<a class="control" title="<%=intl._t("Start this Tunnel")%>" href="list?nonce=<%=nextNonce%>&action=start&tunnel=<%=curServer%>"><%=intl._t("Start")%></a>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
break;
}
2019-04-11 14:00:42 +00:00
%>
2016-07-11 06:54:26 +00:00
</td>
2019-04-11 14:00:42 +00:00
</tr><tr>
2017-10-25 09:32:07 +00:00
<td class="tunnelDestination" colspan="6">
<span class="tunnelDestinationLabel">
2019-04-11 14:00:42 +00:00
<%
2017-10-25 09:32:07 +00:00
String name = indexBean.getSpoofedHost(curServer);
if (name == null || name.equals("")) {
name = indexBean.getTunnelName(curServer);
out.write("<b>");
out.write(intl._t("Destination"));
out.write(":</b></span> ");
out.write(indexBean.getDestHashBase32(curServer));
} else {
out.write("<b>");
out.write(intl._t("Hostname"));
out.write(":</b></span> ");
out.write(name);
}
2019-04-11 14:00:42 +00:00
%>
2017-10-25 09:32:07 +00:00
</td>
</tr>
2019-04-11 14:00:42 +00:00
<%
2019-04-10 19:52:03 +00:00
String encName = indexBean.getEncryptedBase32(curServer);
if (encName != null && encName.length() > 0) {
2019-04-11 14:00:42 +00:00
%>
2019-04-10 19:52:03 +00:00
<tr>
<td class="tunnelDestination" colspan="6">
<span class="tunnelDestinationLabel"><b><%=intl._t("Encrypted")%>:</b></span>
<%=encName%>
</td>
</tr>
2019-04-11 14:00:42 +00:00
<%
2019-04-10 19:52:03 +00:00
} // encName
2019-04-11 14:00:42 +00:00
%>
2016-07-11 06:54:26 +00:00
<tr>
<td class="tunnelDescription" colspan="6">
2019-04-10 19:52:03 +00:00
<span class="tunnelDestinationLabel"><b><%=intl._t("Description")%>:</b></span>
2016-07-11 06:54:26 +00:00
<%=indexBean.getTunnelDescription(curServer)%>
</td>
</tr>
2019-04-11 14:00:42 +00:00
<%
2019-04-10 19:52:03 +00:00
} // for loop
2019-04-11 14:00:42 +00:00
%>
2016-07-11 06:54:26 +00:00
<tr>
<td class="newTunnel" colspan="6">
<form id="addNewServerTunnelForm" action="edit">
<b><%=intl._t("New hidden service")%>:</b>
2009-07-17 22:56:06 +00:00
<select name="type">
<option value="httpserver">HTTP</option>
2015-09-25 19:55:36 +00:00
<option value="server"><%=intl._t("Standard")%></option>
2010-01-14 05:45:01 +00:00
<option value="httpbidirserver">HTTP bidir</option>
2009-07-17 22:56:06 +00:00
<option value="ircserver">IRC</option>
<option value="streamrserver">Streamr</option>
</select>
2015-09-25 19:55:36 +00:00
<input class="control" type="submit" value="<%=intl._t("Create")%>" />
2009-07-17 22:56:06 +00:00
</form>
2016-07-11 06:54:26 +00:00
</td>
</tr>
</table>
2017-05-14 05:30:13 +00:00
</div>
<div class="panel" id="clients">
2016-07-11 06:54:26 +00:00
<h2><%=intl._t("I2P Client Tunnels")%></h2>
<table id="clientTunnels">
<tr>
<th class="tunnelName"><%=intl._t("Name")%></th>
<th class="tunnelType"><%=intl._t("Type")%></th>
<th class="tunnelInterface"><%=intl._t("Interface")%></th>
<th class="tunnelPort"><%=intl._t("Port")%></th>
<th class="tunnelStatus"><%=intl._t("Status")%></th>
<th class="tunnelControl"><%=intl._t("Control")%></th>
</tr>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
for (int curClient = 0; curClient < indexBean.getTunnelCount(); curClient++) {
if (!indexBean.isClient(curClient)) continue;
2019-04-11 14:00:42 +00:00
%>
2016-07-11 06:54:26 +00:00
<tr class="tunnelProperties">
<td class="tunnelName">
<a href="edit?tunnel=<%=curClient%>" title="<%=intl._t("Edit Tunnel Settings for")%> <%=indexBean.getTunnelName(curClient)%>"><%=indexBean.getTunnelName(curClient)%></a>
2019-04-11 14:00:42 +00:00
</td><td class="tunnelType"><%=indexBean.getTunnelType(curClient)%>
</td><td class="tunnelInterface">
<%
2010-12-30 00:36:41 +00:00
/* should only happen for streamr client */
String cHost= indexBean.getClientInterface(curClient);
2011-02-03 15:45:26 +00:00
if (cHost == null || "".equals(cHost)) {
2010-12-30 00:36:41 +00:00
out.write("<font color=\"red\">");
2015-09-25 19:55:36 +00:00
out.write(intl._t("Host not set"));
2010-12-30 00:36:41 +00:00
out.write("</font>");
} else {
out.write(cHost);
}
2019-04-11 14:00:42 +00:00
%>
</td><td class="tunnelPort">
<%
2016-07-11 06:54:26 +00:00
String cPort= indexBean.getClientPort2(curClient);
out.write(cPort);
if (indexBean.isSSLEnabled(curClient))
out.write(" SSL");
2019-04-11 14:00:42 +00:00
%>
</td><td class="tunnelStatus">
<%
2009-07-17 12:26:29 +00:00
switch (indexBean.getTunnelStatus(curClient)) {
case IndexBean.STARTING:
2016-07-11 06:54:26 +00:00
%><div class="statusStarting text" title="<%=intl._t("Starting...")%>"><%=intl._t("Starting...")%></div>
2019-04-11 14:00:42 +00:00
</td><td class="tunnelControl">
2016-07-11 06:54:26 +00:00
<a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&action=stop&tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
break;
case IndexBean.STANDBY:
2016-07-11 06:54:26 +00:00
%><div class="statusStarting text" title="<%=intl._t("Standby")%>"><%=intl._t("Standby")%></div>
2019-04-11 14:00:42 +00:00
</td><td class="tunnelControl">
2015-10-17 17:38:57 +00:00
<a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&action=stop&tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
break;
case IndexBean.RUNNING:
2016-07-11 06:54:26 +00:00
%><div class="statusRunning text" title="<%=intl._t("Running")%>"><%=intl._t("Running")%></div>
2019-04-11 14:00:42 +00:00
</td><td class="tunnelControl">
2015-10-17 17:38:57 +00:00
<a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&action=stop&tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
break;
case IndexBean.NOT_RUNNING:
2016-07-11 06:54:26 +00:00
%><div class="statusNotRunning text" title="<%=intl._t("Stopped")%>"><%=intl._t("Stopped")%></div>
2019-04-11 14:00:42 +00:00
</td><td class="tunnelControl">
2016-07-11 06:54:26 +00:00
<a class="control" title="<%=intl._t("Start this Tunnel")%>" href="list?nonce=<%=nextNonce%>&action=start&tunnel=<%=curClient%>"><%=intl._t("Start")%></a>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
break;
}
2019-04-11 14:00:42 +00:00
%>
2016-07-11 06:54:26 +00:00
</td>
2019-04-11 14:00:42 +00:00
</tr><tr>
2016-07-11 06:54:26 +00:00
<td class="tunnelDestination" colspan="6">
<span class="tunnelDestinationLabel">
2019-04-11 14:00:42 +00:00
<% if ("httpclient".equals(indexBean.getInternalType(curClient)) || "connectclient".equals(indexBean.getInternalType(curClient)) ||
2010-11-17 15:47:00 +00:00
"sockstunnel".equals(indexBean.getInternalType(curClient)) || "socksirctunnel".equals(indexBean.getInternalType(curClient))) { %>
2016-07-11 06:54:26 +00:00
<b><%=intl._t("Outproxy")%>:</b>
2019-04-11 14:00:42 +00:00
<% } else { %>
2016-07-11 06:54:26 +00:00
<b><%=intl._t("Destination")%>:</b>
2019-04-11 14:00:42 +00:00
<% } %>
2016-07-11 06:54:26 +00:00
</span>
2019-04-11 14:00:42 +00:00
<%
2014-01-25 17:56:35 +00:00
if (indexBean.getIsUsingOutproxyPlugin(curClient)) {
2015-09-25 19:55:36 +00:00
%><%=intl._t("internal plugin")%><%
2010-11-17 15:47:00 +00:00
} else {
2014-01-25 17:56:35 +00:00
String cdest = indexBean.getClientDestination(curClient);
if (cdest.length() > 70) { // Probably a B64 (a B32 is 60 chars) so truncate
%><%=cdest.substring(0, 45)%>…<%=cdest.substring(cdest.length() - 15, cdest.length())%><%
} else if (cdest.length() > 0) {
%><%=cdest%><%
} else {
2015-09-25 19:55:36 +00:00
%><i><%=intl._t("none")%></i><%
2014-01-25 17:56:35 +00:00
}
2010-11-17 15:47:00 +00:00
} %>
2016-07-11 06:54:26 +00:00
</td>
</tr>
2019-04-11 14:00:42 +00:00
<% /* TODO SSL outproxy for httpclient if plugin not present */ %>
2016-07-11 06:54:26 +00:00
<tr>
<td class="tunnelDescription" colspan="6">
<span class="tunnelDescriptionLabel"><b><%=intl._t("Description")%>:</b></span>
<%=indexBean.getTunnelDescription(curClient)%>
</td>
</tr>
2019-04-11 14:00:42 +00:00
<%
2009-07-17 12:26:29 +00:00
}
2019-04-11 14:00:42 +00:00
%>
2016-07-11 06:54:26 +00:00
<tr>
<td class="newTunnel" colspan="6">
2010-11-19 16:14:14 +00:00
<form id="addNewClientTunnelForm" action="edit">
2016-07-11 06:54:26 +00:00
<b><%=intl._t("New client tunnel")%>:</b>
2009-07-17 22:56:06 +00:00
<select name="type">
2015-09-25 19:55:36 +00:00
<option value="client"><%=intl._t("Standard")%></option>
2014-01-25 17:56:35 +00:00
<option value="httpclient">HTTP/CONNECT</option>
2009-07-17 22:56:06 +00:00
<option value="ircclient">IRC</option>
<option value="sockstunnel">SOCKS 4/4a/5</option>
2010-03-05 14:04:32 +00:00
<option value="socksirctunnel">SOCKS IRC</option>
2009-07-17 22:56:06 +00:00
<option value="connectclient">CONNECT</option>
<option value="streamrclient">Streamr</option>
</select>
2015-09-25 19:55:36 +00:00
<input class="control" type="submit" value="<%=intl._t("Create")%>" />
2009-07-17 22:56:06 +00:00
</form>
2016-07-11 06:54:26 +00:00
</td>
</tr>
</table>
</div>
2012-10-27 18:51:50 +00:00
<%
} // isInitialized()
%>
2019-04-11 14:00:42 +00:00
</body></html>