ryanoakley commited on
Commit
0c5236b
·
verified ·
1 Parent(s): 32c65b5

Update templates/index.html

Browse files
Files changed (1) hide show
  1. templates/index.html +161 -65
templates/index.html CHANGED
@@ -4,7 +4,7 @@
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>AI SBOM Generator</title>
7
- <style>
8
  body {
9
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
10
  margin: 0;
@@ -27,29 +27,47 @@
27
  box-shadow: 0 2px 5px rgba(0,0,0,0.05);
28
  display: flex;
29
  align-items: center;
 
30
  margin-bottom: 30px;
31
  }
 
 
 
 
32
  .header img {
33
  height: 60px;
34
  margin-right: 15px;
35
  }
36
- /* Added header-content div for layout */
37
- .header .header-content {
38
  display: flex;
39
- flex-direction: column; /* Stack title and count */
40
  }
41
  .header h1 {
42
  margin: 0;
43
  font-size: 28px;
44
  color: #2c3e50;
45
  font-weight: 600;
46
- margin-bottom: 5px; /* Space between title and count */
47
  }
48
- /* Added style for sbom-count */
49
- .header .sbom-count {
50
- font-size: 14px;
51
- color: #555;
 
 
 
 
 
 
 
52
  font-weight: 500;
 
 
 
 
 
 
 
53
  }
54
 
55
  /* Content styling */
@@ -70,13 +88,39 @@
70
  padding-bottom: 10px;
71
  }
72
 
 
 
 
 
 
 
 
73
  .content-section p {
74
  margin-bottom: 20px;
75
  font-size: 16px;
76
  line-height: 1.7;
77
  color: #555;
78
  }
79
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  /* Form styling */
81
  .form-section {
82
  background-color: #ffffff;
@@ -130,7 +174,7 @@
130
 
131
  /* Style for disabled button */
132
  button:disabled {
133
- background-color: #bdc3c7; /* Lighter grey */
134
  cursor: not-allowed;
135
  }
136
 
@@ -143,6 +187,17 @@
143
  color: #e74c3c;
144
  }
145
 
 
 
 
 
 
 
 
 
 
 
 
146
  /* Footer styling */
