import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

import java.util.List;
public class __2F_INCLUDES_TESTS_2F_xml_2D_jsp_2F_most_2D_tags_2D_xml_2D_jsp_2E_jsp extends javax.servlet.http.HttpServlet{
public String myFunc() { return "myfunc"; }

public String myFunc2() { return "myfunc"; }

public void _jspService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
		throws java.io.IOException, javax.servlet.ServletException {
javax.servlet.jsp.PageContext pageContext = null;
javax.servlet.http.HttpSession session = null;
javax.servlet.ServletContext application = null;
javax.servlet.ServletConfig config = null;
javax.servlet.jsp.JspWriter out = null;
Object page = null;

try {
String consec1 = "test";
String consec2 = "two";
out.print(""+
myFunc()
);
out.print(""+
myFunc2()
);
javax.swing.AbstractButton jb = new javax.swing.JButton();
String includedString = "incd";
   jb. 
 } catch (java.lang.Exception e) {} 
}}