PageSourceSearch

https://chipinfo.pro/infos/physics

html chipinfo.pro collected 2026-10-04 22:35:55 UTC 27,595 bytes, 605 lines download raw bytes

1<!DOCTYPE html>
2<html lang='ru' xml:lang='ru' xmlns='http://www.w3.org/1999/xhtml'>
3<head>
4  <title>Справочник физических параметров и величин</title>
5  <base href="https://chipinfo.pro/" />
6  <meta name="viewport" content="width=device-width, initial-scale=0.6" />
7  <meta https-equiv="content-type" content="text/html; charset=utf-8" />
8  <meta name="description" content="Материалы раздела Справочник физических параметров и величин" />
9  <meta name="keywords" content="электроника, электротехника, компоненты, электронные, база, резисторы, конденсаторы, транзисторы, микросхемы, тиристоры, диоды, стабилитроны, аналоги, стабилизаторы, микроконтроллеры" />
10  <meta property="og:title" content="ChipInfo" />
11  <meta property="og:site_name" content="ChipInfo" />
12  <meta property="og:description" content="The coolest electronics guide ChipInfo.pro" />
13  <meta property="og:url" content="https://chipinfo.pro/">
14  <meta property="og:type" content="website" />
15  <meta name="yandex-tableau-widget" content="logo=https://chipinfo.pro/style/favicon.png, color=#f5f5f5" />
16  <meta name="theme-color" content="#cccc">
17  <meta name="csrf-token" content="PNCjRlMNCN3ockyKn8DeLRLsXqMWKR1VtFL6stAr">
18	<link rel="stylesheet" href="https://chipinfo.pro/style/style.css" />
19  <link rel="stylesheet" href="https://chipinfo.pro/style/components.css" />
20		<link rel="shortcut icon" href="https://chipinfo.pro/style/favicon.ico" type="image/vnd.microsoft.icon" />
21	<link rel="icon" href="https://chipinfo.pro/style/favicon.ico" type="image/vnd.microsoft.icon" />
22  <link rel="icon" href="https://chipinfo.pro/style/favicon.svg" type="image/svg+xml">
23	<link rel="manifest" href="https://chipinfo.pro/manifest.json" />
24	<link rel="dns-prefetch" href="https://mc.yandex.ru">
25	<link rel="dns-prefetch" href="https://an.yandex.ru">
26	<link rel="dns-prefetch" href="https://site.yandex.net">
27  <link rel="dns-prefetch" href="https://vk.com">
28  
28<script type="text/javascript" src="https://vk.com/js/api/openapi.js?122"></script>
28
29  
29<script type="text/javascript" src="https://chipinfo.pro/core/vanicom.min.js"></script>
29
30  
30<script type="text/javascript" src="https://chipinfo.pro/core/core.js"></script>
30
31	
31<script type="text/javascript" src="https://chipinfo.pro/core/debounce.js"></script>
31
32	
32<script type="text/javascript" src="https://mc.yandex.ru/metrika/watch.js" async></script>
32<!-- Метрика -->
33  
33<script type="text/javascript" src="https://an.yandex.ru/system/context.js" async></script>
33<!-- Реклама -->
34
35  
35<script type="text/javascript">
36	var csrf_token = 'PNCjRlMNCN3ockyKn8DeLRLsXqMWKR1VtFL6stAr';
37	var appRoutes = {
38		base: 'https://chipinfo.pro/',
39		tags: {
40			materials: 'https://chipinfo.pro/api/tags/materials'
41		},
42		auth: {
43			login: 'https://chipinfo.pro/login',
44			register: 'https://chipinfo.pro/register',
45			passwordEmail: 'https://chipinfo.pro/password/email',
46			passwordReset: 'https://chipinfo.pro/password/reset'
47		},
48					};
49
50	var ads_row_id = null;
51	var ya_block_id = null;
52	var warningBlockStyles = { display: 'block', position: 'fixed', width: '100%', left: '0px', bottom: '0px', zIndex: '1000', background: '#0d5c88', color: '#fff' };
53	var warningInnerStyles = { width: '100%', padding: '10px 0', margin: '0 auto', textAlign: 'center', fontSize: '70%' };
54	var adsBlockCommonStyles = { color: '#9A9A9A', margin: '0px auto', overflow: 'hidden' };
55	var adsRowCommonStyles = { margin: '0px auto', display: 'flex', flexDirection: 'column', alignContent: 'center' };
56
57  var getMainBlock = () => document.getElementsByClassName('main-content-container')[0];
58
59	function loadAds(idForRender) {
60		window["yandexContextAsyncCallbacks"] = window["yandexContextAsyncCallbacks"] || [];
61		window["yandexContextAsyncCallbacks"].push(function() {
62			if ( window.innerWidth < 1000 ) {
63				Ya.Context.AdvManager.render({ blockId: "R-A-257534-2", renderTo: idForRender, async: true });
64			} else if ( window.innerWidth < 1700 ) {
65				Ya.Context.AdvManager.render({ blockId: "R-A-257534-1", renderTo: idForRender, async: true });
66			} else {
67				Ya.Context.AdvManager.render({ blockId: "R-A-257534-3", renderTo: idForRender, async: true });
68			}
69		});
70	};
71
72	function appendStyles(node, stylesObj){
73		var rulesToAppend =	Object.keys(stylesObj);
74		forEach(rulesToAppend, (rule) => {
75			node.style[rule] = stylesObj[rule];
76		});
77		return node;
78	};
79
80	function createAdsBlock(){
81		if (ads_row_id) {
82			var adsNodeToDelete = document.getElementById(ads_row_id);
83      getMainBlock().removeChild(adsNodeToDelete);
84		}
85		var ya_block = document.createElement("div");
86		var ads_block = appendStyles(document.createElement("div"), adsBlockCommonStyles);
87		var ads_row = appendStyles(document.createElement("div"), adsRowCommonStyles);
88
89		ya_block.id = getRandomString(10);
90		ads_row.id = getRandomString(10);
91		ads_row_id = ads_row.id;
92		ya_block_id = ya_block.id;
93
94    if ( main_width() <= 860 ){
95			ads_row = appendStyles(
96				ads_row, { minWidth: '300px', maxWidth: '660px', margin: '0 20px', marginBottom: '50px', fontSize: '60%', wordBreak: 'break-all' }
97			);
98    } else if ( main_width() <= 1400 ){
99			ads_row = appendStyles(ads_row, { minWidth: '800px', maxWidth: '1000px', padding: '20px' });
100		} else if ( main_width() <= 1760 ){
101			ads_row = appendStyles(ads_row, { minWidth: '900px', maxWidth: '1100px', padding: '20px' });
102		} else {
103			ads_row = appendStyles(
104				ads_row, { maxWidth: '240px', height: '75vh', position: 'fixed', left: (((main_width() - 1200)/2) - 254)/2 + 'px', bottom: '50px', justifyContent: 'end' }
105			);
106		}
107
108		ads_block.appendChild(ya_block);
109		ads_row.appendChild(ads_block);
110		getMainBlock().appendChild(ads_row);
111		loadAds(ya_block_id);
112	};
113
114	function createWarnBlock(innerText){
115		var warning = appendStyles(document.createElement("div"), warningBlockStyles);
116		var warning_inner = appendStyles(document.createElement("div"), warningInnerStyles);
117		warning_inner.innerHTML = innerText;
118		warning.appendChild(warning_inner);
119		return warning;
120	};
121
122	function initCopyButtons() {
123		var copyButtons = document.getElementsByClassName('copy-btn');
124		if (copyButtons.length>0){
125			console.log("CopyButtons found. Set their events.");
126			for (var i = 0; i < copyButtons.length; i++) {
127				copyButtons[i].addEventListener('click', function(eve) {
128					var eventTarget = getEventTarget(eve);
129					// Установка атрибута через JS copyBtn.dataset.target = 'ID-ЦЕЛИ'
130					// Установка атрибута через HTML <span data-target="ID-ЦЕЛИ">
131					var copyTarget = document.getElementById(eventTarget.getAttribute('data-target'));
132					// createRange - func from Document Object Model Range, support most browsers beginning with IE9
133					var range = document.createRange(copyTarget);
134					// Select
135					range.selectNode(copyTarget);
136					window.getSelection().addRange(range);
137					try { // Try copy
138						var msg = 'unsuccessful';
139						if (document.queryCommandSupported('copy')) {
140							// document.queryCommandSupported('copy') - эту проверку можно пропустить, т.к. это одна из самых поддерживаемых команд
141							var successful = document.execCommand('copy');
142							var msg = successful ? 'success' : msg;
143						}
144						console.log('Copy target was ' + msg);
145					} catch(err) { console.error('Oops, unable to copy');	}
146					// Deselect
147					window.getSelection().removeAllRanges();
148				});
149			}
150		}
151	}
152
153	document.addEventListener('DOMContentLoaded', function(){
154			if (getCookie('siteTheme') === 'dark' || getLocalItem('theme') === 'dark') {
155  			var themeSelector = document.getElementById('theme-selector');
156  			if (themeSelector) { // Есть страницы на которых нет подвала, например 404-я
157  				themeSelector.getElementsByClassName('custom-radio')[0].classList.toggle('checked');
158  			}
159				setTheme('dark');
160			} else {
161				setTheme('light');
162			}
163
164	    window.onscroll = function(){
165	        var o = window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;
166	        if ( o === null || o < 450 ) { document.getElementById("arrow-to-top").style.visibility = "hidden"; }
167	        else {	document.getElementById("arrow-to-top").style.visibility="visible"; }
168	    };
169
170	    	});
171
172  // Активируется после полной загрузки страницы, включая все зависимости, такие как изображения и стили
173	window.onload = function(){
174		initCopyButtons();
175
176    var tabsBlocks = document.getElementsByClassName('tabs-container');
177    if (tabsBlocks.length>0){
178        console.log("Tabs conteiners found. Initiate.");
179        for (var i = 0; i < tabsBlocks.length; i++) {
180            var tabLinks = tabsBlocks[i].getElementsByClassName('tab-label');
181            for (var ii = 0; ii < tabLinks.length; ii++) {
182                tabLinks[ii].addEventListener('click', function() {
183                    tabsHandler(this, tabsBlocks[i]);
184                });
185            }
186        }
187    }
188
189		var foldingLists = document.getElementsByClassName('folding-list-control');
190		if (foldingLists.length>0){
191			console.log("Folding lists found. Initiate.");
192			for (var i = 0; i < foldingLists.length; i++) {
193				foldingLists[i].addEventListener('click', function() {
194					interfaceHandlers.foldingListHandler(this, foldingLists[i]);
195				});
196			}
197		}
198
199		var spoilersBlocks = document.getElementsByClassName('spoiler');
200		if (spoilersBlocks.length>0){
201			console.log("Folding lists found. Initiate.");
202			for (var i = 0; i < spoilersBlocks.length; i++) {
203				spoilersBlocks[i].addEventListener('click', function() {
204					interfaceHandlers.spoilersHandler(this, spoilersBlocks[i]);
205				});
206			}
207		}
208
209		var multiselectBlocks = document.querySelectorAll(".multiselect_block");
210		multiselectBlocks.forEach(parent => {
211			 let label = parent.querySelector(".multiselect_box_label");
212			 let select = parent.querySelector(".multiselect_field");
213			 let text = label.innerHTML;
214			 select.addEventListener("change", function(element) {
215					 let selectedOptions = this.selectedOptions;
216					 label.innerHTML = "";
217					 for (let option of selectedOptions) {
218							 let button = document.createElement("button");
219							 button.type = "button";
220							 button.className = "btn_multiselect";
221							 button.textContent = option.value;
222							 button.onclick = () => {
223									 option.selected = false;
224									 button.remove();
225									 if (!select.selectedOptions.length) label.innerHTML = text
226							 };
227							 label.append(button);
228					 }
229			 })
230		})
231
232	  var currentURL = document.location.href;
233		if (currentURL && (typeof(window) !== 'undefined') && currentURL.includes('#')) {
234			currentURL = currentURL.split('#')[0];
235			window.history.replaceState({}, document.title, currentURL);
236		}
237		
238		createAdsBlock();
239
240		window.addEventListener('resize', debounce(createAdsBlock, 800, { 'debounceMaxWait': 1500 }));
241	};
242</script>
242
243</head>
244<body>    <div id="main-menu-background">
245<div id="main-menu-block" class="no-select">
246<div id="menu-items-container">
247    <li class="menu-item icon"><a href="/" id="main-menu-homelink"><div class="main-menu-linkpics">&nbsp; </div></a></li>
248    <li class="menu-item icon"><a href="/progs" id="main-menu-calclink"><div class="main-menu-linkpics">&nbsp; </div></a></li>
249	<li class="menu-item icon">
250	        <a onclick="modalHandler('auth-modal');" id="main-menu-userlink"><div class="main-menu-linkpics">&nbsp; </div></a>
251		</li>
252    <li class="menu-item"><a href="articles">Articles</a></li>
253    <li class="menu-item" onclick="menuHandler(event);"><a>Reference materials</a>
254        <ul class="main-lowmenu">
255  			  			<li><a href="infos/materials">Параметры материалов</a></li>
256  			  			<li><a href="infos/physics">Справочник физических параметров и величин</a></li>
257  			  			<li><a href="infos/protocols">Описания протоколов</a></li>
258  			  			<li><a href="infos/standards">Стандарты</a></li>
259  			  			<li><a href="infos/treatment">Химическая обработка поверхностей</a></li>
260  			  			<li><a href="infos/antennas">Антенны и радиопередающие устройства</a></li>
261  			  			<li><a href="infos/electronics_design">Конструирование радиоэлектроники</a></li>
262  			  			<li><a href="books">Books</a></li>
263        </ul>
264    </li>
265	<li class="menu-item"><a href="schematic">Schematic</a></li>
266	<li class="menu-item" onclick="menuHandler(event);"><a>Radiocomponents</a>
267		<ul class="main-lowmenu">
268						<li><a href="elements/acoustic">Акустические компоненты
269</a></li>
270						<li><a href="elements/capacitor">Конденсаторы</a></li>
271						<li><a href="elements/vacuum_tube">Радиолампы</a></li>
272						<li><a href="elements/chip">Микросхемы</a></li>
273						<li><a href="elements/resonator">Резонаторы</a></li>
274						<li><a href="elements/battery">Аккумуляторы</a></li>
275						<li><a href="elements/mcu">Микроконтроллеры</a></li>
276						<li><a href="elements/transistor">Транзисторы</a></li>
277						<li><a href="elements/diode">Диоды</a></li>
278						<li><a href="elements/rezistor">Резисторы</a></li>
279					</ul>
280	</li>
281</div>
282
283<div id="search-container">
284    <div
285      class="ya-site-form ya-site-form_inited_no"
286      data-bem="{&quot;action&quot;:&quot;https://chipinfo.pro/find&quot;,&quot;arrow&quot;:false,&quot;bg&quot;:&quot;transparent&quot;,&quot;fontsize&quot;:14,&quot;fg&quot;:&quot;#000000&quot;,&quot;language&quot;:&quot;ru&quot;,&quot;logo&quot;:&quot;rb&quot;,&quot;publicname&quot;:&quot;Поиск по ChipInfo.pro&quot;,&quot;suggest&quot;:false,&quot;target&quot;:&quot;_self&quot;,&quot;tld&quot;:&quot;ru&quot;,&quot;type&quot;:3,&quot;usebigdictionary&quot;:false,&quot;searchid&quot;:2018356,&quot;input_fg&quot;:&quot;#000000&quot;,&quot;input_bg&quot;:&quot;#dfdfdf&quot;,&quot;input_placeholder&quot;:&quot;поиск по сайту...&quot;,&quot;input_placeholderColor&quot;:&quot;#999999&quot;,&quot;input_borderColor&quot;:&quot;#666666&quot;}">
287        <form action="https://yandex.ru/search/site/" method="get" target="_self" accept-charset="utf-8">
288          <input type="hidden" name="searchid" value="2018356"/>
289          <input type="hidden" name="l10n" value="ru"/>
290          <input type="hidden" name="reqenc" value="utf-8"/>
291          <input type="search" name="text" value=""/>
292          <input type="submit" value="Найти"/>
293        </form>
294    </div>
295    
295<script type="text/javascript">(function(w,d,c){var s=d.createElement('script'),h=d.getElementsByTagName('script')[0],e=d.documentElement;if((' '+e.className+' ').indexOf(' ya-page_js_yes ')===-1){e.className+=' ya-page_js_yes';}s.type='text/javascript';s.async=true;s.charset='utf-8';s.src=(d.location.protocol==='https:'?'https:':'http:')+'//site.yandex.net/v2.0/js/all.js';h.parentNode.insertBefore(s,h);(w[c]||(w[c]=[])).push(function(){Ya.Site.Form.init()})})(window,document,'yandex_site_callbacks');</script>
295
296</div>
297
298
299<div id="main-menu-mobile-icon" onclick="document.getElementById('menu-items-container').classList.toggle('mobile-show');"><span >&equiv;</span></div>
300</div>
301
302</div>
303
304    <div class="main-content-container">
305  <div id="content-center-column">
306    <div class="post">
307      <h3>Справочник физических параметров и величин</h3>
308      <hr size="1px"/>
309      		    <a href="infos/physics/light_wavelength">Цвета и длины волн в оптике</a><br/>
310      		    <a href="infos/physics/aerodynamic_resistance_at_high_altitudes">Аэродинамическое сопротивление атмосферы на больших высотах</a><br/>
311      		    <a href="infos/physics/materials_transparency">Прозрачность различных материалов</a><br/>
312      		    <a href="infos/physics/atmospheric_density">Плотность атмосферы на разных высотах</a><br/>
313      		    <a href="infos/physics/pressure_vs_altitude">Давление на разных высотах в атмосфере</a><br/>
314      		    <a href="infos/physics/_dry_air_physical_params">Физические параметры сухого воздуха</a><br/>
315          </div>
316    <br/><br/>
317  </div>
318</div>
319
320        <div id="auth-modal" class="modal-container">
321  <div class="modal-body">
322    <div class="tabs-container">
323      <div class="tab-header">
324        <div class="tab-label active"><a name="login-tab">Вход</a></div>
325              </div>
326      <div class="tab active login-tab">
327        <div id="loginForm">
328          <div class="common-loginForm-errors error-div"></div>
329          <input type="hidden" name="_token" value="PNCjRlMNCN3ockyKn8DeLRLsXqMWKR1VtFL6stAr">          <div class="controls-row">
330            <label for="username">Имя пользователя <span class="hint">(username)</span></label>
331            <div class="half-column">
332              <input type="text" class="form-control " name="username" value="" required autocomplete="username" autofocus>
333              <div class="username-loginForm-errors error-div"></div>
334            </div>
335          </div>
336          <div class="controls-row">
337            <label for="password">Password</label>
338            <div class="half-column">
339              <input type="password" class="form-control " name="password" required autocomplete="current-password">
340              <div class="password-loginForm-errors error-div"></div>
341            </div>
342          </div>
343          <div class="controls-row">
344            <div class="half-column">
345              <div class="form-check">
346                <input class="form-check-input" type="checkbox" name="remember">
347                <label class="form-check-label" for="remember">Запомнить сессию</label>
348              </div>
349            </div>
350          </div>
351          <div class="controls-row">
352            <button onclick="formValidation('loginForm')" class="btn btn-primary">Войти</button>
353            <a class="btn btn-link" href="https://chipinfo.pro/password/reset">Забыли пароль?</a>
354          </div>
355        </div>
356      </div>
357      
358      
359      <div class="shared-captcha-block" id="shared-captcha-block">
360        <h3>Проверка</h3>
361        <div class="controls-row captcha-row">
362          <div class="half-column">
363            <div class="captcha-block">
364              <img src="" alt="captcha" class="captcha-image" id="shared-captcha-img" data-loading="true">
365              <button type="button" class="captcha-refresh" id="shared-captcha-refresh" title="Обновить">&#8635;</button>
366            </div>
367          </div>
368          <div class="half-column" style="flex-direction: column;">
369            <div class="captcha-status" id="shared-captcha-status"></div>
370            <input type="text" class="form-control captcha-input" id="shared-captcha-input" name="captcha" required autocomplete="off" maxlength="6" placeholder="XXXXXX" style="text-transform: uppercase;">
371            <div class="captcha-errors error-div" id="shared-captcha-errors"></div>
372          </div>
373        </div>
374      </div>
375    </div>
376  </div>
377</div>
378<script>
379(function() {
380  var captchaToken = '411a2b6e15586d54952c3587d68efcf3';
381  var captchaUrl = 'https://chipinfo.pro/captcha';
382  var refreshCooldown = null;
383
384  function setCaptchaStatus(text, isError) {
385    var status = document.getElementById('shared-captcha-status');
386    if (status) {
387      status.innerText = text || '';
388      status.className = 'captcha-status' + (isError ? ' error' : '');
389    }
390  }
391
392  function setRefreshDisabled(disabled, countdown) {
393    var btn = document.getElementById('shared-captcha-refresh');
394    if (btn) {
395      btn.disabled = disabled;
396      if (countdown && countdown > 0) {
397        btn.innerText = countdown;
398      } else {
399        btn.innerHTML = '&#8635;';
400      }
401    }
402  }
403
404  function startCooldown(seconds) {
405    if (refreshCooldown) {
406      clearInterval(refreshCooldown);
407    }
408
409    var remaining = seconds;
410    setRefreshDisabled(true, remaining);
411    setCaptchaStatus('Обновление через ' + remaining + ' сек.', false);
412
413    refreshCooldown = setInterval(function() {
414      remaining--;
415      if (remaining <= 0) {
416        clearInterval(refreshCooldown);
417        refreshCooldown = null;
418        setRefreshDisabled(false, 0);
419        setCaptchaStatus('', false);
420      } else {
421        setRefreshDisabled(true, remaining);
422        setCaptchaStatus('Обновление через ' + remaining + ' сек.', false);
423      }
424    }, 1000);
425  }
426
427  // force - принудительное обновление (сбрасывает cooldown)
428  window.refreshSharedCaptcha = function(force) {
429    var img = document.getElementById('shared-captcha-img');
430    if (!img) return;
431
432    // При принудительном обновлении сбрасываем cooldown
433    if (force && refreshCooldown) {
434      clearInterval(refreshCooldown);
435      refreshCooldown = null;
436      setRefreshDisabled(false, 0);
437    }
438
439    if (refreshCooldown) return;
440
441    setCaptchaStatus('Загрузка...', false);
442
443    var xhr = new XMLHttpRequest();
444    xhr.open('GET', captchaUrl + '?token=' + encodeURIComponent(captchaToken) + '&_=' + Date.now(), true);
445    xhr.responseType = 'blob';
446    xhr.withCredentials = true;
447
448    xhr.onload = function() {
449      if (xhr.status === 200) {
450        var blob = xhr.response;
451        img.src = URL.createObjectURL(blob);
452        img.removeAttribute('data-loading');
453        setCaptchaStatus('', false);
454        // После успешной загрузки запускаем cooldown
455        startCooldown(15);
456      } else if (xhr.status === 429) {
457        // Rate limit
458        try {
459          var reader = new FileReader();
460          reader.onload = function() {
461            var json = JSON.parse(reader.result);
462            startCooldown(json.wait || 30);
463          };
464          reader.readAsText(xhr.response);
465        } catch (e) {
466          startCooldown(15);
467        }
468      } else if (xhr.status === 403) {
469        setCaptchaStatus('Ошибка токена. Перезагрузите страницу.', true);
470      } else {
471        setCaptchaStatus('Ошибка загрузки', true);
472      }
473    };
474
475    xhr.onerror = function() {
476      setCaptchaStatus('Ошибка сети', true);
477    };
478
479    xhr.send();
480  };
481
482  // Обработчик обновления капчи
483  document.getElementById('shared-captcha-refresh').addEventListener('click', function() {
484    refreshSharedCaptcha(false);
485  });
486
487  // Загружаем капчу сразу
488  setTimeout(function() {
489    refreshSharedCaptcha(false);
490  }, 100);
491})();
492
493var formValidation = function(form_type) {
494  var form_block = document.getElementById(form_type);
495  var inputs_to_validate = form_block.getElementsByTagName('input');
496  var data_to_send = {};
497
498  for (var i = 0; i < inputs_to_validate.length; i++) {
499    if (inputs_to_validate[i].type === 'checkbox') {
500      data_to_send[inputs_to_validate[i].name] = inputs_to_validate[i].checked;
501    } else {
502      var value = inputs_to_validate[i].value;
503      if (inputs_to_validate[i].name === 'captcha') {
504        value = value.toUpperCase();
505      }
506      data_to_send[inputs_to_validate[i].name] = value;
507    }
508  }
509
510  // Добавляем значение капчи из общего поля
511  var sharedCaptchaInput = document.getElementById('shared-captcha-input');
512  if (sharedCaptchaInput) {
513    data_to_send['captcha'] = sharedCaptchaInput.value.toUpperCase();
514  }
515
516  // Обнуляем старые ошибки
517  var errors_divs = form_block.getElementsByClassName('error-div');
518  for (var i = 0; i < errors_divs.length; i++) { errors_divs[i].innerHTML = ''; }
519  // Очищаем ошибки капчи
520  var captchaErrors = document.getElementById('shared-captcha-errors');
521  if (captchaErrors) captchaErrors.innerHTML = '';
522
523  var authUrlMap = {
524    'login': appRoutes.auth.login,
525    'register': appRoutes.auth.register,
526    'password/email': appRoutes.auth.passwordEmail,
527    'password/reset': appRoutes.auth.passwordReset
528  };
529
530  makeRequest({
531    url: authUrlMap[form_type] || (appRoutes.base + form_type),
532    type: 'POST',
533    callback: function (response) {
534      var res = responseHandler(response);
535      if (!res.success) { // ошибки
536        // Очищаем поле капчи
537        var captchaInput = document.getElementById('shared-captcha-input');
538        if (captchaInput) { captchaInput.value = ''; }
539
540        // Принудительно обновляем капчу (код в сессии уже сброшен при валидации)
541        refreshSharedCaptcha(true);
542
543        forEach(Object.keys(res.data), function(key){
544          var new_error = document.createElement('div');
545          new_error.innerText = res.data[key];
546
547          // Ошибки капчи показываем в отдельном блоке
548          if (key === 'captcha') {
549            var captchaErrors = document.getElementById('shared-captcha-errors');
550            if (captchaErrors) {
551              captchaErrors.appendChild(new_error);
552            }
553          } else {
554            var errorContainer = form_block.getElementsByClassName(key+'-'+form_type+'-errors')[0];
555            if (!errorContainer) {
556              errorContainer = form_block.getElementsByClassName('common-'+form_type+'-errors')[0];
557            }
558            if (errorContainer) {
559              errorContainer.appendChild(new_error);
560            }
561          }
562        });
563      } else {
564        if (form_type === 'registerForm') {
565          window.location = 'messages/successRegister';
566        } else {
567          window.location = '/';
568        }
569      }
570    },
571    data: JSON.stringify(data_to_send)
572  });
573}
574</script>
574
575    
576    <div id="footer">
577	<div id="footer-container">
578		<div id="footer-contacts">
579			<a href="mailto:contact&#64;chipinfo&#46;pro"><span class="social-icons mail-icon">@</span>&nbsp; E-mail</a> &nbsp; &nbsp; &nbsp;
580			<a href="https://t.me/electrochatic" alt="Чат ChipInfo.pro в Telergam"><span class="social-icons telegram-icon">&nbsp;</span>&nbsp; Telegram</a>
581		</div>
582		<div class="radio-container"  id="theme-selector" >Theme: <div class="custom-radio" onclick="changeThemeHandler(this, 'changeTheme');">
583    <div class="radio-on-title">Light</div>
584    <div class="radio-state-marker no-select"><div class="radio-punkt">&nbsp;</div></div>
585    <div class="radio-off-title">Dark</div>
586</div>
587</div>
588</div>
589
590<br/><br/>
591
592<!-- Metrika -->
593<script type="text/javascript">
594(function(w,c) {
595	(w[c] = w[c] || []).push(function() {
596		try { w.yaCounter19901995 = new Ya.Metrika({ id:19901995, webvisor:true, clickmap:true, trackLinks:true, accurateTrackBounce:false }); } catch(e) { }
597	}); })(window, "yandex_metrika_callbacks");
598</script>
598
599<noscript><div><img src="//mc.yandex.ru/watch/19901995" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
600<!-- Metrika -->
601</div>
602
603<div id="arrow-to-top" class="no-select" onclick="window.scrollTo({ top:0, behavior:'smooth' });"> &circ; </div>
604</body>
605</html>

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.