147
  .footer {
148
  text-align: center;
@@ -151,30 +206,68 @@
151
  font-size: 14px;
152
  margin-top: 30px;
153
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  </style>
155
- <!-- Invisible Captcha v2 -->
156
- <script src="https://www.google.com/recaptcha/api.js" async defer></script>
157
  </head>
158
  <body>
159
- <!-- Header with logo, title, and SBOM count -->
160
- <div class="header">
161
- <a href="https://aetheris.ai/" target="_blank">
162
- <img src="https://huggingface.co/spaces/aetheris-ai/aibom-generator/resolve/main/templates/images/AetherisAI-logo.png" alt="Aetheris AI Logo">
163
- </a>
164
- <!-- Added header-content div -->
165
- <div class="header-content">
166
- <h1>AI SBOM Generator</h1>
167
- </div>
 
168
  </div>
169
 
170
  <div class="container">
171
  <!-- Form Section (Moved to top) -->
172
  <div class="form-section">
173
- <h2>Generate Your AI SBOM</h2>
174
  <p>
175
  Enter a model on Hugging Face, in a format <code>&lt;organization-or-username&gt;/&lt;model-name&gt;</code> (easy copy button), or model's URL, to generate AI SBOM in CycloneDX format. You can browse available models in the <a href="https://huggingface.co/models" target="_blank" rel="noopener noreferrer">Hugging Face models repository</a>.
176
  </p>
177
- <!-- Added id="sbom-form" to the form -->
178
  <form id="sbom-form" action="/generate" method="post" style="display: flex; flex-direction: row; align-items: center; width: 100%;">
179
  <input type="text" name="model_id" placeholder="e.g., openai/whisper-tiny" required style="flex: 1; max-width: 70%; margin-right: 10px;">
180
  <input type="hidden" name="g_recaptcha_response" id="g-recaptcha-response">
@@ -186,17 +279,17 @@
186
  id="generate-button"
187
  type="button">Generate AI SBOM</button>
188
  </form>
189
- <div style="font-size: 12px; color: #777; margin-top: 10px;">
190
- This site is protected by reCAPTCHA and the Google
191
- <a href="https://policies.google.com/privacy">Privacy Policy</a> and
192
- <a href="https://policies.google.com/terms">Terms of Service</a> apply.
193
- </div>
194
  </div>
195
 
196
  <!-- Tool Description Section -->
197
  <div class="content-section">
198
  <h2>About This Tool</h2>
199
- <p>This open-source tool helps you generate AI SBOMs for models hosted on Hugging Face. It automatically extracts and formats key information—such as model metadata, training datasets, dependencies, and configurations—into a standardized, machine-readable SBOM using the CycloneDX JSON format. While not all models have consistent metadata quality and much of the information is unstructured, this tool helps navigate those gaps by extracting available data and organizing it into a clear, standardized structure to support transparency, security, and compliance.</p>
200
  </div>
201
 
202
  <!-- Introduction Section -->
@@ -206,9 +299,12 @@
206
  </div>
207
 
208
  <!-- Support Section -->
209
- <div class="content-section">
210
- <h2>Feedback</h2>
211
- <p>For feedback or improvement requests please create a <a href="https://github.com/aetheris-ai/aibom-generator/issues" target="_blank" rel="noopener noreferrer">GitHub issue</a>.</p>
 
 
 
212
  </div>
213
 
214
  <!-- Social Section -->
@@ -225,7 +321,7 @@
225
  </div>
226
 
227
  <!-- Info Section -->
228
- <div class="content-section" style="text-align: center;>
229
  <!-- Display the SBOM count -->
230
  <div class="sbom-count">🚀 Generated AI SBOMs using this tool: <strong>{{ sbom_count if sbom_count else 'N/A' }}</strong></div>
231
  </div>
@@ -236,35 +332,35 @@
236
  </div>
237
  </div>
238
 
239
- <!-- JavaScript for loading indicator, and Captcha -->
240
- <script>
241
- function onSubmit(token ) {
242
- // Set the token in the hidden input field
243
- document.getElementById('g-recaptcha-response').value = token;
244
- var button = document.getElementById('generate-button');
245
- button.disabled = true;
246
- button.textContent = 'Generating...';
247
- // Now submit the form with the token
248
- document.getElementById('sbom-form').submit();
249
- }
250
- </script>
251
- <script>
252
- function onSubmit(token ) {
253
- console.log("reCAPTCHA callback executed with token:", token.substring(0, 10) + "...");
254
-
255
- // Set the token in the hidden input
256
- document.getElementById('g-recaptcha-response').value = token;
257
- console.log("Token set in input:", document.getElementById('g-recaptcha-response').value.substring(0, 10) + "...");
258
-
259
- // Disable button and change text
260
- var button = document.getElementById('generate-button');
261
- button.disabled = true;
262
- button.textContent = 'Generating...';
263
-
264
- // Submit the form
265
- console.log("Submitting form");
266
- document.getElementById('sbom-form').submit();
267
- }
268
- </script>
269
  </body>
270
- </html>
 
 
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>AI SBOM Generator</title>
7
+ <script type="text/javascript" src="https://gc.kis.v2.scr.kaspersky-labs.com/FD126C42-EBFA-4E12-B309-BB3FDD723AC1/main.js?attr=sNtwj5dTM60G_7sn_eHsQbX4DNdiDrF7mey5ebWGqdVpIgohIhrUTg5_VydlTt9lDjS8ye8EwVdOlUwxfsrw6-b5H53Jk9-QV87s-jqOrWakm-XDXj8L6TDffLZreOhsKBxjlf0Z_AklxjoQFUXcEyKvgdB0LBCwg2rxi2HDAPsMLpZEHjC51ABp1v4sqCsI7ZrLFmQy_Bbt56aFgfa15LNZTLuei9FNGDofjXNBEA7fJ9YlKpbYvMAlkynfJUvCAm6uiQebrledMmoWqE4PWk97S1s196n0-_Yk5_vNIS46PVtqgK0XJmPvoSsmfm8kcsn0BzTuLW-T2Wz8hH8QeZnFyhbnGLIZdkkfobLKYjDo8-U_yuoMUXjGcZ2fSZTfOiYIZCY2wxm-Gyyrv_bY9op81ECsHlfQrtLJUM--16TVpburtHQqsv5pOcSJzXfWJDemxWTPCldVikO8dk3yqQYodx1Mk_htRNp8_36bewrFNAyPdLUmX1LbyGMHHEVoVNe__hBdwZj7ayZfbJLjDQQdhNI64sEeCfDKYROU49tJqk-EXvDSkX3loPaZJptTb_Zh5scJH7WGTECgEtL2IVo-QGNyJV3tP092CSjChQzgPS5fkz_Okhdemw-hL6gbV1fuad0LqBfZWjBjwr5F7Vuc-HlUGPqnUH4FtEnoUdDlQ3NENpsC4dv60mSefNY8h9DEHIM47IRVGpiMlHiKCYcFGFVlkgVX5FU7JBE8JLNF9BBx3WCNg2w3ReulC1QieiaU-GyDrEg9vym7RxEn_E8Ac8vxFpKu69rNSKhgqwxpr3FhIHz3sE4uJJnuK8RFkKajj_MgmJC5-DfLLkpuYQ_ri2Mk9G6T1siL18QaZeku6CoQmr2zJL9oYz6Nmy1c4unxc1zXhoXHbTJT-xXdW2C0khgRMRxb83gXjk2Og3tM8s_lfcNGZTAw-e-5PfOX_DbnqATg0rF_O2NMFaaYOT6sTTDhKDFEjrAkwQX6L-epZ9J1l36rX02lHN9FXbAQ4uzPS9RCoMNTRJ7tYcBZnzMAS5wJvmrXiICK5mpNg4-l4jiao_dBpg724uuK7xZqMMkFQFy_zgY3WB98aY2o3G1zBPRFAbyjnxxiR0aoCwpM4J-FVvs8px4TCM7JlihR6c2Mdc0YIY7R-3E3HPrLx3k-z4fFuxqxthOH8FaTQf6_4eHn0st4Tm8KIuJxW1T9N0B6_sR7Ta4w2yH5-llgw2Uj3vCf0UqFJfbpKBpG3QJrw58T5BhakWz41QPwVj2-9ycKShWMQsAJggfvYXS4cwck87itW9gazBsafbk34Bl9hE4lPXMqhRAuZQ7hw289zBz1IWyF1r0NyMdrJCr0e2qPFMEw-KD66SDa8M9SRakJdzlf41CVaTce_2R8cnpDCf0kefrmADcn6pdinJ8jPud3z77EMiLhrWF0qGo_Pxh3Q7Oyggts6PYGoYL5OIEu6Z-KpXARCTqlmC6Eb0gSKpKt9Tur4KJ5sqvlbtaurt_Nr4ZfGeArobe2OgINoDlK-NAZHLj7f_kuo8ch17L_gpxBozDAdiml1W85YtLgNO_CRVsxaXkqKJNIqV-gF12YJVPm94t9LuML1h-KPgiTLs611bKGOBTD0ScA00CN4OkIrxKu7HJqJfCw3gaJfoLg2J44k0CpXYSFqu1fkBO4D2cUbc03s3dzU98Zb6RyKL3Yc1gcFazQsHb1_430X7e6" nonce="d3494592d4affc5716a763685fc2b1e3" charset="UTF-8"></script><link rel="stylesheet" crossorigin="anonymous" href="https://gc.kis.v2.scr.kaspersky-labs.com/E3E8934C-235A-4B0E-825A-35A08381A191/abn/main.css?attr=aHR0cHM6Ly9tYWlsLWF0dGFjaG1lbnQuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2F0dGFjaG1lbnQvdS8wLz91aT0yJmlrPTI5MzQwOTYwNGImYXR0aWQ9MC4zJnBlcm1tc2dpZD1tc2ctZjoxODM1MTAyNDUyNzcxMTM4MDU0JnRoPTE5Nzc5N2Y1M2ZkZjJhMDYmdmlldz1hdHQmZGlzcD1zYWZlJnJlYWxhdHRpZD1mX21iemFlNzd2MSZ6dyZzYWRkYmF0PUFOR2pkSjhneEk0b3liTjRkakNuMlZQclZqSVpLcFllTDJJY0daTmJwZlloVldwUzl6M0JhRmp5aFYwLVcyZU5jM1NuUzF4NzF4ZjN5TWJQQTM4SlE3NUpqYXVUM0RPbk05WDQzMF9udjZhRGZoNDlzLXNONUJNTnhMU2VlMHcxTlU5ZDJzUTdwYWZNSXJ1cEpQejRfN0FyQ290aFEyUEczRHBsejExeW9yRGVTVjVabHVaNFhaeDZKSVR2XzNGZTBxNjZRY1dQZVVGeWwyNzNDMl9vc3g5TzNlUDh0dHJIaFJ6SURXbEVtRkVKbnhrVWpsV1VvZmNKTzdZSHdNZno0THg3ajM5RjJJQ2JKRlVLOUVQQ2FDa2tUbGVabExybF95ZzluakJvY1NBX2Eya1lHTnJxOE1Ia2pjTlpfakM5V3BOdTQ3RnhHVGpHT0QzOHlCLWVoS0pSN0QxRUh6Zm1GVEFZVHBiUmo3V04yaVJmcWRndi1HbkVSWVQ4bTB0eDBqSHNGV0RBZVBTbGh5QzJyMTlJQlBIYWNQcEVpTXdYak83Wlhndy1PUjJITWlQRXQteEdMOFBHT1hWTmxQVUtzMmNLYlBGQ2hwUWF5NWVwcmMzSTJMcFhPUDUtZTQ2S092d2RUbXNFekp6aXpIUHp4eTZnbXFSdWl2QWxsbjBCSE9EUDRmcy1tTms5N3dvNGZFN29qMkdYdlFJMDk1OGY2MEJLaExiOG8xQmZWcXdBRXBoaFdsNUtoUVhMWmhWNlEyZlQ0NUtzOW0zWVEtM0Rya1kyUFdXa2ZYV3EyQWJ1dVFZdEU2d2dtYzFWYlVQbUZncEFVV2RkR3ZCOU5udGY0MmNvS01lRC1PekpyZmxINkRXU1F2RHhxOEZJWXg3dDBrLVhRTXZpaVNKU3M0RG5rLXp3MGQzZ29aUWpGWXQ1cEdWMmlVT1RoWVlGYTBxR3dUWTR3RE4tcTYxVGFONDFfbzlSMEFfYURjSTRmRXpJNFB6VC00R0dMVDFXUkoyblZuTTBudnV4NUpsUk90QjBpd3U3T3BJVUt2aU54amhmTFExTHFEVFJOSEpfRkxFWWJLUlNOWFJxZklaRmQxSkI4dGRka2FlY1ktanR4YXJoNDBXTFdsMmVUTTMwZUh6WnJjM2Y3UFNWYTdGNDZQQnRWc0s1dEJDSUhpQWdtOFVhUVRXMkJxWF9BMWFuSmRNRm1ZclZRdW9tSkUyTS1Mb2FXLVBtTENlQ01wVXJfR0trRWw2N1drM01FSHpEUjlLUmZ1V05WY2JMdUhKZjljU3p0UFBSLS1hNkFnOVdFM3M0SEhkVWxfQTFMZkxTdVREU2JwTVVVRkl2Q2xCdkk5clVkWjZvWXg3a2VHcWJIQzhLc0JpRDl2YWZaazV4RVFqYmhQQlA0MVFTdVE"/><style>
8
  body {
9
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
10
  margin: 0;
 
27
  box-shadow: 0 2px 5px rgba(0,0,0,0.05);
28
  display: flex;
29
  align-items: center;
30
+ justify-content: space-between;
31
  margin-bottom: 30px;
32
  }
33
+ .header-left {
34
+ display: flex;
35
+ align-items: center;
36
+ }
37
  .header img {
38
  height: 60px;
39
  margin-right: 15px;
40
  }
41
+ .header-content {
 
42
  display: flex;
43
+ flex-direction: column;
44
  }
45
  .header h1 {
46
  margin: 0;
47
  font-size: 28px;
48
  color: #2c3e50;
49
  font-weight: 600;
50
+ margin-bottom: 5px;
51
  }
52
+ .header-right {
53
+ display: flex;
54
+ gap: 10px;
55
+ }
56
+ .github-button {
57
+ display: inline-block;
58
+ padding: 12px 20px;
59
+ background-color: #3498db;
60
+ color: white;
61
+ text-decoration: none;
62
+ border-radius: 6px;
63
  font-weight: 500;
64
+ font-size: 15px;
65
+ transition: background-color 0.3s;
66
+ }
67
+ .github-button:hover {
68
+ background-color: #2980b9;
69
+ color: white;
70
+ text-decoration: none;
71
  }
72
 
73
  /* Content styling */
 
88
  padding-bottom: 10px;
89
  }
