634 lines
18 KiB
HTML
634 lines
18 KiB
HTML
|
<!DOCTYPE html>
|
|||
|
<html>
|
|||
|
<head lang="en">
|
|||
|
<meta charset="UTF-8" />
|
|||
|
<title>
|
|||
|
Print - Lazyload demos
|
|||
|
</title>
|
|||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|||
|
<style>
|
|||
|
body {
|
|||
|
margin: 0;
|
|||
|
}
|
|||
|
|
|||
|
ul,
|
|||
|
li {
|
|||
|
list-style-type: none;
|
|||
|
margin: 0;
|
|||
|
padding: 0;
|
|||
|
}
|
|||
|
|
|||
|
a,
|
|||
|
img {
|
|||
|
display: block;
|
|||
|
}
|
|||
|
|
|||
|
img {
|
|||
|
border: 0;
|
|||
|
width: 220px;
|
|||
|
height: 280px;
|
|||
|
}
|
|||
|
|
|||
|
img:not([src]) {
|
|||
|
visibility: hidden;
|
|||
|
}
|
|||
|
|
|||
|
.topBar {
|
|||
|
position: fixed;
|
|||
|
padding: 10px;
|
|||
|
background-image: linear-gradient(to top, #fff3, #ffff);
|
|||
|
top: 0;
|
|||
|
right: 0;
|
|||
|
left: 0;
|
|||
|
}
|
|||
|
|
|||
|
.topBar button {
|
|||
|
background-color: rgb(0, 157, 255);
|
|||
|
background-image: linear-gradient(to bottom, #0000, #0003);
|
|||
|
color: white;
|
|||
|
padding: 10px;
|
|||
|
font-size: 16px;
|
|||
|
width: 100%;
|
|||
|
max-width: 400px;
|
|||
|
display: block;
|
|||
|
min-height: 48px;
|
|||
|
box-sizing: border-box;
|
|||
|
}
|
|||
|
|
|||
|
.topBar button:disabled {
|
|||
|
opacity: 0.5;
|
|||
|
}
|
|||
|
|
|||
|
@media print {
|
|||
|
.topBar {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* Fixes Firefox anomaly during image load */
|
|||
|
@-moz-document url-prefix() {
|
|||
|
img:-moz-loading {
|
|||
|
visibility: hidden;
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|
|||
|
</head>
|
|||
|
|
|||
|
<body>
|
|||
|
<h1>Print demo</h1>
|
|||
|
<div class="topBar">
|
|||
|
<button class="print">🖨️ ️Print</button>
|
|||
|
</div>
|
|||
|
<div id="results1" class="results">
|
|||
|
<ul>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44721746jj.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
src="https://via.placeholder.com/440x560?text=Img+01"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/open-toe_cod44740806jx.html">
|
|||
|
<img
|
|||
|
alt="Open toe"
|
|||
|
src="https://via.placeholder.com/440x560?text=Img+02"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/sneakers-tennis-shoes-basse_cod44735977gr.html">
|
|||
|
<img
|
|||
|
alt="Sneakers & Tennis"
|
|||
|
src="https://via.placeholder.com/440x560?text=Img+03"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/sneakers-tennis-shoes-basse_cod44738717am.html">
|
|||
|
<img
|
|||
|
alt="Sneakers & Tennis shoes basse"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+04"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/sneakers-tennis-shoes-alte_cod44739940cb.html">
|
|||
|
<img
|
|||
|
alt="Sneakers & Tennis shoes alte"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+05"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/sneakers-tennis-shoes-alte_cod44740860xg.html">
|
|||
|
<img
|
|||
|
alt="Sneakers & Tennis shoes alte"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+06"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/sneakers-tennis-shoes-basse_cod44738719vn.html">
|
|||
|
<img
|
|||
|
alt="Sneakers & Tennis shoes basse"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+07"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/sneakers-tennis-shoes-basse_cod44739938wk.html">
|
|||
|
<img
|
|||
|
alt="Sneakers & Tennis shoes basse"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+08"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivali_cod44736534fq.html">
|
|||
|
<img
|
|||
|
alt="Stivali"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+09"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivali_cod44735388ui.html">
|
|||
|
<img
|
|||
|
alt="Stivali"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+10"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44739165ev.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+11"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44739454hf.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+12"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivali_cod44719480km.html">
|
|||
|
<img
|
|||
|
alt="Stivali"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+13"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44719687td.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+14"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/decollete_cod44721899ng.html">
|
|||
|
<img
|
|||
|
alt="Décolleté"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+15"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/mocassini_cod44721744sl.html">
|
|||
|
<img
|
|||
|
alt="Mocassini"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+16"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44716730kr.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+17"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/decollete_cod44718734xl.html">
|
|||
|
<img
|
|||
|
alt="Décolleté"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+18"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/decollete_cod44721796uk.html">
|
|||
|
<img
|
|||
|
alt="Décolleté"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+19"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/francesine_cod44717679mj.html">
|
|||
|
<img
|
|||
|
alt="Francesine"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+20"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44724594vu.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+21"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/decollete_cod44726148aq.html">
|
|||
|
<img
|
|||
|
alt="Décolleté"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+22"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/mocassini_cod44719629nt.html">
|
|||
|
<img
|
|||
|
alt="Mocassini"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+23"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/mocassini_cod44725329kq.html">
|
|||
|
<img
|
|||
|
alt="Mocassini"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+24"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivali_cod44724026qs.html">
|
|||
|
<img
|
|||
|
alt="Stivali"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+25"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44720256gw.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+26"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44722062id.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+27"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/mocassini_cod44722402rh.html">
|
|||
|
<img
|
|||
|
alt="Mocassini"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+28"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44726296vu.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+29"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44725755ct.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+30"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44725348nv.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+31"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44721879xx.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+32"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/cuissardes_cod44729472iq.html">
|
|||
|
<img
|
|||
|
alt="Cuissardes"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+33"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/decollete_cod44725388jv.html">
|
|||
|
<img
|
|||
|
alt="Décolleté"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+34"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/stivaletti_cod44721854ce.html">
|
|||
|
<img
|
|||
|
alt="Stivaletti"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+35"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/sneakers-tennis-shoes-basse_cod44727690jp.html">
|
|||
|
<img
|
|||
|
alt="Sneakers & Tennis shoes basse"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+36"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/mocassini_cod44727501hh.html">
|
|||
|
<img
|
|||
|
alt="Mocassini"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+37"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/sneakers-tennis-shoes-basse_cod44727038aq.html">
|
|||
|
<img
|
|||
|
alt="Sneakers & Tennis shoes basse"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+38"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/mocassini_cod44704882bq.html">
|
|||
|
<img
|
|||
|
alt="Mocassini"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+39"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<a href="#/it/donna/mocassini_cod44734002vc.html">
|
|||
|
<img
|
|||
|
alt="Mocassini"
|
|||
|
class="lazy"
|
|||
|
data-src="https://via.placeholder.com/440x560?text=Img+40"
|
|||
|
width="220"
|
|||
|
height="280"
|
|||
|
/>
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
<script src="../dist/lazyload.min.js"></script>
|
|||
|
<script>
|
|||
|
/*
|
|||
|
CALLBACKS DEFINITION
|
|||
|
--------------------
|
|||
|
One definition to rule all demos */
|
|||
|
|
|||
|
function logElementEvent(eventName, element) {
|
|||
|
console.log(Date.now(), eventName, element.getAttribute("data-src"));
|
|||
|
}
|
|||
|
|
|||
|
var callback_enter = function (element) {
|
|||
|
logElementEvent("🔑 ENTERED", element);
|
|||
|
};
|
|||
|
var callback_exit = function (element) {
|
|||
|
logElementEvent("🚪 EXITED", element);
|
|||
|
};
|
|||
|
var callback_loading = function (element) {
|
|||
|
logElementEvent("⌚ LOADING", element);
|
|||
|
};
|
|||
|
var callback_loaded = function (element) {
|
|||
|
logElementEvent("👍 LOADED", element);
|
|||
|
};
|
|||
|
var callback_error = function (element) {
|
|||
|
logElementEvent("💀 ERROR", element);
|
|||
|
element.src =
|
|||
|
"https://via.placeholder.com/440x560/?text=Error+Placeholder";
|
|||
|
};
|
|||
|
var callback_cancel = function (element) {
|
|||
|
logElementEvent("🔥 CANCEL", element);
|
|||
|
};
|
|||
|
var callback_finish = function () {
|
|||
|
logElementEvent("✔️ FINISHED", document.documentElement);
|
|||
|
// Open print dialog here!
|
|||
|
allLoaded = true;
|
|||
|
if (printRequested) {
|
|||
|
openPrintDialog();
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
/*
|
|||
|
CUSTOM PRINT BUTTON MANAGEMENT
|
|||
|
------------------------------
|
|||
|
The best way to print it is to provide a custom button which
|
|||
|
first download all the remaining images, then open the print dialog */
|
|||
|
|
|||
|
var printRequested = false;
|
|||
|
var allLoaded = false;
|
|||
|
|
|||
|
function printButtonHandler(event) {
|
|||
|
printButton.innerHTML = "Preparing...";
|
|||
|
printButton.disabled = true;
|
|||
|
if (allLoaded) {
|
|||
|
openPrintDialog();
|
|||
|
} else {
|
|||
|
printRequested = true;
|
|||
|
wLazyLoad.loadAll();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function openPrintDialog() {
|
|||
|
printButton.innerHTML = printButtonContent;
|
|||
|
printButton.disabled = false;
|
|||
|
window.print();
|
|||
|
}
|
|||
|
|
|||
|
var printButton = document.querySelector(".print");
|
|||
|
printButtonContent = printButton.innerHTML;
|
|||
|
printButton.addEventListener("click", printButtonHandler);
|
|||
|
|
|||
|
/*
|
|||
|
LAZYLOAD DEFINITION
|
|||
|
-------------------
|
|||
|
Global instance of LazyLoad in wLazyLoad,
|
|||
|
used to call the loadAll method in different points */
|
|||
|
|
|||
|
var wLazyLoad = new LazyLoad({
|
|||
|
// Assign the callbacks defined above
|
|||
|
callback_enter: callback_enter,
|
|||
|
callback_exit: callback_exit,
|
|||
|
callback_cancel: callback_cancel,
|
|||
|
callback_loading: callback_loading,
|
|||
|
callback_loaded: callback_loaded,
|
|||
|
callback_error: callback_error,
|
|||
|
callback_finish: callback_finish
|
|||
|
});
|
|||
|
|
|||
|
/*
|
|||
|
BROWSER'S NATIVE PRINT EVENTS LISTENERS
|
|||
|
---------------------------------------
|
|||
|
In order to make browsers load all the images before printing
|
|||
|
even if the user doesn't press the custom print button.
|
|||
|
NOTE that this works only partially in some browsers! */
|
|||
|
|
|||
|
var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
|
|||
|
if (!isSafari) {
|
|||
|
window.onbeforeprint = function () {
|
|||
|
wLazyLoad.loadAll();
|
|||
|
};
|
|||
|
} else {
|
|||
|
// Safari doesn't support the onbeforeprint event
|
|||
|
var mediaQueryList = window.matchMedia("print");
|
|||
|
mediaQueryList.addListener(function (mql) {
|
|||
|
if (mql.matches) {
|
|||
|
wLazyLoad.loadAll();
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
</script>
|
|||
|
</body>
|
|||
|
</html>
|