PageSourceSearch

https://xeggex.com/js/pages/twofactorhelp2.page.js?v=7bcb0e2fc1bc

js xeggex.com collected 2026-09-25 19:54:36 UTC 23,726 bytes, 609 lines download raw bytes

1parasails.registerPage('twofactorhelp2', {
2  //  ╦╔╗╔╦╔╦╗╦╔═╗╦    ╔═╗╔╦╗╔═╗╔╦╗╔═╗
3  //  ║║║║║ ║ ║╠═╣║    ╚═╗ ║ ╠═╣ ║ ║╣
4  //  ╩╝╚╝╩ ╩ ╩╩ ╩╩═╝  ╚═╝ ╩ ╩ ╩ ╩ ╚═╝
5  data: {
6    //…
7
8  },
9
10  //  ╦  ╦╔═╗╔═╗╔═╗╦ ╦╔═╗╦  ╔═╗
11  //  ║  ║╠╣ ║╣ ║  ╚╦╝║  ║  ║╣
12  //  ╩═╝╩╚  ╚═╝╚═╝ ╩ ╚═╝╩═╝╚═╝
13  beforeMount: function() {
14    //…
15  },
16  mounted: async function() {
17    //…
18    
19    var topThis = this;
20    var twofactorhelper = this.twofactorhelper;
21
22    $('#resetbtn').on("click", function(event) {
23    
24    	event.preventDefault();
25    
26    	$('#resetbtn').html(`<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>`);
27		
28		$('#resetbtn').prop("disabled", true);
29		
30		var pincode = $('#pincode').val();
31
32		io.socket.get('/api/v2/resethelp', {method: 'checkpin', data: JSON.stringify({twofactorhelper: twofactorhelper, pincode: pincode})}, function gotResponse(data, jwRes) {
33
34			if (data.status == false)
35			{
36							
37				$('#resetbtn').hide();
38
39				$('#notificationbanner').hide();
40				$('#notificationbanner').html("");
41				$('#actioncontainer').html(`<center><a 
42						style="
43							color: var(--always_black);
44							background-color: var(--main-brand-color);
45							padding: 10px 20px;
46							border-radius: 3px;"
47						href="/twofactorhelp">` + window.geti18n("Start Over") + `</a></center>`
48					);
49
50				$("body").addClass("swal-open");
51
52				swal(window.geti18n("Error"), window.geti18n(data.message), "error").then(() => $("body").removeClass("swal-open"));
53
54			}
55			else
56			{
57			
58				if (data.nextstep == 'kyc')
59				{
60				
61					dokyc();
62				
63				}
64				else if (data.nextstep == 'sms')
65				{
66				
67					dosms();
68				
69				}
70				else if (data.nextstep == 'questions')
71				{
72				
73					doquestions();
74				
75				}
76				else
77				{
78					$("body").addClass("swal-open");
79
80					swal(window.geti18n("Error"), window.geti18n("Unknown error has occurred"), "error").then(() => $("body").removeClass("swal-open"));
81				
82					$('#resetbtn').hide();
83
84					$('#notificationbanner').hide();
85    				$('#notificationbanner').html("");
86    				$('#actioncontainer').html(`<center><a 
87							style="
88								color: var(--always_black);
89								background-color: var(--main-brand-color);
90    						padding: 10px 20px;
91    						border-radius: 3px;"
92							href="/twofactorhelp">` + window.geti18n("Start Over") + `</a></center>`);
93				
94				}
95			
96			}
97	
98		});
99
100    });
101    
102    
103    function dokyc()
104    {
105			$("body").addClass("swal-open");
106
107    	swal(window.geti18n("Reset two factor with KYC"), window.geti18n("You have a verified account.  You can reset your two factor code by reverification."), "success").then(() => $("body").removeClass("swal-open"));
108
109    	$('#notificationbanner').hide();
110    	$('#notificationbanner').html("");
111    	$('#actioncontainer').html(`
112		  <div class="pl-2 pr-2 pt-1 pb-5" id="">
113			<center>
114				<svg width="286" height="282" viewBox="0 0 286 282" fill="none" xmlns="http://www.w3.org/2000/svg">
115				<g opacity="0.2" filter="url(#filter0_f_1075_8526)">
116				<circle cx="144.38" cy="141.207" r="106.207" fill="#000"></circle>
117				</g>
118				<circle cx="154.035" cy="88.7933" r="22.069" fill="var(--green)"></circle>
119				<path d="M145.4 88.9304L151.68 95.51L162.671 83.9957" stroke="white" stroke-width="2.75863" stroke-linecap="round" stroke-linejoin="round"></path>
120				<g filter="url(#filter1_f_1075_8526)">
121				<rect x="19" y="77.1156" width="115.862" height="154.483" rx="11.0345" transform="rotate(-8.59828 19 77.1156)" fill="#000" fill-opacity="0.5"></rect>
122				</g>
123				<g filter="url(#filter2_d_1075_8526)">
124				<rect x="19" y="72.1156" width="115.862" height="154.483" rx="11.0345" transform="rotate(-8.59828 19 72.1156)" fill="white"></rect>
125				<rect x="19.785" y="72.6944" width="114.483" height="153.104" rx="10.3449" transform="rotate(-8.59828 19.785 72.6944)" stroke="#000" stroke-opacity="0.3" stroke-width="1.37931"></rect>
126				<rect x="27.4465" y="79.0063" width="101.219" height="138.331" rx="4.13794" transform="rotate(-8.59828 27.4465 79.0063)" fill="url(#paint0_linear_1075_8526)"></rect>
127				<circle cx="87.828" cy="139.828" r="26.207" transform="rotate(-8.59828 87.828 139.828)" stroke="white" stroke-width="2.75863"></circle>
128				<path d="M104.093 118.233C99.9021 123.8 93.6124 127.793 86.1783 128.917C78.7443 130.041 71.5552 128.087 65.906 124.007" stroke="white" stroke-width="2.75863"></path>
129				<path d="M71.5635 161.423C75.7542 155.856 82.0439 151.863 89.4779 150.738C96.9119 149.614 104.101 151.569 109.75 155.649" stroke="white" stroke-width="2.75863"></path>
130				<path d="M61.9155 143.746L113.74 135.91" stroke="white" stroke-width="2.75863" stroke-linecap="round" stroke-linejoin="round"></path>
131				<path d="M101.466 137.766C102.577 145.113 101.932 151.945 100.058 157.035C98.1644 162.177 95.1615 165.224 91.746 165.74C88.3305 166.257 84.5611 164.234 81.2319 159.881C77.9371 155.573 75.3007 149.237 74.1898 141.89C73.0789 134.543 73.7241 127.711 75.598 122.621C77.4914 117.479 80.4944 114.432 83.9098 113.916C87.3253 113.399 91.0947 115.422 94.4239 119.775C97.7187 124.083 100.355 130.419 101.466 137.766Z" stroke="white" stroke-width="2.75863"></path>
132				<path d="M83.9099 113.916L91.7461 165.74" stroke="white" stroke-width="2.75863" stroke-linecap="round" stroke-linejoin="round"></path>
133				</g>
134				<g filter="url(#filter3_f_1075_8526)">
135				<rect x="137.42" y="109.586" width="131.035" height="92.4141" rx="11.0345" transform="rotate(8.54379 137.42 109.586)" fill="#000" fill-opacity="0.5"></rect>
136				</g>
137				<g filter="url(#filter4_d_1075_8526)">
138				<rect x="137.42" y="102.586" width="131.035" height="92.4141" rx="11.0345" transform="rotate(8.54379 137.42 102.586)" fill="white"></rect>
139				<rect x="137.999" y="103.371" width="129.656" height="91.0348" rx="10.3449" transform="rotate(8.54379 137.999 103.371)" stroke="#000" stroke-opacity="0.3" stroke-width="1.37931"></rect>
140				</g>
141				<path fill-rule="evenodd" clip-rule="evenodd" d="M166.599 154.393C173.755 155.468 180.428 150.538 181.504 143.382C182.579 136.225 177.649 129.552 170.492 128.477C163.336 127.402 156.663 132.332 155.587 139.488C154.512 146.645 159.442 153.318 166.599 154.393ZM144.395 170.617C147.614 162.311 156.504 157.061 165.984 158.485C175.464 159.909 182.419 167.539 183.055 176.425C183.219 178.705 181.061 180.277 178.801 179.938L147.429 175.225C145.169 174.885 143.569 172.748 144.395 170.617Z" fill="url(#paint1_linear_1075_8526)"></path>
142				<path d="M203.84 143.25L229.074 147.041" stroke="#000" stroke-width="2.75863" stroke-linecap="round" stroke-linejoin="round"></path>
143				<path d="M202.201 154.162L239.029 159.695" stroke="#000" stroke-width="2.75863" stroke-linecap="round" stroke-linejoin="round"></path>
144				<path d="M200.562 165.075L221.022 168.148" stroke="#000" stroke-width="2.75863" stroke-linecap="round" stroke-linejoin="round"></path>
145				<defs>
146				<filter id="filter0_f_1075_8526" x="3.68998" y="0.517128" width="281.38" height="281.38" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
147				<feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
148				<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend>
149				<feGaussianBlur stdDeviation="17.2414" result="effect1_foregroundBlur_1075_8526"></feGaussianBlur>
150				</filter>
151				<filter id="filter1_f_1075_8526" x="0.52417" y="41.3177" width="174.608" height="207.021" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
152				<feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
153				<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend>
154				<feGaussianBlur stdDeviation="10" result="effect1_foregroundBlur_1075_8526"></feGaussianBlur>
155				</filter>
156				<filter id="filter2_d_1075_8526" x="15.0069" y="56.3177" width="145.643" height="178.055" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
157				<feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
158				<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix>
159				<feOffset dy="5.51726"></feOffset>
160				<feGaussianBlur stdDeviation="2.75863"></feGaussianBlur>
161				<feComposite in2="hardAlpha" operator="out"></feComposite>
162				<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"></feColorMatrix>
163				<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1075_8526"></feBlend>
164				<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_1075_8526" result="shape"></feBlend>
165				</filter>
166				<filter id="filter3_f_1075_8526" x="105.206" y="91.1018" width="180.28" height="147.825" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
167				<feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
168				<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend>
169				<feGaussianBlur stdDeviation="10" result="effect1_foregroundBlur_1075_8526"></feGaussianBlur>
170				</filter>
171				<filter id="filter4_d_1075_8526" x="119.689" y="104.102" width="151.314" height="118.859" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
172				<feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
173				<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix>
174				<feOffset dy="5.51726"></feOffset>
175				<feGaussianBlur stdDeviation="2.75863"></feGaussianBlur>
176				<feComposite in2="hardAlpha" operator="out"></feComposite>
177				<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"></feColorMatrix>
178				<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1075_8526"></feBlend>
179				<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_1075_8526" result="shape"></feBlend>
180				</filter>
181				<linearGradient id="paint0_linear_1075_8526" x1="78.0563" y1="79.0063" x2="78.0563" y2="217.337" gradientUnits="userSpaceOnUse">
182				<stop stop-color="#000"></stop>
183				<stop offset="1" stop-color="#000" stop-opacity="0.2"></stop>
184				</linearGradient>
185				<linearGradient id="paint1_linear_1075_8526" x1="170.492" y1="128.477" x2="163.115" y2="177.581" gradientUnits="userSpaceOnUse">
186				<stop stop-color="#000"></stop>
187				<stop offset="1" stop-color="#000" stop-opacity="0.2"></stop>
188				</linearGradient>
189				</defs>
190				</svg>
191				<br />
192				` + window.geti18n("Your account is verified.  You can prove your identify by verifying again.  Please make sure to use the same identification card as your original verification.") + `<br />
193				<br /><br />` + window.geti18n("Filesize limit for each file is 5MB. Only images are accepted.") + `
194				<br /><br />
195			
196 
197				<form enctype="multipart/form-data" method="post" action="/api/v2/twofactorhelp-verification" id="verificationaltform">
198
199					` + window.geti18n("Select ID Type:") + `
200						<select id="idtype" name="idtype" class="form-control" style="width:200px; margin-bottom:20px;">
201							<option value='driverlicense'>` + window.geti18n("Driving License") + `
202							<option value='passport'>` + window.geti18n("Passport") + `
203							<option value='nationalid'>` + window.geti18n("National ID") + `
204							<option value='voterid'>` + window.geti18n("Voter ID") + `
205						</select>
206			
207					<input type="hidden" name="_csrf" value="` + window.tokenId + `" />
208
209					<input type="hidden" name="twofactorhelper" value="` + twofactorhelper + `" />
210
211					<div class="row" style="margin-bottom:20px; min-height:200px;">
212				
213						<div class="col" id="idfront" style="height:200px;">
214							<div id="fileUploadImage" style="margin:auto; width:250px; height: 160px; background-position: 50%; background-repeat: no-repeat; background-size: 100%; background-image: url('/images/kyc_idfront.png');">
215						
216							<div style="width: 100%; height: 100%; cursor: pointer;">
217							<span style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; position: relative;">
218								<div style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
219									<span tabindex="0" class="ant-upload" role="button">
220										<input name="idupload" id="fileUpload" type="file" accept=".jpg,.png,.jpeg,.svg,.gif,.webp;" capture="camera" style="display: none;">
221										<div style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
222									
223											<label for="fileUpload" class="btn btn-sm btn-primary" style="cursor:pointer; padding:10px; border-radius:50%; text-align:center;"><i class="fa fa-upload mr-1 ml-1"></i></label>
224										
225										</div>
226									</span>
227								</div>
228							</span>
229							</div>
230					
231							<p>` + window.geti18n("Front of the Photo ID.") + `</p></div>
232						
233						</div>
234				
235						<div class="col" id="idback" style="height:200px;">
236							<div id="fileUpload3Image" style="margin:auto; width:250px; height: 160px; background-position: 50%; background-repeat: no-repeat; background-size: 100%; background-image: url('/images/kyc_idback.png');">
237						
238							<div style="width: 100%; height: 100%; cursor: pointer;">
239							<span style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; position: relative;">
240								<div style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
241									<span tabindex="0" class="ant-upload" role="button">
242										<input name="idbackupload" id="fileUpload3" type="file" accept=".jpg,.png,.jpeg,.svg,.gif,.webp;" capture="camera" style="display: none;">
243										<div style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
244
245											<label for="fileUpload3" class="btn btn-sm btn-primary" style="cursor:pointer; padding:10px; border-radius:50%; text-align:center;"><i class="fa fa-upload mr-1 ml-1"></i></label>
246
247										</div>
248									</span>
249								</div>
250							</span>
251							</div>
252						
253							<p>` + window.geti18n("Back of the ID") + `</p></div>
254						
255						</div>
256
257						<div class="col" id="selfiepic" style="height:200px;">
258							<div id="fileUpload2Image" style="margin:auto; width:250px; height: 160px; background-position: 50%; background-repeat: no-repeat; background-size: 100%; background-image: url('/images/kyc_selfie.png');">
259						
260							<div style="width: 100%; height: 100%; cursor: pointer;">
261							<span style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; position: relative;">
262								<div style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
263									<span tabindex="0" class="ant-upload" role="button">
264										<input name="selfieupload" id="fileUpload2" type="file" accept=".jpg,.png,.jpeg,.svg,.gif,.webp;" capture="camera" style="display: none;">
265										<div style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
266
267											<label for="fileUpload2" class="btn btn-sm btn-primary" style="cursor:pointer; padding:10px; border-radius:50%; text-align:center;"><i class="fa fa-upload mr-1 ml-1"></i></label>
268
269										</div>
270									</span>
271								</div>
272							</span>
273							</div>
274						
275							<p>` + window.geti18n("Selfie Photo (No ID)") + `</p></div>
276						
277						</div>
278				
279					</div>
280				
281				
282					<br /><br />
283				
284					<button class='btn btn-primary' id='startverify'>` + window.geti18n("Submit Documents") + `</button>
285					
286					
287
288				</form>
289
290
291
292
293
294
295			</center>
296		  </div>`);
297    
298
299
300		var hideidback = false;
301		
302		$('#idtype').on('change', function(e) {
303		
304			let selectedValue = $(this).find('option:selected').val();
305
306			if (selectedValue == "passport")
307			{
308				// hide id back input
309				
310				$("#idback").hide();
311				hideidback = true;
312				
313			}
314			else
315			{
316
317				$("#idback").show();
318				hideidback = false;
319
320			}
321
322		});
323
324		$('#fileUpload').on('change', function(e) {
325
326			e.preventDefault();
327
328
329			if (e.target.files && e.target.files[0]) {
330				var reader = new FileReader();
331
332				reader.onload = function (e) {
333
334					$('#fileUploadImage').css('background-image', 'url(' + e.target.result + ')');
335				};
336
337				reader.readAsDataURL(e.target.files[0]);
338			}
339
340
341		});
342
343		$('#fileUpload2').on('change', function(e) {
344
345			e.preventDefault();
346
347
348			if (e.target.files && e.target.files[0]) {
349				var reader = new FileReader();
350
351				reader.onload = function (e) {
352					$('#fileUpload2Image').css('background-image', 'url(' + e.target.result + ')');
353				};
354
355				reader.readAsDataURL(e.target.files[0]);
356			}
357
358
359		});
360
361		$('#fileUpload3').on('change', function(e) {
362
363			e.preventDefault();
364
365
366			if (e.target.files && e.target.files[0]) {
367				var reader = new FileReader();
368
369				reader.onload = function (e) {
370					$('#fileUpload3Image').css('background-image', 'url(' + e.target.result + ')');
371				};
372
373				reader.readAsDataURL(e.target.files[0]);
374			}
375
376		});
377
378	
379	
380
381		$('#startverify').off('click');
382		$('#startverify').on('click', function(e) {
383
384			e.preventDefault();
385	
386			let hasError = false;
387
388			$('#idfront').css({border: "0px"});
389			$('#idback').css({border: "0px"});
390			$('#selfiepic').css({border: "0px"});
391
392			if( document.getElementById("fileUpload").files.length == 0 ){
393		
394				$('#idfront').css({border: "1px solid var(--red)"});
395		
396				hasError = true;
397		
398			}
399	
400			if( document.getElementById("fileUpload2").files.length == 0 ){
401		
402				$('#selfiepic').css({border: "1px solid var(--red)"});
403
404				hasError = true;
405		
406			}
407
408			if(hideidback == false && document.getElementById("fileUpload3").files.length == 0 ){
409		
410				$('#idback').css({border: "1px solid var(--red)"});
411
412				hasError = true;
413		
414			}
415	
416			if (hasError == false)
417			{
418	
419				$(this).prop('disabled', true);
420				$(this).html('<i class="fa fa-circle-o-notch fa-spin" aria-hidden="true"></i> ' + window.geti18n('Sending Documents'));
421				$(this).parents('form').submit();
422	
423			}
424
425		});
426
427
428
429
430
431
432
433    
434    }
435
436    function dosms()
437    {
438			$("body").addClass("swal-open");
439
440    	swal(window.geti18n("Reset two factor with SMS"), window.geti18n("A pin code has been sent to your mobile phone."), "success").then(() => $("body").removeClass("swal-open"));
441    
442    	$('#notificationbanner').show();
443    	$('#notificationbanner').html(window.geti18n("A PIN code has been sent to your mobile device via SMS"));
444    	$('#actioncontainer').html(`
445			<div class="login-card-container">
446				<div class="login-card">
447					<div class="login-card-header">
448					  <h3>` + window.geti18n("PIN Code") + `</h3>
449						<div>` + window.geti18n("Enter the SMS PIN code from phone") + `</div>
450					</div>
451
452					<form class="login-card-form">
453			
454						<div>
455              <label for="pincode" class="form-label">` +  window.geti18n("PIN Code") + `</label>
456							<input
457								class="form-control xformfield hoverborder"
458							 	type="text" 
459							 	id='pincode2' 
460							 	placeholder="` + window.geti18n("PIN Code") + `" focus-first required />
461						</div>
462
463						<button 
464								style="width: 100%; background-color: var(--main-brand-color); color: rgb(0, 0, 0);" 
465								id='resetbtn2' 
466								class="btn ajax-button btn">` + window.geti18n("Continue Reset") + `</button>
467
468								</form>
469
470				</div>
471  
472			</div>`);
473
474		$('#resetbtn2').off('click');
475		$('#resetbtn2').on('click', function(e) {
476		
477			e.preventDefault();
478
479			var pincode = $('#pincode2').val();
480
481			io.socket.get('/api/v2/resethelp', {method: 'checksmspin', data: JSON.stringify({twofactorhelper: twofactorhelper, pincode: pincode})}, function gotResponse(data, jwRes) {
482	
483				if (data.status == false)
484				{
485			
486					$('#resetbtn2').hide();
487
488					$('#notificationbanner').hide();
489					$('#notificationbanner').html("");
490					$('#actioncontainer').html(`<center><a 
491						style="
492							color: var(--always_black);
493							background-color: var(--main-brand-color);
494							padding: 10px 20px;
495							border-radius: 3px;"
496						href="/twofactorhelp">` + window.geti18n("Start Over") + `</a></center>`
497					);
498					
499					$("body").addClass("swal-open");
500
501					swal(window.geti18n("Error"), window.geti18n(data.message), "error").then(() => $("body").removeClass("swal-open"));
502
503				}
504				else
505				{
506			
507					location.href = '/twofactorhelp3';
508			
509				}
510			
511			});
512		
513		});
514    
515    }
516
517	function timestampToReadableTime(timestamp) {
518		const date = new Date(timestamp);
519		return date.toLocaleString();
520	}
521
522    function doquestions()
523    {
524    	$('#notificationbanner').hide();
525    	$('#notificationbanner').html("");
526    	$('#actioncontainer').html("");
527
528		io.socket.get('/api/v2/resethelp', {method: 'getquestions', data: JSON.stringify({twofactorhelper: twofactorhelper})}, function gotResponse(data, jwRes) {
529		
530			const questions = data.data;
531			
532			let questionHtml = `<table style="color: var(--white_color);" class='table'><tr style="background: #09090E; border-style: hidden;"><th></th><th>` + window.geti18n("Ticker") + `</th><th>` + window.geti18n("Amount") + `</th><th>` + window.geti18n("Transaction ID") + `</th><th>` + window.geti18n("Time") + `</th></tr>`;
533			for (let i = 0; i < questions.length; i++)
534			{
535			
536				let thisQuestion = questions[i];
537			
538				questionHtml += `
539				<tr style="border: 1px solid #2A2A32;">
540					<td style="text-align:center;"><input id="orange" style="cursor: pointer; width: 20px; height: 20px;" type="radio" name="answer" value="` + thisQuestion.id + `"></td>
541					<td>` + thisQuestion.ticker + `</td>
542					<td>` + thisQuestion.amount + `</td>
543					<td>` + thisQuestion.txid + `</td>
544					<td>` + timestampToReadableTime(thisQuestion.time) + `</td>
545				</tr>`;
546			
547			}
548
549			questionHtml += `
550			<tr style="border: 1px solid #2A2A32;">
551				<td style="text-align:center;"><input id="orange" style="cursor: pointer; width: 20px; height: 20px;" type="radio" name="answer" value="none"></td>
552				<td colspan=4>` + window.geti18n("None of these") + `</td>
553			</tr>`;
554				
555			questionHtml += `</table>`;
556		
557			$('#notificationbanner').hide();
558			$('#notificationbanner').html("");
559			$('#actioncontainer').html(`
560				<div>
561					<strong>` + window.geti18n("Which of the following transactions was a recent deposit to your account?") + `</strong><br /><br />
562  					` + questionHtml + `
563					<button 
564						id='resetbtn3' 
565						style="background-color: var(--main-brand-color); color: rgb(0, 0, 0);" 
566						class="btn ajax-button btn">` + window.geti18n("Choose Item") + `</button>
567				</div>`);
568				
569			$('#resetbtn3').prop('disabled', true);
570			
571			$("input[name='answer']").off('click');
572			$("input[name='answer']").on('click', function() {
573				$('#resetbtn3').prop('disabled', false);
574			});
575
576			$('#resetbtn3').off('click');
577			$('#resetbtn3').on('click', function(e) {
578			
579				e.preventDefault();
580
581				$('#resetbtn3').html(`<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>`);
582
583				var answer = $("input[name='answer']:checked").val();
584
585				io.socket.get('/api/v2/resethelp', {method: 'checkquestions', data: JSON.stringify({twofactorhelper: twofactorhelper, answer: answer})}, function gotResponse(data, jwRes) {
586
587					location.href = '/twofactorhelp3';
588
589				});
590		
591			});
592
593		});
594    
595    }
596    
597    
598  },
599
600  //  ╦╔╗╔╔╦╗╔═╗╦═╗╔═╗╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
601  //  ║║║║ ║ ║╣ ╠╦╝╠═╣║   ║ ║║ ║║║║╚═╗
602  //  ╩╝╚╝ ╩ ╚═╝╩╚═╩ ╩╚═╝ ╩ ╩╚═╝╝╚╝╚═╝
603  methods: {
604    //…
605    
606
607    
608  }
609});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.