90
 
91
+ .content-section h3 {
92
+ color: #2c3e50;
93
+ margin-top: 0;
94
+ margin-bottom: 15px;
95
+ font-size: 18px;
96
+ }
97
+
98
  .content-section p {
99
  margin-bottom: 20px;
100
  font-size: 16px;
101
  line-height: 1.7;
102
  color: #555;
103
  }
104
+
105
+ /* Support section styling */
106
+ .support-section {
107
+ background-color: #f8f9fa;
108
+ border-left: 4px solid #6c757d;
109
+ padding: 20px;
110
+ margin: 30px 0;
111
+ border-radius: 8px;
112
+ text-align: center;
113
+ }
114
+ .support-section h3 {
115
+ margin-top: 0;
116
+ color: #495057;
117
+ margin-bottom: 15px;
118
+ }
119
+ .support-section p {
120
+ margin-bottom: 15px;
121
+ color: #6c757d;
122
+ }
123
+
124
  /* Form styling */
125
  .form-section {
126
  background-color: #ffffff;
 
174
 
175
  /* Style for disabled button */
176
  button:disabled {
177
+ background-color: #bdc3c7;
178
  cursor: not-allowed;
179
  }
180
 
 
187
  color: #e74c3c;
188
  }
189
 
190
+ a {
191
+ color: #3498db;
192
+ text-decoration: none;
193
+ transition: color 0.3s;
194
+ }
195
+
196
+ a:hover {
197
+ color: #2980b9;
198
+ text-decoration: underline;
199
+ }
200
+
201
  /* Footer styling */
