blob: 15391d9e045d19b3a396cc0154722527002c398d [file] [log] [blame]
<!doctype html>
<!-- Generated by FreeMarker/Docgen from DocBook -->
<html lang="en" class="page-type-glossary">
<head prefix="og: http://ogp.me/ns#">
<meta charset="utf-8">
<title>Glossary - FreeMarker Manual</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="format-detection" content="telephone=no">
<meta property="og:site_name" content="FreeMarker Manual">
<meta property="og:title" content="Glossary">
<meta property="og:locale" content="en_US">
<meta property="og:url" content="http://example.com/gloss.html">
<link rel="canonical" href="http://example.com/gloss.html">
<link rel="icon" href="favicon.png" type="image/png">
<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1594338517553">
</head>
<body itemscope itemtype="https://schema.org/Code">
<meta itemprop="url" content="http://example.com/">
<meta itemprop="name" content="FreeMarker Manual">
<!--[if lte IE 9]>
<div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
<![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://example.com" role="banner"> <img itemprop="image" src="logo.png" alt="My Logo">
</a></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">FreeMarker Manual</a><div class="navigation-header"></div></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="gloss.html"><span itemprop="name">Glossary</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Index</a></li><li>Glossary</li><li><a href="ref.html">Reference</a></li><li><a href="app_faq.html">FAQ</a></li><li><a href="preface.html#test_target">Bőregér</a></li></ul></div></div></div> <div class="main-content site-width">
<div class="content-wrapper no-toc">
<div id="table-of-contents-wrapper" class="col-left">
</div>
<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="app_license.html"><span>Previous</span></a><a class="paging-arrow next" href="alphaidx.html"><span>Next</span></a></div><div class="title-wrapper">
<h1 class="content-header header-part" id="gloss" itemprop="headline">Glossary</h1>
</div></div> <p>
<a href="#gloss.attribute">A</a>&nbsp;| <a href="#gloss.boolean">B</a>&nbsp;| <a href="#gloss.character">C</a>&nbsp;| <a href="#gloss.dataModel">D</a>&nbsp;| <a href="#gloss.element">E</a>&nbsp;| <a href="#gloss.FTL">F</a>&nbsp;| <a href="#gloss.hashVariable">H</a>&nbsp;| <a href="#gloss.lineBreak">L</a>&nbsp;| <a href="#gloss.macroDefinitionBody">M</a>&nbsp;| <a href="#gloss.outputEncoding">O</a>&nbsp;| <a href="#gloss.predefinedDirective">P</a>&nbsp;| <a href="#gloss.regularExpression">R</a>&nbsp;| <a href="#gloss.scalarVariable">S</a>&nbsp;| <a href="#gloss.tag">T</a>&nbsp;| <a href="#gloss.UCS">U</a>&nbsp;| <a href="#gloss.whiteSpace">W</a>&nbsp;| <a href="#autoid_243">X</a> </p>
<dl>
<dt><a name="gloss.attribute"></a>Attribute</dt>
<dd>
<p>In connection with <a href="#gloss.XML">XML</a> or HTML
(or <a href="#gloss.SGML">SGML</a> in general), attributes are
the named values associated with elements. For example, in
<code class="inline-code">&lt;body bgcolor=black
text=green&gt;<em class="code-color">...</em>&lt;/body&gt;</code>,
the attributes are <code class="inline-code">bgcolor=black</code> and
<code class="inline-code">text=green</code>. On the left side of
<code class="inline-code">=</code> is the name of the attribute, while on the right
side is the value of the attribute. Note that in XML, the values must
be quoted (for example: <code class="inline-code">&lt;body bgcolor=&quot;black&quot;
text=&#39;green&#39;&gt;</code>), while in HTML it is optional for certain
values.</p>
<p>See Also
<a href="#gloss.startTag">Start-tag</a>
</p>
</dd>
<dt><a name="gloss.boolean"></a>Boolean</dt>
<dd>
<p>This is a variable type. A boolean variable represents a logical
true or false (yes or no). For example, if the visitor has been logged
in or not. There are only two possible boolean values:
<code class="inline-code">true</code> and <code class="inline-code">false</code>. Typically, you
will use booleans with an <code class="inline-code">&lt;#if
<em class="code-color">...</em>&gt;</code> directive when you want
to display text based on some condition, say, you show a certain part
of the page only for visitors who has logged in.</p>
</dd>
<dt><a name="gloss.character"></a>Character</dt>
<dd>
<p>A symbol that people use in writing. Examples of characters:
Latin capital letter A (``A&#39;&#39;), Latin small letter A (``a&#39;&#39;), digit
four (``4&#39;&#39;), number sign (``#&#39;&#39;), colon (``:&#39;&#39;)</p>
</dd>
<dt><a name="gloss.charset"></a>Charset</dt>
<dd>
<p>A charset is a rule (algorithm) for transforming a sequence of
<a href="#gloss.character">characters</a> (text) to a sequence
of bits (or in practice, to a sequence of bytes). Whenever a character
sequence is stored on a digital media, or sent through a digital
channel (network), a charset must be applied. Examples of charsets are
ISO-8859-1, ISO-8859-6, Shift_JIS , UTF-8.</p>
<p>The capabilities of different charsers are different, that is,
not all charsets can be used for all languages. For example ISO-8859-1
can&#39;t represent Arabic letters, but ISO-8859-6 can, however it can&#39;t
represent the accented letters that that ISO-8859-1 can. Most charsets
are highly restrictive regarding the allowed characters. UTF-8 allows
virtually all possible characters, but most text editors can&#39;t handle
it yet (2004).</p>
<p>When different software components exchange text (as the HTTP
server and the browser, or the text editor you use for saving
templates and FreeMarker who loads them), it&#39;s very important that
they agree in the charset used for the binary encoding of the text. If
they don&#39;t, then the binary data will be misinterpreted by the
receiver (loader) component, which usually results in the distortion
of the non-English letters.</p>
</dd>
<dt><a name="gloss.collectionVariable"></a>Collection</dt>
<dd>
<p>A variable that (in conjunction with the <code class="inline-code">list</code>
directive) can spit out a series of variables.</p>
</dd>
<dt><a name="gloss.dataModel"></a>Data-model</dt>
<dd>
<p>Something that holds the information the template has to show
(or use in some other ways) when the template processor assembles the
output (e.g. a Web page). In FreeMarker this is best visualized as a
tree.</p>
</dd>
<dt><a name="gloss.directive"></a>Directive</dt>
<dd>
<p>Instructions to FreeMarker used in <a href="#gloss.FTL">FTL</a> <a href="#gloss.template">templates</a>. They are invoked by <a href="#gloss.FTLTag">FTL tags</a>.</p>
<p>See Also
<a href="#gloss.predefinedDirective">Predefined directive</a>,
<a href="#gloss.userDefinedDirective">User-defined directive</a>
</p>
</dd>
<dt><a name="gloss.element"></a>Element</dt>
<dd>
<p>Elements are the most fundamental building pieces of <a href="#gloss.SGML">SGML</a> documents; an SGML document is
basically a tree of elements. Example of elements used in HTML: body,
head, title, p, h1, h2.</p>
</dd>
<dt><a name="gloss.endTag"></a>End-tag</dt>
<dd>
<p><a href="#gloss.tag">Tag</a>, which indicates that the
following content is not under the element. Example:
<code class="inline-code">&lt;/body&gt;</code>.</p>
<p>See Also
<a href="#gloss.startTag">Start-tag</a>
</p>
</dd>
<dt><a name="gloss.environment"></a>Environment</dt>
<dd>
<p>An <code class="inline-code">Environment</code> object stores the runtime
state of a single template <a href="#gloss.templateProcessingJob">template processing job</a>.
That is, for each
<code class="inline-code">Template.process(<em class="code-color">...</em>)</code>
call, an <code class="inline-code">Environment</code> instance will be created, and
then discarded when <code class="inline-code">process</code> returns. This object
stores the set of temporary variables created by the template, the
value of settings set by the template, the reference to the data-model
root, etc. Everything that is needed to fulfill the template
processing job.</p>
</dd>
<dt><a name="gloss.XML"></a>Extensible Markup Language</dt>
<dd>
<p>A subset (restricted version) of <a href="#gloss.SGML">SGML</a>. This is less powerful than SGML, but
it easier to learn and much easier to process with programs. If you
are an HTML author: XML documents are similar to HTML documents, but
the XML standard doesn&#39;t specify the usable elements. XML is a much
more general-purpose thing than HTML. For example you can use XML to
describe Web pages (like HTML) or to describe non-visual information
like a phone book database.</p>
<p>See Also
<a href="#gloss.SGML">Standard Generalized Markup Language</a>
</p>
</dd>
<dt><a name="gloss.FTL"></a>FreeMarker Template Language</dt>
<dd>
<p>Simple programming language designed to write text file
templates, especially HTML templates.</p>
</dd>
<dt><a name="autoid_241"></a>FTL</dt>
<dd>See
<a href="#gloss.FTL">FreeMarker Template Language</a>
</dd>
<dt><a name="gloss.FTLTag"></a>FTL tag</dt>
<dd>
<p><a href="#gloss.tag">Tag</a>-like text fragment used to
invoke FreeMarker <a href="#gloss.directive">directives</a> in
<a href="#gloss.FTL">FTL</a> <a href="#gloss.template">templates</a>. These are similar to HTML
or XML tags at the first glance. The most prominent difference is that
the tag name is started with <code class="inline-code">#</code> or
<code class="inline-code">@</code>. Another important difference is that FTL tags do
not use <a href="#gloss.attribute">attributes</a>, but a
substantially different syntax to specify parameters. Examples of FTL
tags: <code class="inline-code">&lt;#if newUser&gt;</code>,
<code class="inline-code">&lt;/#if&gt;</code>, <code class="inline-code">&lt;@menuitem
title=&quot;Projects&quot; link=&quot;projects.html&quot;/&gt;</code></p>
</dd>
<dt><a name="gloss.fullQualifiedName"></a>Full-qualified name</dt>
<dd>
<p>... of nodes (XML node or other FTL node variable): The
full-qualified name of a node specifies not only the node name
(<code class="inline-code"><em class="code-color">node</em>?node_name</code>), but
also the node namespace
(<code class="inline-code"><em class="code-color">node</em>?node_namespace</code>),
this way it unambiguously identify a certain kind of node. The format
of the full-qualified name is
<code class="inline-code"><em class="code-color">nodeName</em></code> or
<code class="inline-code"><em class="code-color">prefix</em>:<em class="code-color">nodeName</em></code>.
The prefix is shorthand to identify the node namespace (the a node
namespace is usually specified with a long ugly URI). In FTL, prefixes
are associated with the node namespaces with the
<code class="inline-code">ns_prefixes</code> parameter of <a href="ref_directive_ftl.html#ref.directive.ftl">the <code>ftl</code>
directive</a>. In XML files, prefixes are associated with the node
namespaces with the
<code class="inline-code">xmlns:<em class="code-color">prefix</em></code> attributes.
The lack of the prefix means that the node uses the default node
namespace, if a default node namespace is defined; otherwise it means
that the node does not belong to any node namespace. The default node
namespace is defined in FTL by registering reserved prefix
<code class="inline-code">D</code> with the <code class="inline-code">ns_prefixes</code> parameter
of the <code class="inline-code">ftl</code> directive. In XML files it is defined
with attribute <code class="inline-code">xmlns</code>.</p>
<p>... of Java classes: The full-qualified name of a Java class
contains both the class name and the name of the package the class
belongs to. This way it unambiguously specifies the class, regardless
of the context. An example of full-qualifed class name:
<code class="inline-code">java.util.Map</code> (as opposed to
<code class="inline-code">Map</code>).</p>
</dd>
<dt><a name="gloss.hashVariable"></a>Hash</dt>
<dd>
<p>A variable that acts as a container that stores subvariables
that can be retrieved via a string that is a lookup name.</p>
<p>See Also
<a href="#gloss.sequenceVariable">Sequence</a>
</p>
</dd>
<dt><a name="gloss.lineBreak"></a>Line break</dt>
<dd>
<p>Line break is a special character (or a sequence of special
characters) that causes a line breaking when you see the text as plain
text (say, when you read the text with Windows notepad). Typically you
type this character by hitting ENTER or RETURN key. The line break is
represented with different characters on different platforms (to cause
incompatibility and confusion...): ``line feed&#39;&#39; character on UNIX-es,
``carriage return&#39;&#39; character on Macintosh, ``carriage return&#39;&#39;+``line
feed&#39;&#39; (two characters!) on Windows and DOS. Note that line breaks in
HTML do not have a visual effect when viewed in a browser; you must
use markup such as <code class="inline-code">&lt;BR&gt;</code> for that. This manual
never means <code class="inline-code">&lt;BR&gt;</code> when it says
``line-break&#39;&#39;.</p>
</dd>
<dt><a name="gloss.macroDefinitionBody"></a>Macro definition body</dt>
<dd>
<p>The template fragment between the <code class="inline-code">&lt;#macro
<em class="code-color">...</em>&gt;</code> and
<code class="inline-code">&lt;/#macro&gt;</code>. This template fragment will be
executed when you call the macro (for example as
<code class="inline-code">&lt;@myMacro/&gt;</code>).</p>
</dd>
<dt><a name="gloss.methodVariable"></a>Method</dt>
<dd>
<p>A variable that calculates something based on parameters you
give, and returns the result.</p>
</dd>
<dt><a name="gloss.MVC"></a>MVC pattern</dt>
<dd>
<p>MVC stands for Model View Controller. It&#39;s a design pattern
started his life in the 70&#39;s as a framework developer by Trygve
Reenskaug for Smalltalk, and was used primary for for UI-s (user
interfaces). MVC considers three roles:</p>
<ul>
<li>
Model: Model represents application (domain) specific
information in a non-visual way. For example, an array of product
objects in the memory of your computer is the part of the
model.
</li>
<li>
View: View displays the model and provides UI. For example,
it&#39;s the task of the view component to render the array of product
objects to a HTML page.
</li>
<li>
Controller: The controller handles user input, modifies the
model, and ensures that the view is updated when needed. For
example it is the task of controller to take the incoming HTTP
requests, parse the received parameters (forms), dispatch the
requests to the proper business logic object, and chose the right
template for the HTTP response.
</li>
</ul>
<p>The most important thing for us when applying MVC for Web
applications is the separation of View from the other two roles. This
allows the separation of designers (HTML authors) from programmers.
Designers deal with the visual aspects, programmers deal with the
application logic and other technical issues; everybody works on what
he is good at. Designers and programmers are less dependent on each
other. Designers can change the appearance without programmers having
to change or recompile the program.</p>
<p>For more information I recommend reading <a href="http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier5.html">chapter
4.4</a> of Designing Enterprise Applications with the J2EE Platform
blueprint.</p>
</dd>
<dt><a name="gloss.outputEncoding"></a>Output encoding</dt>
<dd>
<p>Means output <a href="#gloss.charset">charset</a>. In
the Java world the term ``encoding&#39;&#39; is commonly (mis)used as a
synonym to ``charset&#39;&#39;.</p>
</dd>
<dt><a name="gloss.predefinedDirective"></a>Predefined directive</dt>
<dd>
<p>Directive what is defined by FreeMarker, thus always available.
Example of predefined directives: <code class="inline-code">if</code>,
<code class="inline-code">list</code>, <code class="inline-code">include</code></p>
<p>See Also
<a href="#gloss.userDefinedDirective">User-defined directive</a>
</p>
</dd>
<dt><a name="gloss.regularExpression"></a>Regular expression</dt>
<dd>
<p>A regular expression is a string that specifies a set of strings
that matches it. For example, the regular expression
<code class="inline-code">&quot;fo*&quot;</code> matches <code class="inline-code">&quot;f&quot;</code>,
<code class="inline-code">&quot;fo&quot;</code>, <code class="inline-code">&quot;foo&quot;</code>, etc. Regular
expressions are used in several languages and other tools. In
FreeMarker, the usage of them is a ``power user&#39;&#39; option. So if you
have never used them before, there is no need to worry about not being
familiar with them. But if you are interested in regular expressions,
you can find several Web pages and books about them. FreeMarker uses
the variation of regular expressions described at: <a href="http://java.sun.com/j2se/1.4.1/docs/api/java/util/regex/Pattern.html">http://java.sun.com/j2se/1.4.1/docs/api/java/util/regex/Pattern.html</a></p>
</dd>
<dt><a name="gloss.scalarVariable"></a>Scalar</dt>
<dd>
<p>A scalar variable stores a single value. A scalar is either a
string or a number or a date/time or a <a href="#gloss.boolean">boolean</a>.</p>
</dd>
<dt><a name="gloss.sequenceVariable"></a>Sequence</dt>
<dd>
<p>A sequence is a variable that contains a sequence of
subvariables. The sequence&#39;s subvariables are accessible via numerical
index, where the index of the very first object is 0, the index of the
second objects is 1, the index of the third object is 2, etc.</p>
<p>See Also
<a href="#gloss.hashVariable">Hash</a>
</p>
</dd>
<dt><a name="autoid_242"></a>SGML</dt>
<dd>See
<a href="#gloss.SGML">Standard Generalized Markup Language</a>
</dd>
<dt><a name="gloss.SGML"></a>Standard Generalized Markup Language</dt>
<dd>
<p>This is an international standard (ISO 8879) that specifies the
rules for the creation of platform-independent markup languages. HTML
is a markup language created with SGML. <a href="#gloss.XML">XML</a> is a subset (restricted version) of
SGML.</p>
<p>See Also
<a href="#gloss.XML">Extensible Markup Language</a>
</p>
</dd>
<dt><a name="gloss.startTag"></a>Start-tag</dt>
<dd>
<p><a href="#gloss.tag">Tag</a>, which indicates that the
following content is under the element, up to the <a href="#gloss.endTag">end-tag</a>. The start-tag may also
specifies <a href="#gloss.attribute">attributes</a> for the
element. An example of a start-tag: <code class="inline-code">&lt;body
bgcolor=black&gt;</code></p>
</dd>
<dt><a name="gloss.string"></a>String</dt>
<dd>
<p>A sequence of <a href="#gloss.character">characters</a>
such as ``m&#39;&#39;, ``o&#39;&#39;, ``u&#39;&#39;, ``s&#39;&#39;, ``e&#39;&#39;.</p>
</dd>
<dt><a name="gloss.tag"></a>Tag</dt>
<dd>
<p>Text fragment indicating the usage of an element in SGML.
Examples of tags: <code class="inline-code">&lt;body bgcolor=black&gt;</code>,
<code class="inline-code">&lt;/body&gt;</code></p>
<p>See Also
<a href="#gloss.startTag">Start-tag</a>,
<a href="#gloss.endTag">End-tag</a>
</p>
</dd>
<dt><a name="gloss.template"></a>Template</dt>
<dd>
<p>A template is a text file with some special character sequences
embedded into it. A template processor (e.g. FreeMarker) will
interpret special character sequences and it outputs a more or less
different text from the original text file, where the differences are
often based on a <a href="#gloss.dataModel">data-model</a>.
Thus, the original text acts as a template of the possible
outputs.</p>
</dd>
<dt><a name="gloss.templateEncoding"></a>Template encoding</dt>
<dd>
<p>Means template <a href="#gloss.charset">charset</a>. In
the Java world the term ``encoding&#39;&#39; is commonly (mis)used as a
synonym to ``charset&#39;&#39;.</p>
</dd>
<dt><a name="gloss.templateProcessingJob"></a>Template processing job</dt>
<dd>
<p>A template processing job is the act when FreeMarker merges a
template with a data-model to produce the output for a visitor. Note
that this may includes the execution of multiple template files
because the template file used for the Web page may invokes other
templates with <code class="inline-code">include</code> and
<code class="inline-code">import</code> directives. Each template-processing job is
a separated cosmos that exists only for the short period of time while
the given page is being rendered for the visitor, and then it vanishes
with all the variables created in the templates (for example,
variables created with <code class="inline-code">assign</code>,
<code class="inline-code">macro</code> or <code class="inline-code">global</code>
directives).</p>
</dd>
<dt><a name="gloss.threadSafe"></a>Thread-safe</dt>
<dd>
<p>An object is thread-safe if it is safe to call its methods from
multiple threads, even in parallel (i.e. multiple threads execute the
methods of the object at the same time). Non-thread-safe objects may
behave unpredictably in this situation, and generate wrong results,
corrupt internal data structures, etc. Thread-safety is typically
achieved in two ways with Java: with the usage
<code class="inline-code">synchronized</code> statement (or
<code class="inline-code">synchronized</code> methods), and with the immutability of
encapsulated data (i.e. you can&#39;t modify the field after you have
created the object).</p>
</dd>
<dt><a name="gloss.transformVariable"></a>Transform</dt>
<dd>
<p>This term refers to user-defined directives that are implemetned
with the now obsolete <code class="inline-code">TemplateTransformModel</code> Java
interface. The feature was originally made for implementing output
filters, hence the name.</p>
</dd>
<dt><a name="gloss.UCS"></a>UCS</dt>
<dd>
<p>This is international standard (ISO-10646) that defines a huge
set of <a href="#gloss.character">characters</a> and assigns a
unique number for each character (``!&#39;&#39; is 33, ..., ``A&#39;&#39; is 61, ``B&#39;&#39;
is 62, ..., Arabic letter hamza is 1569... etc.). This character set
(not charset) contains almost all characters used today (Latin
alphabet, Cyrillic alphabet, Chinese letters, etc.). The idea behind
UCS is that we can specify any character with a unique number, not
mater what the platform or the language is.</p>
<p>See Also
<a href="#gloss.unicode">Unicode</a>
</p>
</dd>
<dt><a name="gloss.unicode"></a>Unicode</dt>
<dd>
<p>De-facto standard developed by Unicode organization. It deals
with the classification of the characters in <a href="#gloss.UCS">UCS</a> (which is letter, which is digit, which
is uppercase, which is lowercase, etc.), and with other problems of
processing text made from the characters of UCS (e.g.
normalization).</p>
</dd>
<dt><a name="gloss.userDefinedDirective"></a>User-defined directive</dt>
<dd>
<p>Directive that is not defined by the FreeMarker core, but by the
user. These are typically application domain specific directives, like
pull-down menu generation directives, HTML form handling
directives.</p>
<p>See Also
<a href="#gloss.predefinedDirective">Predefined directive</a>
</p>
</dd>
<dt><a name="gloss.whiteSpace"></a>White-space</dt>
<dd>
<p>Characters that are totally transparent but have impact on the
visual appearance of the text. Examples of white-space characters:
space, tab (horizontal and vertical), line breaks (CR and LF), form
feed.</p>
<p>See Also
<a href="#gloss.lineBreak">Line break</a>
</p>
</dd>
<dt><a name="autoid_243"></a>XML</dt>
<dd>See
<a href="#gloss.XML">Extensible Markup Language</a>
</dd>
</dl>
<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="app_license.html"><span>Previous</span></a><a class="paging-arrow next" href="alphaidx.html"><span>Next</span></a></div></div></div></div> </div>
</div>
<div class="site-footer"><div class="site-width"><div class="footer-bottom"> <p class="last-generated">
Last generated:
<time itemprop="dateModified" datetime="2020-07-09T23:48:37Z" title="Thursday, July 9, 2020 11:48:37 PM GMT">2020-07-09 23:48:37 GMT</time> </p>
<p class="copyright">
© <span itemprop="copyrightYear">1999</span>–2020
<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="https://apache.org/">The Apache Software Foundation</a> </p>
</div></div></div></body>
</html>