blob: cff713f048a6cd7f5f1007ca343c85530f0d843c [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>RewritePositionDeleteFiles</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="RewritePositionDeleteFiles";
}
}
catch(err) {
}
//-->
var data = {"i0":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.iceberg.actions</a></div>
<h2 title="Interface RewritePositionDeleteFiles" class="title">Interface RewritePositionDeleteFiles</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd><code><a href="Action.html" title="interface in org.apache.iceberg.actions">Action</a>&lt;<a href="RewritePositionDeleteFiles.html" title="interface in org.apache.iceberg.actions">RewritePositionDeleteFiles</a>,&#8203;<a href="RewritePositionDeleteFiles.Result.html" title="interface in org.apache.iceberg.actions">RewritePositionDeleteFiles.Result</a>&gt;</code>, <code><a href="SnapshotUpdate.html" title="interface in org.apache.iceberg.actions">SnapshotUpdate</a>&lt;<a href="RewritePositionDeleteFiles.html" title="interface in org.apache.iceberg.actions">RewritePositionDeleteFiles</a>,&#8203;<a href="RewritePositionDeleteFiles.Result.html" title="interface in org.apache.iceberg.actions">RewritePositionDeleteFiles.Result</a>&gt;</code></dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="../spark/actions/RewritePositionDeleteFilesSparkAction.html" title="class in org.apache.iceberg.spark.actions">RewritePositionDeleteFilesSparkAction</a></code></dd>
</dl>
<hr>
<pre>public interface <span class="typeNameLabel">RewritePositionDeleteFiles</span>
extends <a href="SnapshotUpdate.html" title="interface in org.apache.iceberg.actions">SnapshotUpdate</a>&lt;<a href="RewritePositionDeleteFiles.html" title="interface in org.apache.iceberg.actions">RewritePositionDeleteFiles</a>,&#8203;<a href="RewritePositionDeleteFiles.Result.html" title="interface in org.apache.iceberg.actions">RewritePositionDeleteFiles.Result</a>&gt;</pre>
<div class="block">An action for rewriting position delete files.
<p>Generally used for optimizing the size and layout of position delete files within a table.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Interface</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RewritePositionDeleteFiles.FileGroupInfo.html" title="interface in org.apache.iceberg.actions">RewritePositionDeleteFiles.FileGroupInfo</a></span></code></th>
<td class="colLast">
<div class="block">A description of a position delete file group, when it was processed, and within which
partition.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RewritePositionDeleteFiles.FileGroupRewriteResult.html" title="interface in org.apache.iceberg.actions">RewritePositionDeleteFiles.FileGroupRewriteResult</a></span></code></th>
<td class="colLast">
<div class="block">For a particular position delete file group, the number of position delete files which are
newly created and the number of files which were formerly part of the table but have been
rewritten.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RewritePositionDeleteFiles.Result.html" title="interface in org.apache.iceberg.actions">RewritePositionDeleteFiles.Result</a></span></code></th>
<td class="colLast">
<div class="block">The action result that contains a summary of the execution.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- =========== FIELD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#MAX_CONCURRENT_FILE_GROUP_REWRITES">MAX_CONCURRENT_FILE_GROUP_REWRITES</a></span></code></th>
<td class="colLast">
<div class="block">The max number of file groups to be simultaneously rewritten by the rewrite strategy.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#MAX_CONCURRENT_FILE_GROUP_REWRITES_DEFAULT">MAX_CONCURRENT_FILE_GROUP_REWRITES_DEFAULT</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#PARTIAL_PROGRESS_ENABLED">PARTIAL_PROGRESS_ENABLED</a></span></code></th>
<td class="colLast">
<div class="block">Enable committing groups of files (see max-file-group-size-bytes) prior to the entire rewrite
completing.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#PARTIAL_PROGRESS_ENABLED_DEFAULT">PARTIAL_PROGRESS_ENABLED_DEFAULT</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#PARTIAL_PROGRESS_MAX_COMMITS">PARTIAL_PROGRESS_MAX_COMMITS</a></span></code></th>
<td class="colLast">
<div class="block">The maximum amount of Iceberg commits that this rewrite is allowed to produce if partial
progress is enabled.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#PARTIAL_PROGRESS_MAX_COMMITS_DEFAULT">PARTIAL_PROGRESS_MAX_COMMITS_DEFAULT</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#REWRITE_JOB_ORDER">REWRITE_JOB_ORDER</a></span></code></th>
<td class="colLast">
<div class="block">Forces the rewrite job order based on the value.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#REWRITE_JOB_ORDER_DEFAULT">REWRITE_JOB_ORDER_DEFAULT</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="RewritePositionDeleteFiles.html" title="interface in org.apache.iceberg.actions">RewritePositionDeleteFiles</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#filter(org.apache.iceberg.expressions.Expression)">filter</a></span>&#8203;(<a href="../expressions/Expression.html" title="interface in org.apache.iceberg.expressions">Expression</a>&nbsp;expression)</code></th>
<td class="colLast">
<div class="block">A filter for finding deletes to rewrite.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.apache.iceberg.actions.Action">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.iceberg.actions.<a href="Action.html" title="interface in org.apache.iceberg.actions">Action</a></h3>
<code><a href="Action.html#execute()">execute</a>, <a href="Action.html#option(java.lang.String,java.lang.String)">option</a>, <a href="Action.html#options(java.util.Map)">options</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.apache.iceberg.actions.SnapshotUpdate">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.iceberg.actions.<a href="SnapshotUpdate.html" title="interface in org.apache.iceberg.actions">SnapshotUpdate</a></h3>
<code><a href="SnapshotUpdate.html#snapshotProperty(java.lang.String,java.lang.String)">snapshotProperty</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a id="PARTIAL_PROGRESS_ENABLED">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PARTIAL_PROGRESS_ENABLED</h4>
<pre>static final&nbsp;java.lang.String PARTIAL_PROGRESS_ENABLED</pre>
<div class="block">Enable committing groups of files (see max-file-group-size-bytes) prior to the entire rewrite
completing. This will produce additional commits but allow for progress even if some groups
fail to commit. This setting will not change the correctness of the rewrite operation as file
groups can be compacted independently.
<p>The default is false, which produces a single commit when the entire job has completed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.iceberg.actions.RewritePositionDeleteFiles.PARTIAL_PROGRESS_ENABLED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="PARTIAL_PROGRESS_ENABLED_DEFAULT">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PARTIAL_PROGRESS_ENABLED_DEFAULT</h4>
<pre>static final&nbsp;boolean PARTIAL_PROGRESS_ENABLED_DEFAULT</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.iceberg.actions.RewritePositionDeleteFiles.PARTIAL_PROGRESS_ENABLED_DEFAULT">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="PARTIAL_PROGRESS_MAX_COMMITS">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PARTIAL_PROGRESS_MAX_COMMITS</h4>
<pre>static final&nbsp;java.lang.String PARTIAL_PROGRESS_MAX_COMMITS</pre>
<div class="block">The maximum amount of Iceberg commits that this rewrite is allowed to produce if partial
progress is enabled. This setting has no effect if partial progress is disabled.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.iceberg.actions.RewritePositionDeleteFiles.PARTIAL_PROGRESS_MAX_COMMITS">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="PARTIAL_PROGRESS_MAX_COMMITS_DEFAULT">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PARTIAL_PROGRESS_MAX_COMMITS_DEFAULT</h4>
<pre>static final&nbsp;int PARTIAL_PROGRESS_MAX_COMMITS_DEFAULT</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.iceberg.actions.RewritePositionDeleteFiles.PARTIAL_PROGRESS_MAX_COMMITS_DEFAULT">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="MAX_CONCURRENT_FILE_GROUP_REWRITES">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>MAX_CONCURRENT_FILE_GROUP_REWRITES</h4>
<pre>static final&nbsp;java.lang.String MAX_CONCURRENT_FILE_GROUP_REWRITES</pre>
<div class="block">The max number of file groups to be simultaneously rewritten by the rewrite strategy. The
structure and contents of the group is determined by the rewrite strategy. Each file group will
be rewritten independently and asynchronously.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.iceberg.actions.RewritePositionDeleteFiles.MAX_CONCURRENT_FILE_GROUP_REWRITES">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="MAX_CONCURRENT_FILE_GROUP_REWRITES_DEFAULT">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>MAX_CONCURRENT_FILE_GROUP_REWRITES_DEFAULT</h4>
<pre>static final&nbsp;int MAX_CONCURRENT_FILE_GROUP_REWRITES_DEFAULT</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.iceberg.actions.RewritePositionDeleteFiles.MAX_CONCURRENT_FILE_GROUP_REWRITES_DEFAULT">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="REWRITE_JOB_ORDER">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>REWRITE_JOB_ORDER</h4>
<pre>static final&nbsp;java.lang.String REWRITE_JOB_ORDER</pre>
<div class="block">Forces the rewrite job order based on the value.
<ul>
<li>If rewrite-job-order=bytes-asc, then rewrite the smallest job groups first.
<li>If rewrite-job-order=bytes-desc, then rewrite the largest job groups first.
<li>If rewrite-job-order=files-asc, then rewrite the job groups with the least files first.
<li>If rewrite-job-order=files-desc, then rewrite the job groups with the most files first.
<li>If rewrite-job-order=none, then rewrite job groups in the order they were planned (no
specific ordering).
</ul>
<p>Defaults to none.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.iceberg.actions.RewritePositionDeleteFiles.REWRITE_JOB_ORDER">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="REWRITE_JOB_ORDER_DEFAULT">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>REWRITE_JOB_ORDER_DEFAULT</h4>
<pre>static final&nbsp;java.lang.String REWRITE_JOB_ORDER_DEFAULT</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="filter(org.apache.iceberg.expressions.Expression)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>filter</h4>
<pre class="methodSignature"><a href="RewritePositionDeleteFiles.html" title="interface in org.apache.iceberg.actions">RewritePositionDeleteFiles</a>&nbsp;filter&#8203;(<a href="../expressions/Expression.html" title="interface in org.apache.iceberg.expressions">Expression</a>&nbsp;expression)</pre>
<div class="block">A filter for finding deletes to rewrite.
<p>The filter will be converted to a partition filter with an inclusive projection. Any file
that may contain rows matching this filter will be used by the action. The matching delete
files will be rewritten.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>expression</code> - An iceberg expression used to find deletes.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this for method chaining</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>