202
  .footer {
203
  text-align: center;
 
206
  font-size: 14px;
207
  margin-top: 30px;
208
  }
209
+
210
+ /* Mobile responsiveness */
211
+ @media (max-width: 768px) {
212
+ .container {
213
+ padding: 0 15px;
214
+ }
215
+
216
+ .header {
217
+ flex-direction: column;
218
+ text-align: center;
219
+ padding: 15px;
220
+ }
221
+
222
+ .header-left {
223
+ margin-bottom: 15px;
224
+ }
225
+
226
+ .header img {
227
+ margin-bottom: 10px;
228
+ margin-right: 0;
229
+ }
230
+
231
+ form {
232
+ flex-direction: column !important;
233
+ align-items: stretch !important;
234
+ }
235
+
236
+ input[type="text"] {
237
+ width: 100% !important;
238
+ max-width: none !important;
239
+ margin-right: 0 !important;
240
+ margin-bottom: 15px;
241
+ }
242
+
243
+ button {
244
+ width: 100%;
245
+ }
246
+ }
247
  </style>
248
+ <!-- Invisible Captcha v2 -->
249
+ <script src="https://www.google.com/recaptcha/api.js" async defer></script>
250
  </head>
251
  <body>
252
+ <!-- Header with logo and title -->
253
+ <div class="container">
254
+ <div class="header">
255
+ <div class="header-left">
256
+ <a href="https://aetheris.ai/" target="_blank">
257
+ <img src="https://huggingface.co/spaces/aetheris-ai/aibom-generator/resolve/main/templates/images/AetherisAI-logo.png" alt="Aetheris AI Logo">
258
+ </a>
259
+ <h1>AI SBOM Generator</h1>
260
+ </div>
261
+ </div>
262
  </div>
263
 
264
  <div class="container">
265
  <!-- Form Section (Moved to top) -->
266
  <div class="form-section">
267
+ <h2>Generate AI SBOM</h2>
268
  <p>
269
  Enter a model on Hugging Face, in a format <code>&lt;organization-or-username&gt;/&lt;model-name&gt;</code> (easy copy button), or model's URL, to generate AI SBOM in CycloneDX format. You can browse available models in the <a href="https://huggingface.co/models" target="_blank" rel="noopener noreferrer">Hugging Face models repository</a>.
270
  </p>
 
271
  <form id="sbom-form" action="/generate" method="post" style="display: flex; flex-direction: row; align-items: center; width: 100%;">
272
  <input type="text" name="model_id" placeholder="e.g., openai/whisper-tiny" required style="flex: 1; max-width: 70%; margin-right: 10px;">
273
  <input type="hidden" name="g_recaptcha_response" id="g-recaptcha-response">
 
279
  id="generate-button"
280
  type="button">Generate AI SBOM</button>
281
  </form>
282
+ <div style="font-size: 12px; color: #777; margin-top: 10px;">
283
+ This site is protected by reCAPTCHA and the Google
284
+ <a href="https://policies.google.com/privacy">Privacy Policy</a> and
285
+ <a href="https://policies.google.com/terms">Terms of Service</a> apply.
286
+ </div>
287
  </div>
288
 
289
  <!-- Tool Description Section -->
290
  <div class="content-section">
291
  <h2>About This Tool</h2>
292
+ <p>This open-source tool helps you generate AI SBOMs for models hosted on Hugging Face. It automatically extracts and formats key information—such as model metadata, training datasets, dependencies, and configurations—into a standardized, machine-readable SBOM using the CycloneDX JSON format. While not all models have consistent metadata quality and much of the information is unstructured, this tool helps navigate those gaps by extracting available data and organizing it into a clear, standardized structure to support transparency, security, and compliance. <a href="https://aisuf.org/blogs/f/ai-sbom-generator" target="_blank" rel="noopener noreferrer">Read more</a>.</p>
293
  </div>
294
 
295
  <!-- Introduction Section -->
 
299
  </div>
300
 
301
  <!-- Support Section -->
302
+ <div class="support-section">
303
+ <h3>🛠️ Support & Feedback</h3>
304
+ <p>If you encountered any problems, found a bug, or have suggestions for improvement, we'd love to hear from you!</p>
305
+ <a href="https://github.com/aetheris-ai/aibom-generator" target="_blank" class="github-button">
306
+ 📋 View on GitHub
307
+ </a>
308
  </div>
309
 
310
  <!-- Social Section -->
 
321
  </div>
322
 
323
  <!-- Info Section -->
324
+ <div class="content-section" style="text-align: center;">
325
  <!-- Display the SBOM count -->
326
  <div class="sbom-count">🚀 Generated AI SBOMs using this tool: <strong>{{ sbom_count if sbom_count else 'N/A' }}</strong></div>
327
  </div>
 
332
  </div>
333
  </div>
334
 
335
+ <!-- JavaScript for loading indicator and Captcha -->
336
+ <script>
337
+ function onSubmit(token) {
338
+ console.log("reCAPTCHA callback executed with token:", token.substring(0, 10) + "...");
339
+
340
+ // Set the token in the hidden input
341
+ document.getElementById('g-recaptcha-response').value = token;
342
+ console.log("Token set in input:", document.getElementById('g-recaptcha-response').value.substring(0, 10) + "...");
343
+
344
+ // Disable button and change text
345
+ var button = document.getElementById('generate-button');
346
+ button.disabled = true;
347
+ button.textContent = 'Generating...';
348
+
349
+ // Submit the form
350
+ console.log("Submitting form");
351
+ document.getElementById('sbom-form').submit();
352
+ }
353
+
354
+ // Add Enter key support for form submission
355
+ document.addEventListener('DOMContentLoaded', function() {
356
+ document.querySelector('input[name="model_id"]').addEventListener('keypress', function(e) {
357
+ if (e.key === 'Enter') {
358
+ e.preventDefault();
359
+ document.getElementById('generate-button').click();
360
+ }
361
+ });
362
+ });
363
+ </script>
 
364
  </body>
365
+ </html>
366
+