{"id":467507,"date":"2025-07-18T22:09:38","date_gmt":"2025-07-18T22:09:38","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=467507"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=467507","title":{"rendered":"<span>\u0417\u0430\u0436\u0438\u0433\u0430\u0435\u043c \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434 \u0446\u0432\u0435\u0442\u043e\u0432 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u043c \u0441\u0442\u0440\u043e\u043a<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b09\/070\/4fd\/b090704fdf8c9315d271f4b2a8d5bb73.webp\" width=\"1920\" height=\"1080\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b09\/070\/4fd\/b090704fdf8c9315d271f4b2a8d5bb73.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b09\/070\/4fd\/b090704fdf8c9315d271f4b2a8d5bb73.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><a href=\"https:\/\/raw.githubusercontent.com\/VBDUnit\/images_and_code_store\/refs\/heads\/main\/CSharp%205%2016.webp\" rel=\"noopener noreferrer nofollow\">16K<\/a><\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0447\u0430\u0441\u0442\u0435\u0439<\/summary>\n<div class=\"spoiler__content\">\n<ol>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/678248\/\" rel=\"noopener noreferrer nofollow\">\u041c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0432\u0438\u0434\u0435\u043e\u0441\u0442\u0435\u043d\u0430 \u0441 \u044f\u0434\u0435\u0440\u043d\u044b\u043c Ambilight \u043d\u0430 2300 \u0437\u043e\u043d<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/682140\/\" rel=\"noopener noreferrer nofollow\">\u0422\u0412 \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430: HDR, 120 \u0413\u0446 \u0438 \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u0441\u0451<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/687782\/\" rel=\"noopener noreferrer nofollow\">\u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0434\u0438\u0441\u043f\u043b\u0435\u0438. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/751264\/\" rel=\"noopener noreferrer nofollow\">\u0423\u0447\u0438\u043c \u0442\u0440\u0438 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u043b\u043d\u044b\u0448\u043a\u043e<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/895340\/\" rel=\"noopener noreferrer nofollow\">\u042f\u0434\u0435\u0440\u043d\u0430\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0434\u043b\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0432\u0438\u0434\u0435\u043e\u0441\u0442\u0435\u043d\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/899556\/\" rel=\"noopener noreferrer nofollow\">\u0416\u0433\u0451\u043c-\u0448\u044c\u0451\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0438 \u043a\u043e\u0440\u043c\u0438\u043c \u044f\u0434\u0435\u0440\u043d\u0443\u044e \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443<\/a><\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0436\u0438\u0433\u0430\u0435\u043c \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434 \u0446\u0432\u0435\u0442\u043e\u0432 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u043c \u0441\u0442\u0440\u043e\u043a<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u0415<\/summary>\n<div class=\"spoiler__content\"><a class=\"anchor\" name=\"%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" id=\"\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\"><\/a><\/p>\n<h2>\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u0437\u043e\u0440<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9%D0%A1%D0%BE%D1%84%D1%82\" rel=\"noopener noreferrer nofollow\">\u041d\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9A%D0%B0%D0%BA%D0%AD%D1%82%D0%BE%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82\" rel=\"noopener noreferrer nofollow\">\u0427\u0442\u043e \u043e\u043d \u0443\u043c\u0435\u0435\u0442<\/a><\/p>\n<\/li>\n<\/ul>\n<h2>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9F%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D0%9A%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0445\u043e\u0434 \u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%AD%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%D0%91%D0%B0%D0%B7%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0411\u0430\u0437\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9F%D0%B5%D0%BF%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B\" rel=\"noopener noreferrer nofollow\">\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b!<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%AD%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%D0%91%D1%83%D1%84%D0%B5%D1%80%D1%8B\" rel=\"noopener noreferrer nofollow\">\u0411\u0443\u0444\u0435\u0440\u044b \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%AD%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%D0%9F%D0%B5%D0%BF%D0%B5%D1%80%D1%83%D0%B1%D0%BA%D0%B0\" rel=\"noopener noreferrer nofollow\">\u041f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0430 \u0438 \u0441\u0438\u043c\u0434\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F%D0%A1%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C\" rel=\"noopener noreferrer nofollow\">\u0413\u0430\u043c\u043c\u0430 \u0438 \u0430\u043f\u0440\u0433\u0435\u0439\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%86%D0%B8%D0%B8\" rel=\"noopener noreferrer nofollow\">\u0423\u0440\u043e\u0432\u043d\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9C%D0%B8%D0%BB%D0%BB%D0%B8%D0%B0%D1%80%D0%B4%D0%A6%D0%B2%D0%B5%D1%82%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u041c\u0438\u043b\u043b\u0438\u0430\u0440\u0434 \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 HDR \u043d\u0430 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u043b\u0435\u043d\u0442\u0430\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%91%D1%83%D0%BB%D0%BE%D1%87%D0%BA%D0%B8\" rel=\"noopener noreferrer nofollow\">\u0410\u043c\u043e\u0440\u0444\u043d\u044b\u0439 \u0441\u043e\u0444\u0442 \u0438 \u043d\u043e\u0432\u0430\u044f \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9%D0%A1%D1%82%D0%BE%D0%BB\" rel=\"noopener noreferrer nofollow\">\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C\" rel=\"noopener noreferrer nofollow\">\u041c\u043d\u043e\u0433\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u043e\u0441\u0442\u044c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9F%D0%BE%D0%BB%D0%B8%D0%B3%D0%BB%D0%BE%D1%82%D0%BD%D1%8B%D0%B9%D0%9A%D0%BE%D0%B4\" rel=\"noopener noreferrer nofollow\">\u0422\u0440\u0438\u043f\u043e\u043b\u0438\u0433\u043b\u043e\u0442\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%AF%D0%B4%D1%80%D0%BE\" rel=\"noopener noreferrer nofollow\">\u042f\u0434\u0440\u043e \u0441\u043e\u0444\u0442\u0430<\/a><\/p>\n<\/li>\n<\/ul>\n<h2>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f 2315 \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0438\u0445 \u0431\u043b\u0438\u043a\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%93%D1%80%D0%B0%D1%84%D0%B8%D0%BA\" rel=\"noopener noreferrer nofollow\">\u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u0442\u043e\u043a\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9A%D0%B0%D0%BD%D0%B0%D0%BB%D1%8B%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82%D1%8B%D0%9A%D0%BE%D0%B4%D0%9B%D0%BE%D0%B3%D0%B8\" rel=\"noopener noreferrer nofollow\">\u041a\u0430\u043d\u0430\u043b\u044b, \u044d\u0444\u0444\u0435\u043a\u0442\u044b, \u043a\u043e\u0434 \u0438 \u043b\u043e\u0433\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%9A%D0%BE%D0%B4%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043a\u043e\u0434\u0430, \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0438 \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442<\/a><\/p>\n<\/li>\n<\/ul>\n<h2>\u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9D%D0%B0%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%BA\" rel=\"noopener noreferrer nofollow\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%97%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p>\u0412\u043e\u0442 \u043c\u044b \u0438 \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0434\u043e <strong>\u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/strong>, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u00a0\u0434\u0435\u043b\u0430\u043b <strong>\u0441\u043e\u0444\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439<\/strong> \u0432\u043e\u043a\u0440\u0443\u0433 \u0442\u0440\u0451\u0445 \u0442\u0435\u043b\u0438\u043a\u043e\u0432. \u0411\u0443\u0434\u0443\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u0441\u0443\u0440\u043e\u0432\u044b\u0435 SIMD\u2011\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u0430\u043f\u0433\u0440\u0435\u0439\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438, \u043d\u043e\u0432\u0430\u044f <span class=\"habrahidden\">(\u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435)<\/span> \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0432\u044b\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u044b, \u043c\u043d\u043e\u0433\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u043e\u0441\u0442\u044c, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u043b\u0438\u0433\u043b\u043e\u0442\u043d\u044b\u0439 \u043a\u043e\u0434, \u0449\u0435\u043f\u043e\u0442\u043a\u0430 GUI \u0438 \u0435\u0449\u0451 \u043a\u0443\u0447\u0430 \u0432\u0441\u0435\u0433\u043e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bcd\/6cb\/6d4\/bcd6cb6d4f1f2339076eb6a9a2653e79.webp\" width=\"1560\" height=\"878\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/bcd\/6cb\/6d4\/bcd6cb6d4f1f2339076eb6a9a2653e79.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bcd\/6cb\/6d4\/bcd6cb6d4f1f2339076eb6a9a2653e79.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0432\u00a0\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e\u00a0\u0436\u0435\u043b\u0435\u0437\u043e: \u043a\u0430\u043a <a href=\"https:\/\/habr.com\/ru\/articles\/751264\/\" rel=\"noopener noreferrer nofollow\">\u0432\u0435\u0448\u0430\u043b \u0442\u0435\u043b\u0438\u043a\u0438<\/a>, \u0434\u0435\u043b\u0430\u043b <a href=\"https:\/\/habr.com\/ru\/articles\/895340\/\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u043c\u044b \u0434\u043b\u044f\u00a0\u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/899556\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043b\u044f\u00a0\u043b\u0435\u043d\u0442<\/a>.<\/p>\n<hr\/>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <strong>\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u044b\u0439 \u0441\u043e\u0444\u0442 <\/strong>\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u043b\u0438\u043b \u043d\u0430\u00a0\u043a\u043e\u043b\u0435\u043d\u043a\u0435 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u00a0\u043d\u0435\u0434\u0435\u043b\u044e. \u041e\u043d \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b,\u00a0\u0431\u044b\u043b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u0440\u0443\u043b\u0438\u043b \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439, \u043d\u043e\u00a0\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0430\u043c\u0438. \u042f \u0434\u0430\u0436\u0435 \u0437\u0430\u0441\u0443\u043d\u0443\u043b \u0442\u0443\u0434\u0430 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u044d\u043a\u0432\u0430\u043b\u0430\u0439\u0437\u0435\u0440, \u043f\u0440\u0430\u0432\u0434\u0430 \u043f\u043e\u00a0\u0444\u0430\u043a\u0442\u0443 \u043e\u043d \u043d\u0435\u00a0\u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0441\u044f. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7c5\/9ab\/27c\/7c59ab27cb26ec1e0222b017156ef7c0.png\" alt=\"\u0421\u0442\u0430\u0440\u044b\u0439 \u0441\u043e\u0444\u0442\" title=\"\u0421\u0442\u0430\u0440\u044b\u0439 \u0441\u043e\u0444\u0442\" width=\"1292\" height=\"1287\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7c5\/9ab\/27c\/7c59ab27cb26ec1e0222b017156ef7c0.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7c5\/9ab\/27c\/7c59ab27cb26ec1e0222b017156ef7c0.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0430\u0440\u044b\u0439 \u0441\u043e\u0444\u0442<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u044d\u0442\u0430 \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u0430\u044f \u043d\u0430\u00a0\u043a\u043e\u043b\u0435\u043d\u043a\u0435 \u0448\u0442\u0443\u043a\u0430 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u043b\u0430 \u043f\u043b\u043e\u0445\u043e. \u0413\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430\u00a0\u0436\u0435\u043b\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435\u0433\u043e, \u0430\u00a0\u043a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u044f\u043b\u0430 \u0431\u043e\u043b\u044c. \u0414\u0430\u00a0\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u044d\u043a\u0440\u0430\u043d\u0430 \u0442\u0443\u0442\u00a0\u0431\u044b\u043b \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435\u00a0\u0441\u0430\u043c\u044b\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c. <\/p>\n<p>\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u0438 \u0432\u043e\u0442 \u043e\u043f\u044f\u0442\u044c\u00a0\u2014 \u043d\u0430\u0434\u043e \u0432\u0441\u0451 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c. \u042f \u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/498\/144\/490\/498144490275b26b48d59bd24b9deffe.webp\" alt=\"\u041d\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442\" title=\"\u041d\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442\" width=\"1560\" height=\"1012\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/498\/144\/490\/498144490275b26b48d59bd24b9deffe.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/498\/144\/490\/498144490275b26b48d59bd24b9deffe.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041d\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0435\u043b\u0430\u043b \u044f \u0435\u0433\u043e \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u0432 2022\u20132024\u00a0\u0433\u043e\u0434\u0430\u0445, \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441\u00a0\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0435\u0439 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430. \u042d\u0442\u043e \u0443\u0436\u0435 \u043f\u043e\u043b\u043d\u043e\u0432\u0435\u0441\u043d\u043e\u0435 \u041f\u041e\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439 \u043d\u0430\u00a0\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043c\u0438\u043d\u0438\u2011\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435\u00a0\u2014 \u043e\u0442\u00a0\u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 SIMD\u2011\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0434\u043e\u00a0\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 IDE.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/136\/2b9\/ebc\/1362b9ebcd51a5fe2d62ba1f11ee1538.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/136\/2b9\/ebc\/1362b9ebcd51a5fe2d62ba1f11ee1538.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/136\/2b9\/ebc\/1362b9ebcd51a5fe2d62ba1f11ee1538.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><a class=\"anchor\" name=\"%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9%D0%A1%D0%BE%D1%84%D1%82\" id=\"\u041d\u043e\u0432\u044b\u0439\u0421\u043e\u0444\u0442\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<h2>\u041d\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442<\/h2>\n<p>\u041d\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0438\u0431\u0440\u0438\u0434\u043e\u043c \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f.<\/p>\n<div class=\"floating-image\">\n<figure class=\"float\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/310\/96e\/436\/31096e43690d830c93803b35af293e56.png\" width=\"512\" height=\"512\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/310\/96e\/436\/31096e43690d830c93803b35af293e56.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/310\/96e\/436\/31096e43690d830c93803b35af293e56.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043d\u043e\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u0441\u043a\u0443\u0447\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0444\u0442 \u0441\u0442\u0430\u043b \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u043c \u0434\u043b\u044f <s>\u043e\u0442\u0441\u0442\u0440\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0433<\/s> \u0440\u0430\u0437\u043d\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0430\u043f\u0440\u043e\u0431\u0430\u0446\u0438\u0438 \u0438\u0434\u0435\u0439\u00a0\u2014 \u043a\u0430\u043a\u00a0\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445, \u0442\u0430\u043a \u0438 \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445\u00a0\u2014 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0434\u0430\u0432\u043d\u043e \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c. \u041e\u0442\u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d \u0432\u0441\u0451 \u0435\u0449\u0451 \u0432\u00a0\u0441\u0442\u0430\u0434\u0438\u0438 \u0430\u043b\u044c\u0444\u0430\u2011\u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u043e\u00a0\u043c\u043d\u0435 \u043d\u043e\u0440\u043c \ud83d\ude42<\/p>\n<\/div>\n<p>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043f\u043b\u043e\u0442\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445, \u043d\u043e\u00a0\u0438 \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u043e\u0434\u0438\u043b \u0441\u00a0\u043d\u0443\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0438 \u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u043d\u0430\u00a0\u043d\u0451\u043c \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u043e\u0444\u0442. <\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0421\u0442\u0430\u0440\u044b\u0439<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041d\u043e\u0432\u044b\u0439<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u043d\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u043c\u0435\u0440 \u0434\u0438\u043e\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u043d\u0430\u0435\u0442 \u043e\u00a0\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0438\u043e\u0434\u0430, \u043d\u0430\u00a0\u043a\u0430\u043a\u043e\u043c \u043e\u043d \u044d\u043a\u0440\u0430\u043d\u0435 \u0438 \u0432\u00a0\u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u043c\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442, \u0445\u0440\u0430\u043d\u0438\u0442 \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u0430\u043d\u0430\u043b\u044b \u0446\u0432\u0435\u0442\u0430 RGB \u043a\u0430\u043a \u0446\u0435\u043b\u044b\u0435 8 \u0431\u0438\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442, \u0445\u0440\u0430\u043d\u0438\u0442 \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u0430\u043d\u0430\u043b\u044b \u0446\u0432\u0435\u0442\u0430 RGB \u043a\u0430\u043a <strong>\u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 32\u00a0\u0431\u0438\u0442\u0430<\/strong> <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0422\u043e\u043b\u044c\u043a\u043e SDR, \u0432\u044b\u0448\u0435 100% \u043d\u0435 \u043f\u0440\u044b\u0433\u043d\u0435\u0448\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0423\u043c\u0435\u0435\u0442 \u0432\u00a0HDR: <\/strong>\u043f\u0440\u0438\u00a0\u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u044d\u043a\u0440\u0430\u043d\u0430, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u0434\u0430\u0436\u0435 \u0432\u044b\u0432\u043e\u0434\u0435, \u0437\u0430\u0436\u0438\u0433\u0430\u044f \u043b\u0435\u043d\u0442\u0443 \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u00ab\u044f\u0440\u0447\u0435 100%\u00bb \u0438 \u00ab\u0442\u0443\u0441\u043a\u043b\u0435\u0435 1\/255\u00bb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u042d\u0444\u0444\u0435\u043a\u0442\u044b \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0436\u0435\u0441\u0442\u043a\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432, \u0438\u0445 \u043a\u043e\u0434 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 SDR \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439, \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0448\u0438\u043d\u0443 \u0432 \u041e\u0417\u0423 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u044f\u043c\u043e\u0442\u043e\u0447\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 HDR \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043f\u0440\u044f\u043c\u043e \u043d\u0430\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0435 \u0431\u0435\u0437\u00a0\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0439 \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u0441\u00a0\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u043c\u0438, \u0432\u00a0\u041e\u0417\u0423 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e 37\u00a0\u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 <\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e95\/b01\/c43\/e95b01c43043218bc6806e50d13a3696.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e95\/b01\/c43\/e95b01c43043218bc6806e50d13a3696.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e95\/b01\/c43\/e95b01c43043218bc6806e50d13a3696.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430\u00a0\u0441\u0432\u043e\u044e C#\u043e\u0432\u043e\u0441\u0442\u044c, \u0441\u043e\u0444\u0442 \u043f\u0440\u043e\u043d\u0438\u0437\u0430\u043d \u0440\u0443\u0447\u043d\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430\u043c\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438 \u043e\u0447\u0435\u043d\u044c \u0437\u043b\u044b\u043c\u0438, \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0438 \u0431\u0435\u0441\u043f\u043e\u0449\u0430\u0434\u043d\u044b\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u0440\u0443\u043a\u0438 \u0447\u0435\u0441\u0430\u043b\u0438\u0441\u044c. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0431\u0435\u0437\u00a0\u0433\u0440\u0430\u0444\u0438\u043a\u0438, HLSL \u0438 C++ \u0442\u043e\u0436\u0435 \u043d\u0435\u00a0\u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/892\/60d\/06f\/89260d06f516cdfa9558f40196ad9250.webp\" alt=\"\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u043b\u0435\u0448\u0441\u043a\u0440\u0438\u043d\" title=\"\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u043b\u0435\u0448\u0441\u043a\u0440\u0438\u043d\" width=\"1560\" height=\"668\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/892\/60d\/06f\/89260d06f516cdfa9558f40196ad9250.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/892\/60d\/06f\/89260d06f516cdfa9558f40196ad9250.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u043b\u0435\u0448\u0441\u043a\u0440\u0438\u043d<\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"%D0%9A%D0%B0%D0%BA%D0%AD%D1%82%D0%BE%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82\" id=\"\u041a\u0430\u043a\u042d\u0442\u043e\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<h2>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h2>\n<p>\u041a\u0430\u043a\u00a0\u0432\u0438\u0434\u0435\u043e\u043c\u0438\u043a\u0448\u0435\u0440. \u041d\u0443 \u0438\u043b\u0438\u00a0\u0441\u043e\u0444\u0442 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0432\u0438\u0434\u0435\u043e\u00a0\u2014 <strong>\u044d\u0444\u0444\u0435\u043a\u0442\u044b<\/strong>, <strong>\u043a\u0430\u043d\u0430\u043b\u044b<\/strong>, \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u0441\u0451. \u0422\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0434\u0440\u044b\u2011\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0442\u0443\u0442 \u043d\u0435\u00a0\u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0435, \u043a\u0430\u043a\u00a0\u0432\u00a0\u0432\u0438\u0434\u0435\u043e, \u0430\u00a0\u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0435\u00a0\u2014 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0435 \u043b\u0435\u043d\u0442\u044b\u00a0\u0436\u0435. \u0412\u00a0\u043e\u0431\u0449\u0435\u043c, \u043c\u044b \u043a\u0430\u043a\u2011\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0441\u044f\u043a\u0438\u0445 \u0448\u0442\u0443\u043a <strong> 1D \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/strong>, \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0438\u0445 \u043d\u0430\u00a0\u043b\u0435\u043d\u0442\u044b. 60\u00a0\u0440\u0430\u0437 \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041d\u0443 \u0438\u043b\u0438\u00a0\u043e\u043a\u043e\u043b\u043e \u0442\u043e\u0433\u043e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/db5\/e2a\/fa6\/db5e2afa637608ef5aec460b3052c566.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/db5\/e2a\/fa6\/db5e2afa637608ef5aec460b3052c566.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/db5\/e2a\/fa6\/db5e2afa637608ef5aec460b3052c566.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0430\u043a? \u041d\u0443, \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <strong><u>\u043a\u0430\u043d\u0430\u043b\u043e\u0432<\/u><\/strong>. \u041a\u0430\u0436\u0434\u044b\u0439 <strong>\u043a\u0430\u043d\u0430\u043b\u00a0\u2014 \u044d\u0442\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/strong> \u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e <strong><u>1D\u2011\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/u><\/strong>, \u0432\u044b\u0432\u043e\u0434\u0438\u043c\u043e\u0439 \u043d\u0430\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443. \u0422\u044b\u043a\u0430\u0435\u043c \u0432\u00a0\u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b\u00a0\u2014 \u043e\u043d \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u00a0\u043b\u0435\u043d\u0442\u044b. \u0412\u0441\u0451. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0432\u043d\u043e\u0435. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/954\/521\/ea7\/954521ea77f7c899dcedff1981d4fcf1.webp\" alt=\"\u041f\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u043d\u0430\u043b\u0430\u043c\u0438\" title=\"\u041f\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u043d\u0430\u043b\u0430\u043c\u0438\" width=\"780\" height=\"400\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/954\/521\/ea7\/954521ea77f7c899dcedff1981d4fcf1.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/954\/521\/ea7\/954521ea77f7c899dcedff1981d4fcf1.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u043d\u0430\u043b\u0430\u043c\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u0442\u044c <strong>\u043a\u0430\u043d\u0430\u043b \u00ab\u0421\u043a\u0430\u043d \u044d\u043a\u0440\u0430\u043d\u0430\u00bb<\/strong> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e \u0441\u0430\u043c\u043e\u0435 <strong>\u00ab\u0440\u0430\u0441\u043f\u043b\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d\u0435 \u043d\u0430\u00a0\u0441\u0442\u0435\u043d\u044b\u00bb <\/strong>\u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0438\u0433\u0440 \u0438 \u0444\u0438\u043b\u044c\u043c\u043e\u0432, \u0430\u00a0\u0435\u0441\u0442\u044c <strong>\u043a\u0430\u043d\u0430\u043b\u044b<\/strong>, \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0441\u0442\u0438: \u0441\u0432\u0435\u0440\u043a\u0430\u043d\u0438\u0435, \u0440\u0430\u0434\u0443\u0433\u0438\u2011\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0438\u0435 \u043d\u0438\u0448\u0442\u044f\u043a\u0438 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u042d\u0442\u0438 \u043a\u0430\u043d\u0430\u043b\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0440\u0438\u0441\u0443\u043d\u043e\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0438\u043a\u0430\u043a \u043d\u0435\u00a0\u0441\u043e\u043e\u0442\u043d\u043e\u0441\u044f\u0441\u044c \u0441\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d\u0435.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u00a0\u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u043a\u043d\u0430 \u0432\u0438\u0434\u043d\u043e \u0442\u043e, \u0447\u0442\u043e\u00a0\u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0435 \u043b\u0435\u043d\u0442\u044b, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u043f\u0438\u0442\u0430\u043d\u0438\u044f. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e9a\/7ee\/46f\/e9a7ee46f7479ecfd099fd1253a27b74.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e9a\/7ee\/46f\/e9a7ee46f7479ecfd099fd1253a27b74.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e9a\/7ee\/46f\/e9a7ee46f7479ecfd099fd1253a27b74.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0438\u0433\u0440\u044b \u0438\u043b\u0438\u00a0\u0444\u0438\u043b\u044c\u043c\u0430 \u0441\u043e\u0444\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u0441\u043a\u0430\u043d \u044d\u043a\u0440\u0430\u043d\u0430, \u043f\u0440\u0438\u00a0\u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438\u00a0\u2014 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f1d\/152\/ca7\/f1d152ca74a32f8feb2b9f44ebb0433e.webp\" width=\"780\" height=\"308\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f1d\/152\/ca7\/f1d152ca74a32f8feb2b9f44ebb0433e.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f1d\/152\/ca7\/f1d152ca74a32f8feb2b9f44ebb0433e.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u041a\u0430\u043d\u0430\u043b\u044b <\/strong>\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0443\u0434\u0430\u043b\u044f\u0442\u044c, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u043c\u044f. \u041f\u0440\u0438\u00a0\u0449\u0435\u043b\u0447\u043a\u0435 \u043f\u043e\u00a0\u043a\u0430\u043d\u0430\u043b\u0443 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u00a0\u0435\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u044b, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u00a0\u044d\u0442\u0438\u043c \u0432\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u0442\u0438\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0438 \u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b02\/671\/cf2\/b02671cf2995e02b8832e867e2a1a90f.webp\" width=\"1170\" height=\"721\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b02\/671\/cf2\/b02671cf2995e02b8832e867e2a1a90f.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b02\/671\/cf2\/b02671cf2995e02b8832e867e2a1a90f.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 <strong>\u043a\u0430\u043d\u0430\u043b <\/strong>\u2014 \u044d\u0442\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430 <strong><u>\u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 <\/u><\/strong>\u2014 \u0448\u0442\u0443\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0442\u043e\u2011\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u00a0\u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043e\u043d\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u00a0\u043b\u0435\u043d\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0446\u0432\u0435\u0442\u043e\u043c, \u043f\u043e\u0442\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0438\u044f\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u043d\u043e\u0441\u0438\u043c \u043b\u0451\u0433\u043a\u0438\u0439 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/871\/71b\/85e\/87171b85ef78f32ff60ee46bbc85ca9e.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/871\/71b\/85e\/87171b85ef78f32ff60ee46bbc85ca9e.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/871\/71b\/85e\/87171b85ef78f32ff60ee46bbc85ca9e.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u042d\u0444\u0444\u0435\u043a\u0442\u044b <\/strong>\u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c, \u0443\u0434\u0430\u043b\u044f\u0442\u044c, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u043c\u044f, \u0430\u00a0\u0435\u0449\u0451\u00a0\u2014 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 <strong>\u043a\u0430\u043d\u0430\u043b<\/strong>, \u043d\u0430\u043f\u0438\u0445\u0430\u0442\u044c \u0432\u00a0\u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. \u0413\u00a0\u2014 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/26c\/295\/14e\/26c29514e53cd0ed4b7d05e4a87ab513.webp\" width=\"780\" height=\"490\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/26c\/295\/14e\/26c29514e53cd0ed4b7d05e4a87ab513.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/26c\/295\/14e\/26c29514e53cd0ed4b7d05e4a87ab513.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0415\u0449\u0451 \u0435\u0441\u0442\u044c \u043e\u0441\u043e\u0431\u044b\u0439 <strong>\u043a\u0430\u043d\u0430\u043b \u0432\u044b\u0432\u043e\u0434\u0430<\/strong>\u00a0\u2014 \u0442\u0443\u0442 \u0442\u043e\u0436\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u00a0\u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435, \u043a\u0430\u043a\u043e\u0439\u00a0\u0431\u044b \u043a\u0430\u043d\u0430\u043b \u043d\u0435\u00a0\u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044f\u0440\u043a\u043e\u0441\u0442\u0438, \u0432\u044b\u0432\u043e\u0434 \u0441\u0432\u0435\u0442\u043e\u0440\u0438\u0441\u0443\u043d\u043a\u0430 \u043d\u0430\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441\u00a0\u043b\u0435\u043d\u0442\u0430\u043c\u0438, \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0448\u0442\u0443\u043a\u0438. <strong>\u042d\u0444\u0444\u0435\u043a\u0442\u044b <\/strong>\u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043a\u043e\u0440\u043e\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c0d\/234\/569\/c0d23456955ab756e94de549ec5b6e8a.webp\" width=\"945\" height=\"614\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c0d\/234\/569\/c0d23456955ab756e94de549ec5b6e8a.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c0d\/234\/569\/c0d23456955ab756e94de549ec5b6e8a.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0442\u0443\u0442 \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u0435\u043b\u0430\u044e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u044b. \u0421\u043a\u0430\u043d \u044d\u043a\u0440\u0430\u043d\u0430\u00a0\u2014 <strong>\u044d\u0444\u0444\u0435\u043a\u0442<\/strong>, \u0432\u044b\u0432\u043e\u0434 \u043d\u0430\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u00a0\u2014 <strong>\u044d\u0444\u0444\u0435\u043a\u0442<\/strong>, \u0434\u0430\u0436\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043f\u0440\u0438\u0432\u043e\u0434\u0430\u043c\u0438 \u0442\u0435\u043b\u0438\u043a\u043e\u0432\u00a0\u2014 \u044d\u0442\u043e <strong>\u044d\u0444\u0444\u0435\u043a\u0442<\/strong>.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4b3\/de3\/167\/4b3de3167d258a0a0eea71cdd5d3c2dd.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/4b3\/de3\/167\/4b3de3167d258a0a0eea71cdd5d3c2dd.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4b3\/de3\/167\/4b3de3167d258a0a0eea71cdd5d3c2dd.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u0441\u0451 \u0435\u0441\u0442\u044c <strong>\u044d\u0444\u0444\u0435\u043a\u0442<\/strong>. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0439, \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u0439 \u043a\u0430\u043a\u00a0\u0445\u043e\u0447\u0435\u0448\u044c, \u043f\u0438\u0445\u0430\u0439 \u0432\u00a0\u043a\u0430\u043d\u0430\u043b\u044b\u00a0\u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0439 \u0441\u0432\u0435\u0440\u043a\u0430\u043d\u0438\u0435. \u0422\u0430\u043a\u0430\u044f \u0432\u043e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430. <\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0432\u0441\u044f\u043a\u0438\u0445 \u0440\u0430\u0434\u0443\u0433, \u0441\u0432\u0435\u0440\u043a\u0430\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043f\u0435\u0440\u0435\u043b\u0438\u0432\u043e\u0432, \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u043b\u0438\u043a\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 <strong>\u043d\u0430\u0439\u0442\u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043a\u0443\u0440\u0441\u043e\u0440<\/strong> \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d\u0435\u00a0\u2014 \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c65\/466\/643\/c654666433b7f1cce90177ae180f9b21.webp\" alt=\"\u0418\u0420\u041b \u043e\u043d\u043e \u0441\u0432\u0435\u0442\u0438\u0442 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u0435\u0435, \u0442\u0443\u0442 \u0432\u0441\u0451 \u0432\u044b\u043a\u0440\u0443\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438. \u0418 \u043a\u0443\u0440\u0441\u043e\u0440\u044b \u0432 10 \u0441\u043c \u044f \u0442\u043e\u0436\u0435 \u043d\u0435\u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e :)  \" title=\"\u0418\u0420\u041b \u043e\u043d\u043e \u0441\u0432\u0435\u0442\u0438\u0442 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u0435\u0435, \u0442\u0443\u0442 \u0432\u0441\u0451 \u0432\u044b\u043a\u0440\u0443\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438. \u0418 \u043a\u0443\u0440\u0441\u043e\u0440\u044b \u0432 10 \u0441\u043c \u044f \u0442\u043e\u0436\u0435 \u043d\u0435\u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e :)  \" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c65\/466\/643\/c654666433b7f1cce90177ae180f9b21.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c65\/466\/643\/c654666433b7f1cce90177ae180f9b21.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u0420\u041b \u043e\u043d\u043e \u0441\u0432\u0435\u0442\u0438\u0442 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u0435\u0435, \u0442\u0443\u0442 \u0432\u0441\u0451 \u0432\u044b\u043a\u0440\u0443\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438. \u0418 \u043a\u0443\u0440\u0441\u043e\u0440\u044b \u0432 10 \u0441\u043c \u044f \u0442\u043e\u0436\u0435 \u043d\u0435\u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \ud83d\ude42  <\/figcaption><\/div>\n<\/figure>\n<p>\u0410\u00a0\u0442\u0443\u0442 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u0440\u0435\u043d\u0438\u0435\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0433\u0434\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u044f \u0434\u0432\u0438\u0436\u0443\u0445\u0430. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 <strong>HDR <\/strong>\u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0431\u043b\u0438\u043a \u043b\u0435\u0433\u043a\u043e\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043a\u0430\u043a\u043e\u0433\u043e\u2011\u0442\u043e <u>\u043e\u0434\u043d\u043e\u0433\u043e<\/u> \u0434\u0438\u043e\u0434\u0430 \u043d\u0430 1000%.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u044b\u0448\u0435\u043a, \u0442\u043e \u0431\u043b\u0438\u043a \u043f\u043e\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c, \u0434\u043b\u044f\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0430\u0434\u043e \u0434\u043e\u043a\u0430\u043f\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e <a href=\"https:\/\/www.mousemux.com\/\" rel=\"noopener noreferrer nofollow\">MouseMux<\/a>\u00a0\u2014 \u0441\u043e\u0444\u0442\u0430 \u0434\u043b\u044f\u00a0\u043c\u043d\u043e\u0433\u043e\u043c\u044b\u0448\u0435\u0447\u043d\u043e\u0441\u0442\u0438. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0441\u0432\u044f\u0437\u0430\u043b\u0441\u044f \u0441\u00a0\u0430\u0432\u0442\u043e\u0440\u043e\u043c, \u0438 \u043e\u043d \u0434\u0430\u043b \u043c\u043d\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043a\u00a0SDK, \u0442\u0430\u043a \u0447\u0442\u043e\u00a0\u0434\u0435\u043b\u043e \u0437\u0430\u00a0\u043c\u0430\u043b\u044b\u043c \ud83d\ude42<\/p>\n<p>\u0422\u0430\u00a0\u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u043e\u043a\u043d\u0430\u043c\u0438\u00a0\u2014 \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0433\u0434\u0435 \u043e\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/03e\/d5c\/2ed\/03ed5c2edeaf9b9361823208c43171f0.webp\" alt=\"\" title=\"\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/03e\/d5c\/2ed\/03ed5c2edeaf9b9361823208c43171f0.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/03e\/d5c\/2ed\/03ed5c2edeaf9b9361823208c43171f0.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0420\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e: \u0435\u0441\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430\u00a0\u043e\u043a\u043d\u0430\u043c\u0438, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0442 \u0432\u0441\u043f\u044b\u0448\u043a\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u00a0\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0433\u0434\u0435 \u043e\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u043b\u043e\u0441\u044c. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4d7\/1ae\/4a0\/4d71ae4a0702d73d520dd57fd9134099.webp\" alt=\"\u0421\u043e\u043e\u0431\u0449\u0430\u0435\u043c \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0437\u0440\u0435\u043d\u0438\u044e, \u0447\u0442\u043e \u0442\u0443\u0442 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\" title=\"\u0421\u043e\u043e\u0431\u0449\u0430\u0435\u043c \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0437\u0440\u0435\u043d\u0438\u044e, \u0447\u0442\u043e \u0442\u0443\u0442 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/4d7\/1ae\/4a0\/4d71ae4a0702d73d520dd57fd9134099.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4d7\/1ae\/4a0\/4d71ae4a0702d73d520dd57fd9134099.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u043e\u043e\u0431\u0449\u0430\u0435\u043c \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0437\u0440\u0435\u043d\u0438\u044e, \u0447\u0442\u043e \u0442\u0443\u0442 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u043a\u043e\u043d\u043d\u044b\u0439 \u0431\u043b\u0438\u043a\u00a0\u0431\u044b\u043b \u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f, \u043d\u043e\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430, \u0447\u0442\u043e\u00a0\u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043a\u043d\u0430, \u0438 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0438 \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u0430\u0436\u043d\u0435\u0435 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430 \u0435\u0441\u0442\u044c \u0438 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438: \u0440\u0443\u0441\u0441\u043a\u0430\u044f \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c, \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0430\u044f\u00a0\u2014 \u0441\u0438\u043d\u0438\u043c. <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0431\u043e\u043a\u043e\u0432\u044b\u0435 \u0442\u0435\u043b\u0438\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b, \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043b\u0438\u043a \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0433\u043b\u0443\u0448\u0430\u0435\u0442 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443 \u043f\u043e\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441\u00a0\u0431\u043e\u043a\u043e\u0432\u044b\u043c\u0438\u00a0\u2014 \u043e\u043d \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u043b\u0438\u0436\u0435 \u043a\u00a0\u0441\u0442\u0435\u043d\u0435. \u0410\u00a0\u0435\u0441\u043b\u0438 \u0442\u0435\u043b\u0438\u043a\u0438 \u0437\u0430\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u0434\u043e\u043b\u044c \u0441\u0442\u0435\u043d\u044b, \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u00a0\u0443\u0440\u043e\u0432\u043d\u044f \u0431\u043e\u043a\u043e\u0432\u0443\u0448\u0435\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0442\u0440\u0438 \u0441\u0432\u0435\u0442\u0438\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e. \u0412\u0441\u0451 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u043a\u043e\u0435\u2011\u0447\u0442\u043e. \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044f \u0441\u00a0\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u0432\u0435\u0442\u043e\u0432\u044b\u043c\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u043c\u0438, \u043c\u043d\u0435 \u043d\u0430\u0434\u043e\u0435\u043b\u043e \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u043b\u0430\u0437\u0438\u0442\u044c \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0432\u00a0VisualStudio.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a16\/fb2\/605\/a16fb260550c6585a3120d8b022ee591.webp\" width=\"780\" height=\"490\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a16\/fb2\/605\/a16fb260550c6585a3120d8b022ee591.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a16\/fb2\/605\/a16fb260550c6585a3120d8b022ee591.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u00a0\u043d\u043e\u0432\u043e\u043c \u0441\u043e\u0444\u0442\u0435 \u0443\u00a0\u043b\u044e\u0431\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c <strong>\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/strong> \u043f\u0440\u044f\u043c\u043e \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u0432\u00a0\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. \u0421\u00a0\u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442\u043e\u043c \u0438 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ca0\/2e3\/759\/ca02e37598737e6c68b8c5f4ade20512.webp\" width=\"780\" height=\"381\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ca0\/2e3\/759\/ca02e37598737e6c68b8c5f4ade20512.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ca0\/2e3\/759\/ca02e37598737e6c68b8c5f4ade20512.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e,<strong> \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u00a0\u2014 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u043a\u043e\u0434<\/strong>. \u0412\u00a0\u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u043d\u0435\u00a0\u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438\u2011\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u0430\u00a0\u043e\u0441\u043e\u0431\u044b\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438\u00a0\u2014 <strong>\u0431\u0443\u043b\u043e\u0447\u043a\u0430\u043c\u0438<\/strong>. \u041d\u043e\u00a0\u043e\u0431\u043e\u00a0\u0432\u0441\u0451\u043c \u043f\u043e\u00a0\u043f\u043e\u0440\u044f\u0434\u043a\u0443. <\/p>\n<p><a class=\"anchor\" name=\"%D0%9F%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D0%9A%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8\" id=\"\u041f\u043e\u0434\u0445\u043e\u0434\u041a\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<h2>\u041f\u043e\u0434\u0445\u043e\u0434 \u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>\u041f\u043e\u0434\u0445\u043e\u0434 \u043a\u00a0\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430\u00a0\u0432\u0441\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0441\u043e\u0444\u0442\u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u0434\u043e\u043d\u0438\u0437\u0443. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u044f \u0441\u0435\u0431\u0435 \u044d\u0442\u043e \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u0430\u043a\u2011\u0442\u043e \u0442\u0430\u043a:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"144\" width=\"144\">\n<p align=\"left\">\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u0430\u043a \u0441\u0435\u0431\u044f \u0432\u0435\u0434\u0451\u0442 \u0441\u043e\u0444\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"144\" width=\"144\">\n<p align=\"left\"><strong>\u0418\u0433\u0440\u0430\u0435\u043c (\u0430\u043d\u0430\u043b\u0438\u0437 12\u041a \u044d\u043a\u0440\u0430\u043d\u0430 + \u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 \u2192 0%, \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430\u00a0\u043f\u0440\u043e\u0446 \u2192 0%, \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u041e\u0417\u0423 \u2192 0\u00a0\u0413\u0446<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"144\" width=\"144\">\n<p align=\"left\">\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c, \u0441\u043e\u0444\u0442 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438 \u0441\u0432\u0451\u0440\u043d\u0443\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 \u2192 0%, \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430\u00a0\u043f\u0440\u043e\u0446 &lt; 5%, \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u041e\u0417\u0423 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"144\" width=\"144\">\n<p align=\"left\">\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0441\u043e\u0444\u0442\u043e\u043c \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 &lt; 15%, \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430\u00a0\u043f\u0440\u043e\u0446 &lt; 15%, \u041e\u0417\u0423 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u00a0\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041a\u043e\u0433\u0434\u0430 \u0441\u043e\u0444\u0442 \u043d\u0435\u00a0\u0442\u0440\u043e\u0433\u0430\u044e\u0442, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0436\u0440\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043c\u0435\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c \u0438 \u0438\u0433\u0440\u0430\u043c. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u0433\u0440\u0430\u043c.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0442\u0443\u0442 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0430\u044f \u0432\u0435\u0449\u044c. \u042d\u0442\u043e \u00b1 \u0440\u0435\u0430\u043b\u0442\u0430\u0439\u043c\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0441\u043f\u0435\u0432\u0430\u0442\u044c 40\u201360\u00a0\u0440\u0430\u0437 \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0430\u00a0\u043b\u0435\u043d\u0442\u044b. \u0410\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043e\u043d \u043d\u0430\u00a0\u0421#, \u0443\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u0441\u0451 \u0447\u0438\u0441\u0442\u0438\u0442\u044c. \u0412\u00a0\u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0443\u0442 \u043b\u0430\u0433\u0438, \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0435\u00a0\u0441\u043f\u0430\u0441\u0443\u0442, \u0447\u0442\u043e\u00a0\u0431\u044b \u0442\u0430\u043c \u043d\u0435\u00a0\u043e\u0431\u0435\u0449\u0430\u043b\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f (\u044f \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435\u00a0\u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 <s>\u0435\u043c \u044d\u0442\u043e\u0442 \u043a\u0430\u043a\u0442\u0443\u0441<\/s> \u0434\u0435\u043b\u0430\u044e \u0440\u0435\u0430\u043b\u0442\u0430\u0439\u043c\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442 \u043d\u0430\u00a0C#). \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u0442\u0438\u043c \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c \u043c\u0443\u0441\u043e\u0440\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043e\u0434\u043d\u043e: <s>\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u00a0\u0421++ \u043a\u0430\u043a\u00a0\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u044e<\/s> \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u043f\u0440\u043e\u0432\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u00a0\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0443\u0441\u043e\u0440:\u00a0\u043b\u0438\u0431\u043e \u043d\u0435\u00a0\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439 \u043e\u0431\u044a\u0435\u043a\u0442,\u00a0\u043b\u0438\u0431\u043e, \u0435\u0441\u043b\u0438 \u0443\u0436 \u0441\u043e\u0437\u0434\u0430\u043b\u00a0\u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0435\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. \u041d\u0435\u00a0\u043d\u0430\u0434\u043e \u043d\u0430\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0443\u0447\u0443 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0445 \u0448\u0442\u0443\u043a \u0438 \u0442\u0443\u0442\u00a0\u0436\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u00a0\u043d\u0438\u0445.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u044f \u0434\u0430\u0432\u043d\u044b\u043c\u2011\u0434\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0432\u0430\u0442\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u0442\u0438\u0445 \u0441\u0430\u043c\u044b\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0439 \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u0432\u00a0\u043a\u0443\u0447\u0435) \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c. \u041d\u043e\u00a0\u0440\u0430\u0441\u043f\u043b\u0430\u0442\u043e\u0439 \u0437\u0430\u00a0\u044d\u0442\u043e \u0441\u043b\u0443\u0436\u0430\u0442 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0431\u0435\u0437\u00a0\u0437\u043d\u0430\u043d\u0438\u0439 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043e\u0442\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u043d\u043e\u0433\u0443. \u042d\u0442\u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0432\u00a0\u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0438 \u0442\u0443\u0442. \u0418 \u0445\u043e\u0442\u044f, \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435, \u0432.net 8\u00a0\u0438.net 9, \u0443\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437\u00a0\u043d\u0438\u0445 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0443\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u00a0\u2014 \u043d\u0430\u00a0\u0442\u043e \u043e\u043d\u0438 \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b, \u0447\u0442\u043e\u0431\u044b\u00a0\u0431\u044b\u0442\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438.<\/p>\n<\/div>\n<\/details>\n<p>\u0410\u00a0\u0432\u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u043c\u043e\u0439 \u041e\u0417\u0423 \u044f \u043d\u0435\u00a0\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u043b\u00a0\u2014 \u043c\u043d\u0435 \u0435\u0451 \u043d\u0435\u00a0\u0436\u0430\u043b\u043a\u043e. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/09f\/d4f\/b02\/09fd4fb02df5f1557aad1d3e1aa52abe.png\" alt=\"\u0412 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u044d\u043a\u0440\u0430\u043d\u0430 \u043e\u043d\u043e \u0436\u0440\u0451\u0442 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 1% CPU \u0438 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 1% GPU\" title=\"\u0412 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u044d\u043a\u0440\u0430\u043d\u0430 \u043e\u043d\u043e \u0436\u0440\u0451\u0442 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 1% CPU \u0438 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 1% GPU\" width=\"780\" height=\"712\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/09f\/d4f\/b02\/09fd4fb02df5f1557aad1d3e1aa52abe.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/09f\/d4f\/b02\/09fd4fb02df5f1557aad1d3e1aa52abe.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u044d\u043a\u0440\u0430\u043d\u0430 \u043e\u043d\u043e \u0436\u0440\u0451\u0442 \u043d\u0435\u00a0\u0431\u043e\u043b\u0435\u0435 1% CPU \u0438 \u043d\u0435\u00a0\u0431\u043e\u043b\u0435\u0435 1% GPU<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0443\u0442\u043e\u0447\u043d\u044e\u00a0\u2014 \u0441\u043e\u0444\u0442 \u044f \u043f\u0438\u0441\u0430\u043b \u0440\u0430\u0434\u0438 \u0440\u0430\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0434\u00a0\u0441\u0435\u0431\u044f. \u0412\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435, \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u041f\u0410\u041a \u0438 \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043c\u043e\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043a\u043e\u043c\u043f\u0430, \u0445\u043e\u0442\u044f \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430\u0445 \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f. \u0418 \u0434\u0430\u00a0\u2014 \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a \u043a\u043e\u0434 \u0432\u00a0\u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u0438\/\u0438\u043b\u0438 \u0432\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043d\u0435\u00a0\u043d\u0430\u0434\u043e \ud83d\ude42<\/p>\n<p><strong>\u0418\u0442\u0430\u043a, \u043f\u0440\u043e\u0431\u0435\u0436\u0438\u043c\u0441\u044f \u043f\u043e\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043a\u0443\u0441\u043e\u0447\u043a\u0430\u043c \u0441\u043e\u0444\u0442\u0430\u00a0\u2014 \u043e\u0442\u00a0\u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u0438 \u0441\u043b\u043e\u0451\u0432 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0434\u043e\u00a0\u0432\u044b\u0441\u0448\u0438\u0445 \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430.<\/strong><\/p>\n<p><a class=\"anchor\" name=\"%D0%AD%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%D0%91%D0%B0%D0%B7%D0%B0\" id=\"\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f\u0411\u0430\u0437\u0430\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0430\u0437\u0430<\/h2>\n<p>\u0411\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0432\u0441\u044f\u043a\u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0442\u0443\u0442 \u043c\u043d\u043e\u0433\u043e, \u043d\u043e\u00a0\u043e\u043f\u0438\u0448\u0443 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435\u00a0\u2014 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430\u00a0\u043e\u0431\u0449\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a\u043e \u0432\u0441\u0435\u043c\u0443. \u041c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437\u00a0\u043d\u0438\u0445\u00a0\u0431\u044b\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0434\u043b\u044f\u00a0\u0438\u0437\u0431\u0435\u0433\u0430\u043d\u0438\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u0432\u00a0\u043a\u0443\u0447\u0435 .NET<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7f0\/cf2\/a19\/7f0cf2a19c91a99065c32f1ac5bd46f2.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7f0\/cf2\/a19\/7f0cf2a19c91a99065c32f1ac5bd46f2.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7f0\/cf2\/a19\/7f0cf2a19c91a99065c32f1ac5bd46f2.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u041b\u0435\u043d\u0438\u0432\u0430\u044f \u043c\u044f\u0443\u043a\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u0438\u043d\u0433\u043e\u0432\u0430\u044f \u043b\u0438\u0447\u0438\u043d\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0421\u0442\u0440\u043e\u043a\u0438\u00a0\u2014 \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u043e\u2011\u043a\u0443\u0447\u043d\u044b\u0439 \u0442\u0438\u043f C#, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u044f\u043a\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0447\u0440\u0435\u0432\u0430\u0442\u0430 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0442\u0443\u0442 \u0431\u0443\u0434\u0435\u043c \u0432\u0441\u044f\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u043b\u043e\u0433\u043e\u0432 \u0438 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u0441\u043e\u0444\u0442\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043b\u0435\u043d\u0438\u0432\u0443\u044e \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044e \u0441\u0442\u0440\u043e\u043a \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430 mew. \u042d\u0442\u043e \u043d\u0435\u00a0\u0441\u0442\u0440\u043e\u043a\u0430, \u0430\u00a0\u043b\u0438\u0447\u0438\u043d\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<pre><code class=\"cs\">string text = $\u201d\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e {value}%\u201d; mew text = (\u201c\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e \u201c, value , \u201c%\u201d);<\/code><\/pre>\n<p><strong>mew <\/strong>\u2014 <strong>\u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0439 \u0442\u0438\u043f<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u00a0\u0438\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0432\u0438\u0434\u0435 (\u0441\u0442\u0440\u043e\u043a\u0438 \u043a\u0430\u043a\u00a0\u0441\u0442\u0440\u043e\u043a\u0438, \u0447\u0438\u0441\u043b\u0430\u00a0\u2014 \u043a\u0430\u043a\u00a0\u0447\u0438\u0441\u043b\u0430, bool \u043a\u0430\u043a\u00a0bool). \u041f\u0435\u0440\u0432\u044b\u0435 <strong>48\u00a0<\/strong>\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0430\u00a0\u0441\u0442\u0435\u043a\u0435, \u0434\u0430\u043b\u0435\u0435 \u0443\u0436\u0435 \u0438\u0434\u0451\u0442 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f \u0432\u00a0\u043a\u0443\u0447\u0435. \u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e\u00a0<strong>mew\u00a0<\/strong>\u2014 \u043d\u0435\u00a0<strong>ref struct<\/strong>, \u0430\u00a0\u043f\u0440\u043e\u0441\u0442\u043e <strong>struct<\/strong>.<\/p>\n<p>\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c.ToString(). \u0422\u0430\u043a \u043c\u044b \u0438\u0437\u0431\u0435\u0433\u0430\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 <strong>string <\/strong>\u0438 \u043a\u0430\u043a\u0438\u0445\u2011\u0431\u044b \u0442\u043e \u043d\u0438\u00a0\u0431\u044b\u043b\u043e \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439, \u0440\u0435\u0430\u043b\u0442\u0430\u0439\u043c\u043e\u0432\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043d\u0435\u00a0\u0437\u0430\u0431\u043e\u0442\u044f\u0441\u044c \u043e\u00a0\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u0443\u0441\u043e\u0440\u0430.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043d\u0430\u0431\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u00a0\u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0440\u0442\u0435\u0436\u0438, \u0430\u00a0\u043f\u043e\u0434\u043e\u0431\u043d\u043e <strong>StringBuilder<\/strong>:<\/p>\n<pre><code class=\"cs\">mew pew = new(); pew.PutItem(\u201c\u041d\u0430\u0447\u0430\u043b\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u201d); pew.PutItem(15); \/\/\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043a\u0430\u043a int 15, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 pew.PutItem(\u201c \u043a\u043e\u043d\u0435\u0446 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u201d); return pew;<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>E.rr &#8212; \u043f\u043e\u0447\u0442\u0438 On Error Resume Next<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041a\u00a0\u043e\u0448\u0438\u0431\u043a\u0430\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0434\u0435\u0441\u044c \u043e\u0441\u043e\u0431\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u041e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435\u00a0\u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443\u00a0\u2014 \u043c\u044b \u0442\u0443\u0442 \u043d\u0435\u00a0\u0430\u0442\u043e\u043c\u043d\u044b\u0435 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043f\u043e\u0433\u0440\u043e\u043c\u0438\u0440\u0443\u0435\u043c, \u0430\u00a0\u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043e\u0447\u043a\u0443 \u0434\u043b\u044f\u00a0\u0431\u0430\u0442\u043b\u0444\u0438\u043b\u0434\u043e\u0432 \u0438 \u043c\u0430\u0439\u043d\u043a\u0440\u0430\u0444\u0442\u043e\u0432. \u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430\u00a0\u2014 \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u043c \u0438 \u0444\u0438\u0433\u0430\u0447\u0438\u043c \u0434\u0430\u043b\u044c\u0448\u0435. \u041f\u043e\u0434\u0443\u043c\u0430\u0435\u0448\u044c, \u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e \u044d\u0444\u0444\u0435\u043a\u0442 \u043e\u0442\u0432\u0430\u043b\u0438\u0442\u0441\u044f. \u041f\u043e\u00a0\u0432\u0441\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c \u0438 \u0441\u043e\u0444\u0442\u0443 \u0432\u043c\u0435\u0441\u0442\u043e<\/p>\n<pre><code class=\"cs\">throw new Exception();<\/code><\/pre>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u0448\u0442\u0443\u043a\u0430:<\/p>\n<pre><code class=\"cs\">E.rr = (\u201c\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u201c, value, \u201c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0435\u201d);<\/code><\/pre>\n<p>\u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430\u00a0\u2014 \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u043c \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043b\u044e\u0441\u044b \u0438 \u043c\u0438\u043d\u0443\u0441\u044b, \u043d\u043e\u00a0\u0434\u043b\u044f\u00a0\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u043e\u043d \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439. \u0421\u0442\u0435\u043a \u043d\u0435\u00a0\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c, \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0442, \u0435\u0441\u043b\u0438 \u0441\u0431\u043e\u0439 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0439\u00a0\u2014 \u0435\u0441\u0442\u044c \u0448\u0430\u043d\u0441 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443, \u0430\u00a0\u0442\u0430\u043a\u00a0\u2014 \u043d\u0443, \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u0444\u0444\u0435\u043a\u0442 \u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e \u043e\u0442\u0432\u0430\u043b\u0438\u0442\u0441\u044f, \u0430\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0418 \u0434\u0430\u00a0\u2014 \u043d\u0430\u00a0\u0430\u0442\u043e\u043c\u043d\u044b\u0445 \u0441\u0442\u0430\u043d\u0446\u0438\u044f\u0445 \u0442\u0430\u043a \u043b\u0443\u0447\u0448\u0435 \u043d\u0435\u00a0\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p>\u0423\u0442\u043e\u0447\u043d\u044e, \u0447\u0442\u043e\u00a0<strong>E.rr<\/strong>\u00a0\u2014 \u044d\u0442\u043e \u043d\u0435\u00a0\u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e \u0442\u0430\u043c \u00ab<em>\u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0448\u0438\u0431\u043a\u0438<\/em>\u00bb. \u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u043d \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"cs\">public static event Action&lt;ErrorInformation&gt; OnException;  public static ErrorInformation rr  {      set      {          OnException?.Invoke(value);      }  } <\/code><\/pre>\n<p>\u041d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d \u0447\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435 + <strong>Debug<\/strong>\/<strong>Release <\/strong>\u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043f\u043e\u2011\u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u043d\u043e\u00a0\u044d\u0442\u043e \u043d\u0435\u00a0\u0432\u0430\u0436\u043d\u043e. \u0413\u043b\u0430\u0432\u043d\u043e\u0435\u00a0\u2014 \u043d\u0430 <strong>OnException<\/strong> \u0432\u0435\u0448\u0430\u0435\u043c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u00a0\u2014 \u043f\u0440\u043e\u0444\u0438\u0442.<\/p>\n<hr\/>\n<p>\u0412\u00a0\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u00a0\u044d\u0442\u043e\u043c\u0443, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0441<strong> E<\/strong> \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0438\u0448\u0442\u044f\u043a\u0430\u043c\u0438 \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u00a0\u043c\u0435\u0442\u043e\u0434\u0430\u0445:<\/p>\n<pre><code class=\"cs\">E.IsNull(...) E.IsInvalid(...) E.IsNotInDiapasone(...) E.IsNaN(...) E.IsNot64bit() E.IsNot32bit()<\/code><\/pre>\n<p>\u0438 \u043f\u0440\u043e\u0447\u0438\u0435.<\/p>\n<p>\u0412\u0441\u0435 \u043e\u043d\u0438 \u0447\u0442\u043e\u2011\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 <strong>true<\/strong>, \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u043f\u043b\u043e\u0445\u043e. \u0412\u00a0\u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u0430: <\/p>\n<pre><code class=\"cs\">if (E.IsInvalid(argument)) return;<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439, \u0442\u043e \u0432\u00a0\u0434\u0435\u0431\u0430\u0433\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434 \u0432\u00a0\u043b\u043e\u0433, \u0432\u00a0\u0440\u0435\u043b\u0438\u0437\u0435\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0432\u043e\u0434 \u0432\u00a0\u043b\u043e\u0433. \u0412\u00a0\u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 \u043d\u0435\u00a0<strong>void<\/strong>, \u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f <strong>default<\/strong>. \u0418 \u0434\u0430\u00a0\u2014 \u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0444\u0442\u0435 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u0415\u0441\u043b\u0438 argument null \u0438\u043b\u0438\u00a0\u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d (\u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0438 Dispose)\u00a0\u2014 \u043e\u043d\u043e \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u0432\u00a0\u043b\u043e\u0433 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u043e \u043d\u0430\u00a0\u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0447\u0442\u043e\u00a0\u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0433\u0434\u0435 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0438 \u0432\u00a0\u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435.<\/p>\n<p>\u0415\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f\u00a0\u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"cs\">E.CorrectIndexDiapasone(ref fromIncl, ref toExcl, 0, collection.Count)<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439, \u0442\u043e \u0432\u00a0\u043b\u043e\u0433 \u0431\u0443\u0434\u0443\u0442 \u043c\u0430\u0442\u044b, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e\u0444\u0442\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0441\u044f.<\/p>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <strong>E<\/strong> \u043d\u0430\u0431\u0438\u0442\u043e \u0432\u0441\u044f\u043a\u0438\u043c\u0438 <strong>[CallerMemberName]<\/strong>\u00a0\u2014 \u043e\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u043d\u0444\u0443 \u0438 \u043e\u00a0\u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0435, \u0438 \u043e\u00a0\u0444\u0430\u0439\u043b\u0435, \u0438 \u043e\u00a0\u043d\u043e\u043c\u0435\u0440\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0438 \u043e\u00a0\u043d\u043e\u043c\u0435\u0440\u0435 \u043f\u043e\u0442\u043e\u043a\u0430. \u0415\u0441\u043b\u0438\u00a0\u0431\u044b\u043b <strong>Exception\u00a0<\/strong>\u2014 \u0438 \u0435\u0433\u043e \u0442\u043e\u0436\u0435. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0436\u0440\u0451\u0442 \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 <strong>throw<\/strong>.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e <strong>Exception <\/strong>(\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043a\u0441\u0442\u0430\u0442\u0438) \u044d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 <strong>ErrorInformation <\/strong>\u2014 \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u043d\u0430\u00a0\u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u0412\u00a0\u043d\u0435\u0439 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u00a0\u043e\u0448\u0438\u0431\u043a\u0435 \u0432\u00a0\u0432\u0438\u0434\u0435 <strong>mew<\/strong>, <strong>Exception <\/strong>\u0435\u0441\u043b\u0438 \u043e\u043d\u00a0\u0431\u044b\u043b, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 <strong>CallerInformation <\/strong>\u0441\u00a0\u043c\u0435\u0442\u043e\u0434\u043e\u043c, \u0444\u0430\u0439\u043b\u043e\u043c, \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0438 <strong>\u043f\u043e\u0442\u043e\u043a\u043e\u043c<\/strong>. <strong>ErrorInformation <\/strong>\u043d\u0435\u044f\u0432\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u00a0mew \u0438 \u0438\u0437\u00a0\u0441\u0442\u0440\u043e\u043a\u0438, \u0447\u0442\u043e\u0431\u044b, \u0435\u0441\u043b\u0438 \u043d\u0435\u00a0\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0438\u0442\u044c\u0441\u044f\u00a0\u2014 \u043d\u0435\u00a0\u043f\u0430\u0440\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0412\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0442 \u043a\u043e\u0434 <strong>E.CorrectIndexDiapasone:<\/strong><\/p>\n<pre><code class=\"cs\">public static void CorrectIndexDiapasone(ref long from_INCLUSIVE, ref long to_EXCLUSIVE, long minIncl, long maxExcl, [CallerArgumentExpression(nameof(maxExcl))] string maxExcl_name = null, [CallerArgumentExpression(nameof(minIncl))] string minIncl_name = null, [CallerArgumentExpression(nameof(to_EXCLUSIVE))] string to_EXCLUSIVE_name = null, [CallerArgumentExpression(nameof(from_INCLUSIVE))] string from_INCLUSIVE_name = null, [CallerMemberName] string callerMemberName = null, [CallerLineNumber] int callerLineNumber = -1, [CallerFilePath] string callerFilePath = null)  {      if (maxExcl &lt; minIncl)      {          var m = maxExcl;          maxExcl = minIncl;          minIncl = m;      }      if (from_INCLUSIVE &lt; minIncl)      {          E.rr = new mew(\"\u0421\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \", from_INCLUSIVE_name, \" \u0440\u0430\u0432\u0435\u043d \", from_INCLUSIVE, \", \u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \", minIncl_name, \", \u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \", minIncl, \". \", from_INCLUSIVE_name, \" \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u043d\u0430 \", minIncl_name, \", \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \", minIncl);          from_INCLUSIVE = minIncl;      }      if (to_EXCLUSIVE &gt; maxExcl)      {          E.rr = new mew(\"\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \", to_EXCLUSIVE_name, \" \u0440\u0430\u0432\u0435\u043d \", to_EXCLUSIVE, \", \u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \", maxExcl_name, \", \u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \", maxExcl, \". \", to_EXCLUSIVE_name, \" \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u043d\u0430 \", maxExcl_name, \", \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \", maxExcl);          to_EXCLUSIVE = maxExcl;      }      if (from_INCLUSIVE &gt; to_EXCLUSIVE)      {          E.rr = new mew(\"\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \", to_EXCLUSIVE_name, \" \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \", from_INCLUSIVE_name, \"(\", to_EXCLUSIVE, \" &lt; \", from_INCLUSIVE, \"). \u0418\u043d\u0434\u0435\u043a\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u043d\u044b \u043c\u0435\u0441\u0442\u0430\u043c\u0438\");          var last = to_EXCLUSIVE - 1;          var first = from_INCLUSIVE;          {              var v = last;              last = first;              first = v;          }          from_INCLUSIVE = first;          to_EXCLUSIVE = last + 1;      }  } <\/code><\/pre>\n<p>\u0414\u0430, <strong>CallerArgumentExpression <\/strong>\u043f\u0440\u0435\u043a\u0440\u0430\u0441\u0435\u043d. \u042f \u0442\u043e\u0436\u0435 \u0445\u043e\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u0441\u0442\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u043f\u0440\u043e\u0449\u0435. \u0422\u0438\u043f\u0430 \u043a\u0430\u043a\u043e\u0439\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 <strong>CallingInformation<\/strong>.  <\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u043f\u0438\u0441\u043a\u0438 \u0431\u0435\u0437 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439: Vist4, Vist16 \u0438 \u0432\u0441\u0435-\u0432\u0441\u0435-\u0432\u0441\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a <strong>List&lt;T&gt;<\/strong> \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u00a0\u043a\u0443\u0447\u0435. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435\u00a0\u2014 \u043d\u0435\u00a0\u0435\u0441\u0442\u044c \u043a\u0440\u0443\u0442\u043e. <abbr class=\"habraabbr\" title=\"\u0422\u043e\u0433\u0434\u0430 \u0432\u00a0C# \u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u043d\u0438 ref struct, \u043d\u0438 ValueListBuilder, \u043d\u0438 Span\" data-title=\"&lt;p&gt;\u0422\u043e\u0433\u0434\u0430 \u0432&amp;nbsp;C# \u043d\u0435&amp;nbsp;\u0431\u044b\u043b\u043e \u043d\u0438 &lt;strong&gt;ref struct&lt;\/strong&gt;, \u043d\u0438 &lt;strong&gt;ValueListBuilder&lt;\/strong&gt;, \u043d\u0438 &lt;strong&gt;Span&amp;lt;T&amp;gt;&lt;\/strong&gt;&lt;\/p&gt;\" data-abbr=\"\u0414\u0435\u0441\u044f\u0442\u044c \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434\">\u0414\u0435\u0441\u044f\u0442\u044c \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434<\/abbr>, \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c \u0441\u00a0\u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 \u0432\u00a0\u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u00a0\u0441\u0442\u0435\u043a\u0435. \u0412\u00a0\u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0432\u043e\u043c \u0441\u043e\u0444\u0442\u0435 \u043e\u043d \u0440\u0435\u0438\u043d\u043a\u0430\u0440\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0432\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <strong><abbr class=\"habraabbr\" title=\"\u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 Value List\" data-title=\"&lt;p&gt;\u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 Value List&lt;\/p&gt;\" data-abbr=\"Vist\">Vist<\/abbr><\/strong>: <strong>Vist1<\/strong>, <strong>Vist2<\/strong>, <strong>Vist4<\/strong>, <strong>Vist8<\/strong>, <strong>Vist16<\/strong>, <strong>Vist32<\/strong>, <strong>Vist64<\/strong>, <strong>Vist128<\/strong>.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <strong>Vist<\/strong> \u0445\u0440\u0430\u043d\u0438\u0442 \u043a\u0430\u043a\u00a0\u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u043a\u0430\u043a\u00a0<strong>List&lt;T&gt;<\/strong>. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u0435\u043d\u043d\u043e\u00a0\u2014 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043e \u0432\u00a0\u0435\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>Vist4\u00a0<\/strong>\u0445\u0440\u0430\u043d\u0438\u0442 <strong>4<\/strong>\u00a0\u0442\u0430\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u00a0\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u043f\u043e\u00a0\u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u043c\u0430\u043b\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0438\u0434\u0451\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u00a0\u043f\u043e\u043b\u044f\u043c \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043d\u0430\u00a0\u0438\u0444\u0430\u0445 (\u0442\u043e \u0435\u0441\u0442\u044c \u0443\u00a0\u043d\u0430\u0441 \u0442\u0443\u0442 <strong>O(Log(N)) <\/strong>\u2014 \u043d\u0435 <strong>O(1)<\/strong> \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043a\u0430\u043a\u00a0\u0443 <strong>Span&lt;T&gt;,<\/strong> \u043d\u043e\u00a0\u0442\u043e\u0436\u0435 \u043d\u043e\u0440\u043c), \u0434\u043b\u044f\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 (\u0442.\u00a0\u0435. \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0435\u0439)\u00a0\u2014 \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u00a0\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c\u0443 <strong>List&lt;T&gt;<\/strong>. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440<strong>[]<\/strong> \u0438 \u0432\u0441\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u043e\u0432\u044b\u0435 <strong>Insert<\/strong>, <strong>Clear<\/strong>, <strong>Remove<\/strong> \u0438 \u043f\u0440\u043e\u0447\u0438\u0435.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u044b\u0445 <strong>8<\/strong> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437 <strong>Vist8<\/strong>:<\/p>\n<pre><code class=\"cs\"> private T getSolidElementAt(int index)  {      #region \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e, \u0441\u0442\u0430\u0434\u043e \u0438\u0444\u043e\u0432      if (index &lt; 4)      {          if (index &lt; 2)          {              if (index == 0)                  return Item00;              else \/\/index == 1                  return Item01;          }          else \/\/index &gt;= 2          {              if (index == 2)                  return Item02;              else \/\/index == 3                  return Item03;          }      }      else \/\/index &gt;= 4      {          if (index &lt; 6)          {              if (index == 4)                  return Item04;              else \/\/index == 5                  return Item05;          }          else \/\/index &gt;= 6          {              if (index == 6)                  return Item06;              else \/\/index == 7                  return Item07;          }      }      #endregion;  } <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443 Vist64 (\u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u044f)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">private void setSolidElementAt(int index, T value) { #region \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e, \u0441\u0442\u0430\u0434\u043e \u0438\u0444\u043e\u0432 if (index &lt; 32) { if (index &lt; 16) { if (index &lt; 8) { if (index &lt; 4) { if (index &lt; 2) { if (index == 0) Item00 = value; else \/\/index == 1 Item01 = value; } else \/\/index &gt;= 2 { if (index == 2) Item02 = value; else \/\/index == 3 Item03 = value; } } else \/\/index &gt;= 4 { if (index &lt; 6) { if (index == 4) Item04 = value; else \/\/index == 5 Item05 = value; } else \/\/index &gt;= 6 { if (index == 6) Item06 = value; else \/\/index == 7 Item07 = value; } } } else \/\/index &gt;= 8 { if (index &lt; 12) { if (index &lt; 10) { if (index == 8) Item08 = value; else \/\/index == 9 Item09 = value; } else \/\/index &gt;= 10 { if (index == 10) Item10 = value; else \/\/index == 11 Item11 = value; } } else \/\/index &gt;= 12 { if (index &lt; 14) { if (index == 12) Item12 = value; else \/\/index == 13 Item13 = value; } else \/\/index &gt;= 14 { if (index == 14) Item14 = value; else \/\/index == 15 Item15 = value; } } } } else \/\/index &gt;= 16 { if (index &lt; 24) { if (index &lt; 20) { if (index &lt; 18) { if (index == 16) Item16 = value; else \/\/index == 17 Item17 = value; } else \/\/index &gt;= 18 { if (index == 18) Item18 = value; else \/\/index == 19 Item19 = value; } } else \/\/index &gt;= 20 { if (index &lt; 22) { if (index == 20) Item20 = value; else \/\/index == 21 Item21 = value; } else \/\/index &gt;= 22 { if (index == 22) Item22 = value; else \/\/index == 23 Item23 = value; } } } else \/\/index &gt;= 24 { if (index &lt; 28) { if (index &lt; 26) { if (index == 24) Item24 = value; else \/\/index == 25 Item25 = value; } else \/\/index &gt;= 26 { if (index == 26) Item26 = value; else \/\/index == 27 Item27 = value; } } else \/\/index &gt;= 28 { if (index &lt; 30) { if (index == 28) Item28 = value; else \/\/index == 29 Item29 = value; } else \/\/index &gt;= 30 { if (index == 30) Item30 = value; else \/\/index == 31 Item31 = value; } } } } } else \/\/index &gt;= 32 { if (index &lt; 48) { if (index &lt; 40) { if (index &lt; 36) { if (index &lt; 34) { if (index == 32) Item32 = value; else \/\/index == 33 Item33 = value; } else \/\/index &gt;= 34 { if (index == 34) Item34 = value; else \/\/index == 35 Item35 = value; } } else \/\/index &gt;= 36 { if (index &lt; 38) { if (index == 36) Item36 = value; else \/\/index == 37 Item37 = value; } else \/\/index &gt;= 38 { if (index == 38) Item38 = value; else \/\/index == 39 Item39 = value; } } } else \/\/index &gt;= 40 { if (index &lt; 44) { if (index &lt; 42) { if (index == 40) Item40 = value; else \/\/index == 41 Item41 = value; } else \/\/index &gt;= 42 { if (index == 42) Item42 = value; else \/\/index == 43 Item43 = value; } } else \/\/index &gt;= 44 { if (index &lt; 46) { if (index == 44) Item44 = value; else \/\/index == 45 Item45 = value; } else \/\/index &gt;= 46 { if (index == 46) Item46 = value; else \/\/index == 47 Item47 = value; } } } } else \/\/index &gt;= 48 { if (index &lt; 56) { if (index &lt; 52) { if (index &lt; 50) { if (index == 48) Item48 = value; else \/\/index == 49 Item49 = value; } else \/\/index &gt;= 50 { if (index == 50) Item50 = value; else \/\/index == 51 Item51 = value; } } else \/\/index &gt;= 52 { if (index &lt; 54) { if (index == 52) Item52 = value; else \/\/index == 53 Item53 = value; } else \/\/index &gt;= 54 { if (index == 54) Item54 = value; else \/\/index == 55 Item55 = value; } } } else \/\/index &gt;= 56 { if (index &lt; 60) { if (index &lt; 58) { if (index == 56) Item56 = value; \/\/786 else \/\/index == 57 Item57 = value; } else \/\/index &gt;= 58 { if (index == 58) Item58 = value; else \/\/index == 59 Item59 = value; } } else \/\/index &gt;= 60 { if (index &lt; 62) { if (index == 60) Item60 = value; else \/\/index == 61 Item61 = value; } else \/\/index &gt;= 62 { if (index == 62) Item62 = value; else \/\/index == 63 Item63 = value; } } } } } #endregion; }<\/code><\/pre>\n<p><strong>Vist128\u00a0<\/strong>\u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0441\u044e\u0434\u0430 \u043d\u0435\u00a0\u0431\u0443\u0434\u0443, \u044f \u0434\u0443\u043c\u0430\u044e, \u0441\u0443\u0442\u044c \u0438 \u0442\u0430\u043a \u044f\u0441\u043d\u0430 \ud83d\ude42<\/p>\n<\/div>\n<\/details>\n<p>\u0415\u0441\u043b\u0438 \u0443\u00a0\u043c\u0435\u043d\u044f \u043d\u0430\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0434, \u0433\u0434\u0435 \u0432\u00a0\u0441\u043f\u0438\u0441\u043e\u043a \u0432\u00a0\u0442\u0438\u043f\u043e\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435 <strong>16\u00a0<\/strong>\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u044f \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u044e\u0437\u0430\u044e \u0432\u043c\u0435\u0441\u0442\u043e <strong>List&lt;T&gt;<\/strong> \u043a\u0430\u043a\u043e\u0439\u2011\u043d\u0438\u0431\u0443\u0434\u044c <strong>Vist16&lt;T&gt;<\/strong>\u00a0\u2014 \u0438 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442. \u0410\u00a0\u0435\u0441\u043b\u0438 \u0443\u0436 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0447\u0442\u043e\u00a0\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0441\u044f <strong>16<\/strong>, <strong>17\u00a0<\/strong>\u0438 \u0431\u043e\u043b\u0435\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u00a0\u2014 \u043d\u0435\u00a0\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0436\u0435 \u0441\u00a0\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f\u043c\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u043d\u0435\u00a0<strong>ref struct<\/strong>, \u0430\u00a0\u0438\u043c\u0435\u043d\u043d\u043e <strong>struct<\/strong>, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u00a0\u043f\u043e\u043b\u044f\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440. \u0418 \u0434\u0430\u00a0\u2014 \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0431\u0430\u0433\u043e\u0446\u0438\u0440\u043a. \u041d\u0443 \u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cs\">private Vist32&lt;Type&gt; myItems; \/\/\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0435\u0441\u0435\u043b\u043e public void SetItems(Vist32&lt;Type&gt; newItems) =&gt; myItems = newItems;\u00a0 \/\/\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u043d\u043e\u0440\u043c public void SetItems_without_bug(Vist32&lt;Type&gt; newItems) =&gt; myItems = newItems.Clone();\u00a0<\/code><\/pre>\n<p>\u0443\u00a0\u043d\u0430\u0441 \u043f\u0435\u0440\u0432\u044b\u0435 <strong>N<\/strong> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u0430\u00a0\u0445\u0432\u043e\u0441\u0442\u0438\u043a, \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0441\u0442\u044c\u00a0\u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u043e\u00a0\u0441\u0441\u044b\u043b\u043a\u0435. \u0418 \u043f\u0440\u0438\u00a0\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 <strong>32\u00a0<\/strong>(\u0434\u043b\u044f <strong>Vist32<\/strong>), \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u00a0\u0432\u0435\u0441\u0435\u043b\u043e, \u0430\u00a0\u041e\u0427\u0415\u041d\u042c \u0432\u0435\u0441\u0435\u043b\u043e.<\/p>\n<p>\u0415\u0449\u0451 \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u00a0\u043d\u0435\u0431\u0435\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0435\u043a\u0430\u00a0\u2014 \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043a\u0430\u043a\u00a0\u0441\u00a0\u043b\u044e\u0431\u044b\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0448\u0442\u0443\u043a\u0430\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u043c\u0438 \u0435\u0433\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c <strong>Vist64\u00a0<\/strong>\u0438 <strong>Vist128\u00a0<\/strong>\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u0430\u00a0\u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438 \u0441\u00a0\u0443\u0447\u0430\u0441\u0442\u0438\u0435\u043c \u0441\u0430\u0431\u0436\u0430\u00a0\u2014 <strong><em>\u043e\u0447\u0435\u043d\u044c<\/em><\/strong> \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c. \u0412\u00a0\u043e\u0431\u0449\u0435\u043c, <strong>Vist <\/strong>\u2014 \u0448\u0442\u0443\u043a\u0430 \u0433\u043e\u0434\u043d\u0430\u044f, \u043d\u043e\u00a0\u043a\u043e\u0432\u0430\u0440\u043d\u0430\u044f, \u0441\u00a0\u043d\u0435\u0439 \u043d\u0430\u0434\u043e \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u0435\u0435. \u041d\u043e\u00a0\u043c\u043d\u0435 \u043d\u043e\u0440\u043c.<\/p>\n<p>\u0423\u00a0\u0442\u0435\u0445, \u043a\u0442\u043e \u0437\u043d\u0430\u043a\u043e\u043c \u0441 <strong>C++<\/strong>, \u043f\u0440\u0438\u00a0\u0432\u0438\u0434\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0447\u0435\u0441\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b. \u0423\u00a0\u043c\u0435\u043d\u044f \u0442\u043e\u0436\u0435 \u0447\u0435\u0448\u0443\u0442\u0441\u044f. \u041d\u043e\u00a0\u0438\u0440\u043e\u043d\u0438\u044f \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u0432 <strong>C++<\/strong> \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u043c\u044b\u0441\u043b\u0430 \u0432\u00a0\u044d\u0442\u043e\u043c \u043e\u0433\u043e\u0440\u043e\u0434\u0435 \u043d\u0435\u0442, \u0438\u0431\u043e \u0442\u0430\u043c \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435\u00a0\u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442.<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e-\u0430\u0442\u043e\u043c\u043d\u044b\u0439 atomic_bool<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0417\u043d\u0430\u0447\u0438\u043c\u044b\u0439 \u0442\u0438\u043f. \u0412\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a\u00a0<strong>bool <\/strong>\u0438 \u043d\u0435\u044f\u0432\u043d\u043e \u0441\u00a0\u043d\u0438\u043c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u0417\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435 1, \u0430 <strong>4\u00a0\u0431\u0430\u0439\u0442\u0430<\/strong>. \u0418 \u0433\u043b\u0430\u0432\u043d\u043e\u0435\u00a0\u2014 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <strong>\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/strong>, Exchange, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<p>\u0423\u00a0\u043c\u0435\u043d\u044f\u00a0\u0431\u044b\u043b\u0438 \u043c\u044b\u0441\u043b\u0438 \u0432\u043e\u0442\u043a\u043d\u0443\u0442\u044c \u0432\u00a0<strong>C#<\/strong> \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 <strong>std::atomic&lt;T&gt;<\/strong>, \u043d\u043e\u00a0\u043f\u043e\u043a\u0430 \u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e <strong>bool<\/strong>. \u0421\u0430\u043c\u044b\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <strong>atomic_bool\u00a0<\/strong>\u2014 \u044d\u0442\u043e <strong>SetInterlockedAndGetPrevous(bool newValue).<\/strong><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cs\">atomic_bool _isDisposed = false; public bool IsDisposed =&gt; _isDisposed; public void Dispose()   {     if (IsDisposed || _isDisposed.SetInterlockedAndGetPrevous(true))       return;   \/\/\u0414\u0435\u043b\u0430\u0435\u043c \u0434\u0435\u043b\u043e   }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 DisposableExtended<\/summary>\n<div class=\"spoiler__content\">\n<p>\u042d\u0442\u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <strong>IDisposable <\/strong>\u0434\u043b\u044f\u00a0\u0448\u0442\u0443\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<ul>\n<li>\n<p>\u0414\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0437\u043d\u0430\u0442\u044c, \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u00a0\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 (<strong>IsDisposed<\/strong>)<\/p>\n<\/li>\n<li>\n<p>\u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0<strong>Dispose <\/strong>\u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e <strong>1\u00a0\u0440\u0430\u0437<\/strong><\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u043e\u00a0\u043d\u0430\u0447\u0430\u043b\u0435 \u0438 \u043a\u043e\u043d\u0446\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u0442\u043e\u0447\u043d\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435\u00a0\u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438\u00a0\u2014 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043b \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0443, \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043a\u043b\u044e\u0447. \u0425\u043e\u0447\u0435\u0448\u044c \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00a0\u2014 \u0441\u043e\u043e\u0431\u0449\u0438 \u044d\u0442\u043e\u0442 \u043a\u043b\u044e\u0447 \u043e\u0431\u0440\u0430\u0442\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u044f\u043a\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432\u0440\u043e\u0434\u0435 <strong>BeforeDispose <\/strong>\u0438 <strong>AfterDispose<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f<em> \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u0431\u043e\u044f<\/em> \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u00a0\u0441\u0440\u0430\u0437\u0443. \u041f\u043e\u0441\u043b\u0435 Dispose \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0441\u0435\u0431\u044f \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c (<strong>IsDisposed<\/strong>) \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u041f\u041e\u00a0\u0441\u0435\u0431\u044f \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c (\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e), \u0430\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u0443 \u043d\u0430\u0441 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e. \u041a\u0430\u0434\u0440 \u0437\u0430\u00a0\u043a\u0430\u0434\u0440\u043e\u043c. \u0412\u043e\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435\u2011\u043a\u0430\u0434\u0440\u0443 \u0432\u044b\u0437\u0432\u0430\u043b\u0438 <strong>Dispose<\/strong>, \u043d\u043e\u00a0\u043e\u043d\u0430 \u0443\u0441\u043f\u0435\u043b\u0430 \u0432\u00a0\u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432\u00a0\u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e \u044d\u0444\u0444\u0435\u043a\u0442 \u0438 \u043e\u043d \u0435\u0451 \u043f\u0430\u0440\u0443 \u0440\u0430\u0437 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u041d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e: \u0432\u0435\u0434\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u043f\u043e\u0437\u0436\u0435. \u0415\u0441\u043b\u0438\u00a0\u0436\u0435 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0435\u0447\u044c \u043e\u0431\u00a0\u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430), \u0442\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c. \u041a\u043e\u0433\u0434\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u0442 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0433\u0440\u0443\u0437\u043e\u043a\u00a0\u2014 \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0446\u0435\u043b\u044f\u0445 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e\u00a0\u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e\u0439 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<p>\u0412\u0441\u0451 \u044d\u0442\u043e \u0441\u00a0\u0443\u043c\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u041c\u044b \u0442\u0443\u0442 \u0431\u0443\u0434\u0435\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044e\u0437\u0430\u0442\u044c \u0440\u0443\u0447\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043e\u0431\u043c\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u044f\u043a\u0438\u043c\u0438 \u0448\u0435\u0439\u0434\u0435\u0440\u0430\u043c\u0438, \u0441\u043e\u0444\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0439\u00a0\u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u0430\u044f \u0448\u0442\u0443\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442 \u043d\u0430\u043c \u0436\u0438\u0437\u043d\u044c.<\/p>\n<p>\u0412\u044b\u0437\u043e\u0432 <strong>Dispose <\/strong>\u043d\u0435\u00a0\u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0437\u00a0\u043b\u043e\u043a\u043e\u0432 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <strong>atomic_bool<\/strong>. <\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043c\u0435\u043d\u044f \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0431\u0443\u0444\u0435\u0440\u044b \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e\u0434\u0445\u043e\u0434 \u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u00a0\u043d\u0438\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"cs\">public void Process(Booffer buf) {     \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 null \u0438 \u0447\u0442\u043e IsDisposed == false if (E.IsInvalid(buf))       return;       \/\/\u0411\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0443 using var ds = buf.DisposeProtectedScope; if (ds.IsFailed())       return; \/\/\u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0445\u0438\u0442\u0440\u044b\u0439 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0443\u0441\u043f\u0435\u043b      \/\/\u0412\u0441\u0451. \u0422\u0435\u043f\u0435\u0440\u044c buf \u0442\u043e\u0447\u043d\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442, \u043f\u043e\u043a\u0430 ds \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442     \/\/\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e buf \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432     \/\/\u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442 Dispose, \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445, \u043a\u0442\u043e     \/\/\u0437\u0430\u0445\u0432\u0430\u0442\u0438\u043b DisposeProtectedScope  } <\/code><\/pre>\n<p>\u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043d \u043d\u0435\u00a0\u043f\u043e\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab\u043f\u0430\u0434\u0430\u0436\u0438 \u044f \u0441\u00a0\u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u00bb, \u043a\u0430\u043a\u00a0\u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 <strong>DisposeProtectedScope<\/strong>, \u0430\u00a0\u043f\u043e\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab<em>\u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u0430, \u0433\u0443\u043b\u044f\u0439 \u0412\u0430\u0441\u044f<\/em>\u00bb. \u0412\u043e\u0442 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0443\u00a0\u043d\u0430\u0441 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u043e\u0432\u044b\u0439 \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d:<\/p>\n<pre><code class=\"cs\">public static Booffer Shared { get; }<\/code><\/pre>\n<p>\u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c? \u0410 \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code class=\"cs\">static SingleToneBoofferClass() {     \/\/\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0431\u0443\u0444\u0435\u0440     Shared = new(ElementCount);          \/\/\u041b\u043e\u0447\u0438\u043c     var token = Shared.LockDispose();          \/\/\u0422\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0443\u043c\u043d\u0438\u043a     \/\/\u0432\u044b\u0437\u043e\u0432\u0435\u0442 Shared.Dispose()     \/\/\u0442\u043e \u043e\u0433\u0440\u0435\u0431\u0451\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 E.rr, \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430     \/\/\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442          \/\/\u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e:     \/\/Shared.UnlockDispose(token);          \/\/\u0435\u0441\u043b\u0438 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430     \/\/\u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u0434\u043e \u0435\u0434\u0438\u043d\u043e\u0433\u043e     \/\/\u043d\u0435 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442\u0441\u044f } <\/code><\/pre>\n<p>\u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cs\">\/\/Undisposable \u0441\u0430\u043c \u043b\u043e\u0447\u0438\u0442 Dispose \u0438 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0442\u043e\u043a\u0435\u043d static readonly Undisposable&lt;Booffer&gt; shared = new(new(ElementCount)); public static Booffer Shared =&gt; shared.Value; \/\/\u041f\u043e\u043a\u0430 Undisposable \u043d\u0435 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d, \u0435\u0433\u043e Value \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u0434\u0438\u0441\u043f\u043e\u0441\u0438\u0442\u044c - \u0431\u0443\u0434\u0435\u0442 E.rr<\/code><\/pre>\n<p>\u0438\u043b\u0438, \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u043c\u043e\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u043a\u043b\u044e\u0447:<\/p>\n<pre><code class=\"cs\">public static Booffer Shared { get; } =  new(ElementCount).LockDisposeAndReturnThis(out _); \/\/out _ \u044f\u0432\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043b\u044e\u0447 \/\/\u0412\u0441\u0451, \u0437\u0430\u043b\u043e\u0447\u0438\u043b\u0438\u0441\u044c \u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438 \u043a\u043b\u044e\u0447. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043d\u0435\u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0435<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u043e\u0439 \u0441\u043e\u0444\u0442 \u043d\u0430\u0444\u0430\u0440\u0448\u0438\u0440\u043e\u0432\u0430\u043d \u0441\u00a0\u043d\u043e\u0433 \u0434\u043e\u00a0\u0433\u043e\u043b\u043e\u0432\u044b \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438 \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, LUT\u2011\u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0438 <strong>unsafe <\/strong>\u043a\u043e\u0434\u043e\u043c \u0432\u0435\u0437\u0434\u0435 \u0433\u0434\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0436\u0438\u0437\u043d\u044c \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0430\u0433\u043e\u0432. <\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0417\u043d\u0430\u0447\u0438\u043c\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u0438: Mist4, Mist8, Mist32 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>Mist<\/strong>\u00a0\u2014 Memory List, \u0430\u00a0\u043d\u0435\u00a0\u0442\u0443\u043c\u0430\u043d.<\/p>\n<p>C\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 <strong>Vist<\/strong>, \u043d\u043e\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f\u00a0\u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u0412\u00a0\u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442\u00a0<strong>Vist<\/strong>, <strong>\u0447\u0438\u0441\u043b\u043e \u0432\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442<\/strong> \u043d\u0435\u00a0\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0445 \u043d\u0430\u00a0\u0441\u0442\u0435\u043a\u0435, \u0430\u00a0<strong>\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0445 \u043d\u0430\u00a0\u0441\u0442\u0435\u043a\u0435 <u>\u043f\u043e\u0434\u00a0<\/u>\u044d\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b<\/strong>.<\/p>\n<p>\u0412\u0441\u0451, \u0447\u0442\u043e\u00a0\u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u00a0\u043a\u0443\u0447\u0435. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0438\u043f\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u00a0\u0441\u0442\u0435\u043a\u0435 \u043d\u0435\u00a0O(Log2(N)), \u043a\u0430\u043a\u00a0\u0443\u00a0<strong>Vist<\/strong>, \u0430\u00a0<strong>O(1)\u00a0<\/strong>\u2014 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e. \u041d\u0443 \u0438 \u043f\u043b\u044e\u0441 \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u0438\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u043e \u0441\u043e\u0436\u0440\u0451\u0442 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438 \u0441 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u0443\u0448\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u0441\u0442\u0435\u043a.<\/p>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f, \u0432\u00a0\u043a\u0443\u0447\u0443 \u0435\u0433\u043e \u0437\u0430\u043f\u0438\u0445\u043d\u0443\u0442\u044c \u043c\u043e\u0436\u043d\u043e\u00a0\u2014 \u043e\u043d\u00a0\u0436\u0435 <strong>struct<\/strong>, \u0430\u00a0\u043d\u0435 <strong>ref struct<\/strong>.<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0411\u044b\u0441\u0442\u0440\u043e\u0447\u0438\u0441\u0442\u044b\u0439 ConcurrentBagSlim&lt;T&gt;<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041e\u0434\u043d\u0430\u0436\u0434\u044b \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 <strong>ConcurrentBag&lt;T&gt;<\/strong> \u0437\u0430\u0434\u043e\u043b\u0431\u0430\u043b \u043c\u0435\u043d\u044f \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u043c\u0438 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f\u043c\u0438. \u041e\u043d \u043a\u0430\u043a \u0431\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0443\u043b\u044b \u0434\u043b\u044f\u00a0\u0438\u0437\u0431\u0435\u0433\u0430\u043d\u0438\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439, \u043d\u043e\u00a0\u043e\u043d \u0441\u0430\u043c \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442 \u0438 \u044d\u0442\u0438\u043c \u0440\u0443\u0438\u043d\u0438\u0442 \u0432\u0441\u044e \u0438\u0434\u0435\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u043e\u0434\u0438\u043b \u0441\u0432\u043e\u0439, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u043b.<\/p>\n<p><strong>ConcurrentBagSlim&lt;T&gt;<\/strong>\u00a0\u2014 \u0430\u043d\u0430\u043b\u043e\u0433 <strong>ConcurrentBag&lt;T&gt; <\/strong>\u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0443\u0447\u0448\u0435. \u0415\u0441\u0442\u044c \u043c\u0438\u043d\u0443\u0441\u00a0\u2014 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0415\u0433\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u0438\u043b\u0438\u0442\u044c \u0434\u043e\u00a0\u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0441\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 4-\u0431\u0430\u0439\u0442\u043d\u044b\u043c\u0438 \u0438 8-\u0431\u0430\u0439\u0442\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0438 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438, \u043d\u043e\u00a0\u043c\u043d\u0435 \u0438 \u0442\u0430\u043a \u043d\u043e\u0440\u043c. <\/p>\n<p>\u0421\u043c\u044b\u0441\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0439. \u0412\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0431\u044f \u044d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u0434\u0435\u0440\u0436\u0438\u0442 \u0433\u043e\u043b\u043e\u0432\u0443 \u0438 \u0442\u0435\u043b\u043e:<\/p>\n<pre><code class=\"cs\">readonly T[] fast_head = new T[FastItemCount]; \/\/\u0413\u043e\u043b\u043e\u0432\u0430 ConcurrentBag&lt;T&gt;? slow_body_bag = null; \/\/\u0422\u0435\u043b\u043e<\/code><\/pre>\n<p>\u043f\u043e\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u043d\u0430 \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0433\u043e\u043b\u043e\u0432\u043e\u0439\u2011\u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c, \u043d\u043e\u00a0\u0435\u0441\u043b\u0438 \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f\u00a0\u2014 \u0442\u0435\u043b\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0436\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <strong>ConcurrentBag<\/strong>. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a: <\/p>\n<pre><code class=\"cs\"> public void Add(T value)  {      \/\/\u0434\u043b\u044f null \u0442\u0443\u043f\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a      if (object.ReferenceEquals(value, null))          while (true)          {              var nic = nullCount;              if (nic &lt; int.MaxValue)              {                  if (Interlocked.CompareExchange(ref nic, nic + 1, nic) == nic)                      return;              }              else              {                  E.rr = $\"\u0412 {nameof(ConcurrentBagSlim&lt;T&gt;)} \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 null\";                  return;              }          }       \/\/\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443      for (int i = 0; i &lt; FastItemCount; i++)          if (object.ReferenceEquals(fast_head[i], null))              if (Interlocked.CompareExchange(ref fast_head[i], value, null) == null)                  return;       \/\/\u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c - \u043d\u0430\u0434\u043e \u043a\u043b\u0430\u0441\u0442\u044c \u0432 \u0442\u0435\u043b\u043e      if (slow_body_bag == null) \/\/\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0435\u0433\u043e \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e          Interlocked.CompareExchange(ref slow_body_bag, new ConcurrentBag&lt;T&gt;(), null);            \/\/\u041f\u0438\u0445\u0430\u0435\u043c \u0432 \u0442\u0435\u043b\u043e      slow_body_bag.Add(value);  } <\/code><\/pre>\n<p>\u0434\u043b\u044f\u00a0<strong>null <\/strong>\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u043d\u0430 \u0442\u0443\u043f\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a. \u0412\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043e\u043d\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0418 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0432\u00a0\u0433\u043e\u043b\u043e\u0432\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043d\u0435\u00a0\u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043e\u043d\u0430 \u043f\u0438\u0445\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u00a0\u0442\u0435\u043b\u043e, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u0435\u0433\u043e \u043f\u0440\u0438\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cs\">public bool TryTake(out T result) {     \/\/\u0415\u0441\u043b\u0438 null-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c - \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043f\u043b\u044e\u0451\u043c\u0441\u044f \u0438\u043c\u0438     if (nullCount &gt; 0)         while (true)         {             var nilCount = nullCount;             if (nilCount &gt; 0)             {                 if (Interlocked.CompareExchange(ref nullCount, nilCount - 1, nilCount) == nilCount)                 {                     result = null;                     return true;                 }             }             else                 break;         }      \/\/\u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435     \/\/\u0432\u0434\u0440\u0443\u0433 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435     for (int i = 0; i &lt; FastItemCount; i++)     {         if (!ReferenceEquals(fast_head[i], null))         {             var prevous = Interlocked.Exchange(ref fast_head[i], null);             if (prevous != null)             {                 result = prevous;                 return true;             }         }     }      \/\/\u0415\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 - \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0442\u0435\u043b\u043e     if (slow_body_bag != null) \/\/\u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c - \u043f\u0438\u043d\u0430\u0435\u043c \u0435\u0433\u043e         return slow_body_bag.TryTake(out result);      \/\/\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u0438     result = null;     return false; } <\/code><\/pre>\n<p>\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 ConcurrentBag \u043f\u043e\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043d\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d, \u043c\u044b \u0432\u043e\u043b\u044c\u043d\u044b \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0432\u044b\u043f\u043b\u0451\u0432\u044b\u0432\u0430\u0435\u043c null\u044b, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c. \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u0443\u2011\u0433\u043e\u043b\u043e\u0432\u0435, \u0438 \u0435\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0442\u0430\u043c \u0447\u0442\u043e\u2011\u043d\u0438\u0431\u0443\u0434\u044c, \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u044d\u0442\u043e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u0432\u044b\u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c. \u0415\u0441\u043b\u0438 \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f\u00a0\u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c\u00a0\u043b\u0438 \u0442\u0435\u043b\u043e\u00a0\u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <strong>ConcurrentBag<\/strong>. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c, \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0434\u043e\u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u00a0\u043d\u0435\u0433\u043e.<\/p>\n<p>\u0412\u00a0\u0438\u0442\u043e\u0433\u0435 \u0432\u00a0\u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u0440\u0435\u0434\u043a\u0430 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u0432\u00a0ConcurrentBag. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u0440\u0438\u00a0\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0422\u043e\u0447\u043d\u044b\u0439 BeautifulTimer<\/summary>\n<div class=\"spoiler__content\">\n<p>\u042d\u0442\u043e <strong>\u0432\u044b\u0441\u043e\u043a\u043e\u0442\u043e\u0447\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440<\/strong>, \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u00a0\u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u041e\u0421. \u0414\u0435\u043b\u043e \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e\u2011\u0442\u043e \u0440\u043e\u0432\u043d\u043e 30\u00a0\u2014 100\u00a0\u0440\u0430\u0437 \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0442\u043e \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432 \u0438\u043b\u0438 <strong>while (true) Sleep(10)<\/strong> \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p><strong>\u041c\u043d\u043e\u0433\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u0430\u044f <\/strong>\u041e\u0421 \u043a\u0432\u0430\u043d\u0442\u0443\u0435\u0442\u2011\u0434\u0440\u043e\u0431\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430\u00a0\u043a\u0443\u0441\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0432\u043d\u044b <strong>15\u00a0\u043c\u0441<\/strong> (\u0445\u043e\u0442\u044f \u0432\u0441\u0451 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f, \u0430\u00a0\u0433\u0434\u0435\u2011\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f). \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432\u043e\u043c\u0443 \u0442\u0430\u0439\u043c\u0435\u0440\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b 1\u00a0\u043c\u0441, \u043e\u043d \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0433\u0434\u0435\u2011\u0442\u043e 60\u00a0\u0440\u0430\u0437 \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u0430\u00a0\u0431\u044b\u043b\u0430 <strong><u>\u041e\u0427\u0415\u041d\u042c <\/u><\/strong>\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u044f \u043e\u0431\u0445\u043e\u0434\u0438\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0432\u00a0\u043b\u043e\u0431, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u044f \u043f\u043e\u0434\u00a0\u044d\u0442\u043e \u0446\u0435\u043b\u043e\u0435 1\u00a0\u044f\u0434\u0440\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u043f\u0443\u0441\u043a\u0430\u044f \u0432\u00a0\u043d\u0451\u043c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u0415\u0441\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u00a0\u041e\u0421 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u043b\u0438\u00a0Windows RTX (\u044d\u0442\u043e \u043d\u0435\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0438\u043d\u0433, \u0430\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 Windows \u0432\u00a0\u041e\u0421 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438), \u043d\u043e\u00a0\u0442\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u00a0\u0431\u044b\u043b\u043e.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 <strong><u>\u041e\u0427\u0415\u041d\u042c<\/u> <\/strong>\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u0430, \u0430\u00a0\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0451 \u043f\u043e\u2011\u0434\u0440\u0443\u0433\u043e\u043c\u0443. \u041d\u0430\u043c \u0442\u0443\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0434\u043b\u044f <strong>30\u201360\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043e\u043a \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443<\/strong>. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0432\u00a0Windows \u0435\u0441\u0442\u044c \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u044b\u00a0\u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432\u00a0\u0441\u043e\u0444\u0442\u0435 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0432\u0438\u0434\u0435\u043e \u0438 \u0437\u0432\u0443\u043a\u043e\u043c. \u0426\u0435\u043f\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u00a0\u043d\u0438\u043c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u043e\u0442 \u044d\u0442\u0438\u0445 \u0440\u0435\u0431\u044f\u0442:<\/p>\n<pre><code class=\"cs\"> [DllImport(\"winmm.dll\", SetLastError = true)]  private static extern uint timeBeginPeriod(uint uPeriod);   [DllImport(\"winmm.dll\", SetLastError = true)]  private static extern uint timeEndPeriod(uint uPeriod);   [DllImport(\"winmm.dll\", SetLastError = true)]  private static extern uint timeGetTime();   [DllImport(\"winmm.dll\")]  private static extern int timeSetEvent(      int msDelay, int msResolution, TimerEventHandler handler, IntPtr userCtx, int eventType);   [DllImport(\"winmm.dll\")]  private static extern int timeKillEvent(int timerId);<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, <strong>BeautifulTimer<\/strong>\u00a0\u2014 \u044d\u0442\u043e \u0434\u0432\u0443\u0441\u043b\u043e\u0439\u043d\u0430\u044f \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u0432\u043e\u0442 \u044d\u0442\u0438\u043c \u0432\u0441\u0435\u043c. \u041f\u0440\u0438\u0447\u0451\u043c, \u043e\u043d \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 <strong>API<\/strong>, \u043d\u043e\u00a0\u0438 \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430\u00a0\u0441\u0431\u043e\u044f\u043c\u0438, \u0438 \u043f\u0440\u0438\u00a0\u0442\u0430\u043a\u043e\u0432\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0442\u0430\u0439\u043c\u0435\u0440. \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u0438 \u0441\u0431\u043e\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u044f \u0442\u0430\u043a \u0438 \u043d\u0435\u00a0\u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u0435\u0433\u043e <strong>\u0441\u0430\u043c\u043e\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u043c\u0441\u044f<\/strong>.<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043d\u0443\u0442\u043e\u0432\u0441\u043a\u0438\u0439 \u0442\u0443\u0440\u0431\u043e\u0445\u044d\u0448\u0435\u0440 64<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>\u041d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c <\/strong>\u043c\u0435\u0442\u043e\u0434\u0430 GetHashCode <strong>\u0431\u0435\u0441\u0438\u0442 <\/strong>\u0438 \u0447\u0430\u0441\u0442\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u043d\u0438\u0448\u0442\u044f\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043f\u043e\u00a0\u0441\u0438\u0434\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u043e\u2011\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u0437\u0430\u043f\u0438\u043b\u0438\u043b \u0441\u0432\u043e\u0439 \u0445\u044d\u0448\u0435\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u00a0<strong>\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u041a\u043d\u0443\u0442\u0430<\/strong> \u043d\u0430 64\u00a0\u0431\u0438\u0442\u0430\u0445.<\/p>\n<p>\u0425\u044d\u0448\u0435\u0440 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u00a0\u2014 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0430\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u042d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437\u00a0\u043f\u0435\u0440\u0432\u044b\u0445 \u0448\u0442\u0443\u043a \u0432\u00a0\u044d\u0442\u043e\u043c \u0441\u043e\u0444\u0442\u0435, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043e\u043d\u0430\u00a0\u0431\u044b\u043b\u0430 \u0435\u0449\u0451 \u043d\u0430 .NET 6<\/p>\n<pre><code class=\"cs\">var hasher = new KnythHasher(); hasher.Append(value); var hash64unsigned = hasher.GetHashCodeULong(); var hash32signed = hasher.GetHashCode();<\/code><\/pre>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0442\u0438\u043f\u0430\u043c (\u0447\u0438\u0441\u043b\u0430 + bool + \u0441\u0442\u0440\u043e\u043a\u0438 + DateTime\/TimeSpan) \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <strong>GetKnythHashCode <\/strong>\u0438 <strong>GetKnythHashCodeULong<\/strong>. \u0414\u043b\u044f\u00a0\u0441\u0442\u0440\u043e\u043a \u043e\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u044f\u043a\u0438\u0435 <strong>Span&lt;T&gt;<\/strong> \u0438 \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u0441\u0451. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u0442\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u043a\u00a0\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0443\u0440\u043e\u0432\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0445\u044d\u0448: <\/p>\n<pre><code class=\"cs\">[MethodImpl(MethodImplOptions.AggressiveInlining)] public unsafe void Append(void* beginPointer, long byteCount)    {        if (!AllowUnalignedMemory)        {            if ((nint)beginPointer % sizeof(ulong) != 0)                throw new Exception(\"\u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d \u043f\u043e 8 \u0431\u0430\u0439\u0442\u0430\u043c\");        }        if (!inited)        {            hashValue = initValue;            inited = true;        }        if (beginPointer == (void*)0 || byteCount &lt;= 0)            return;         unchecked        {            \/\/\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0438\u0437\u043e \u0432\u0441\u0435\u0445 \u0441\u0438\u043b \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c strict aliasing            \/\/\u0438 \u0442\u0443\u0433\u043e \u043d\u0430\u0434\u0440\u0443\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434 \u0435\u0433\u043e \u0442\u0440\u0443\u043f\u043e\u043c            if (byteCount &lt;= 8)            {                ulong value = 0;                if (byteCount == 4) \/\/4 \u0431\u0430\u0439\u0442\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e                {                    *(int*)&amp;value = *(int*)beginPointer;                    hashValue += value;                    hashValue *= iterationValue;                    return;                 }                else if (byteCount == 1) \/\/1 \u0431\u0430\u0439\u0442 \u0447\u0443\u0442\u044c \u0440\u0435\u0436\u0435                {                    *(byte*)&amp;value = *(byte*)beginPointer;                    hashValue += value;                    hashValue *= iterationValue;                    return;                }                else if (byteCount == 8) \/\/8 \u0431\u0430\u0439\u0442 \u0435\u0449\u0435 \u0440\u0435\u0436\u0435                {                    *(long*)&amp;value = *(long*)beginPointer;                    hashValue += value;                    hashValue *= iterationValue;                    return;                }                else if (byteCount == 2) \/\/2 \u0431\u0430\u0439\u0442\u0430 \u0441\u043e\u0432\u0441\u0435\u043c \u0440\u0435\u0434\u043a\u043e\u0441\u0442\u044c                {                    *(short*)&amp;value = *(short*)beginPointer;                    hashValue += value;                    hashValue *= iterationValue;                    return;                }                \/\/\u0437\u0434\u0435\u0441\u044c \u041d\u0415 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c return            }            else if (byteCount == 16) \/\/decimal\u044b, int4, float4            {                ulong value = 0;                *(long*)&amp;value = *(long*)beginPointer;                hashValue += value;                hashValue *= iterationValue;                *(long*)&amp;value = *((long*)beginPointer + 1);                hashValue += value;                hashValue *= iterationValue;                 return;            }            else if (byteCount == 32) \/\/decimal2, long4 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435            {                ulong value = 0;                value = *(ulong*)beginPointer;                hashValue += value;                hashValue *= iterationValue;                 value = *((ulong*)beginPointer + 1);                hashValue += value;                hashValue *= iterationValue;                 value = *((ulong*)beginPointer + 2);                hashValue += value;                hashValue *= iterationValue;                 value = *((ulong*)beginPointer + 3);                hashValue += value;                hashValue *= iterationValue;                 return;            }              byte* begin = (byte*)beginPointer;            byte* end = begin + byteCount;              long ulongCount = byteCount \/ sizeof(ulong);            long ulongCount4 = ulongCount &amp; ~0b11;             ulong* ulongPtr = (ulong*)begin;            ulong* ulongEnd = ulongPtr + ulongCount;            ulong* ulongEnd4 = ulongPtr + ulongCount4;            while (ulongPtr &lt; ulongEnd4)            {                hashValue += *ulongPtr++; hashValue *= iterationValue;                hashValue += *ulongPtr++; hashValue *= iterationValue;                hashValue += *ulongPtr++; hashValue *= iterationValue;                hashValue += *ulongPtr++; hashValue *= iterationValue;            }            while (ulongPtr &lt; ulongEnd)            {                hashValue += *ulongPtr++;                hashValue *= iterationValue;            }             byte* ptr = (byte*)ulongPtr;            while (ptr &lt; end)            {                hashValue += *ptr++;                hashValue *= iterationValue;            }        }    } <\/code><\/pre>\n<p>\u041d\u0443 \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u043c\u0443 \u0434\u0430\u044e\u0442 \u043a\u0443\u0441\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438, \u0438 \u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u0436\u0443\u0451\u0442 \u0435\u0451 \u043a\u0430\u043a\u00a0\u043d\u0430\u0431\u043e\u0440 ulong\u043e\u0432, \u0435\u043c\u0443 \u0431\u0435\u0437\u00a0\u0440\u0430\u0437\u043d\u0438\u0446\u044b, \u0447\u0442\u043e\u00a0\u0442\u0430\u043c \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u043e\u0441\u044c (\u0434\u0430, \u0432\u00a0\u0441\u0442\u043e\u0440\u043e\u043d\u0443 <strong>SIMD <\/strong>\u044f \u0442\u043e\u0436\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u043b, \u043d\u043e\u00a0\u043f\u043e\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442). \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0445\u0432\u043e\u0441\u0442\u0438\u043a\u00a0\u2014 \u0437\u0430\u043a\u0443\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u043c. <\/p>\n<p>\u0418 \u0434\u0430\u00a0\u2014 \u0442\u0430\u043a \u043f\u043b\u043e\u0445\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a \u043d\u0435\u00a0\u043f\u0438\u0448\u0438\u0442\u0435.<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0423\u0441\u0430\u0442\u044b\u0439 Funchacho<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u0434\u0445\u043e\u0434 \u00ab<em>\u0440\u0435\u0436\u0435 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0439 @ \u0436\u0440\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0435\u0437\u0435\u0442<\/em>\u00bb \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432\u00a0\u043b\u0435\u043d\u0438\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445. \u0418\u0445 \u0435\u0441\u0442\u044c \u0443\u00a0\u043c\u0435\u043d\u044f\u00a0\u2014 \u044d\u0442\u043e <strong>Funchacho&lt;A, R&gt;<\/strong>. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043e\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cs\"> static readonly Funchacho&lt;(int x, int y), int&gt; mul =&gt;       new Funchacho&lt;(int x, int y), int&gt;(       args =&gt;       {           return args.x * args.y;       }); <\/code><\/pre>\n<p>\u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c<\/p>\n<pre><code class=\"cs\">int pixelCount = mul[(width, height)]; \/\/\u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0441\u043a\u043e\u0431\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \/\/\u0435\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c 100500 \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0435\u0439 Funchacho \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u043e\u0435 \/\/\u0447\u0438\u0441\u043b\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0442.\u043a. MyType&lt;params T...&gt; \u0432 C# \u0435\u0449\u0451 \u043d\u0435 \u0437\u0430\u0432\u0435\u0437\u043b\u0438 \/\/\u0438 \u0434\u0430, \u044f \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0435\u043b \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438, \u043d\u043e\u00a0\u044d\u0442\u043e \u043d\u0435\u00a0C++ :) \/\/\u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435 \u043a\u0440\u0443\u0442\u043e, \u043d\u043e \u043a\u0440\u0443\u0442\u043e: int pixelCount = mul(width, height); \/\/\u0438 \u043d\u0438\u043a\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u0435\u0442...<\/code><\/pre>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435\u0442. \u0410\u00a0\u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u044b\u00a0\u2014 \u0435\u0441\u0442\u044c:<\/p>\n<pre><code class=\"cs\"> static Funchacho&lt;(int x, int y), Booffer2D&lt;Color&gt;&gt; buffers =              new(                 static size =&gt;                  new Booffer2D&lt;Color&gt;(size).LockDisposeAndReturnThis(out _)             );<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e 60 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0431\u0435\u0440\u0451\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440:<\/p>\n<pre><code class=\"cs\">var buf = buffers[(width, height)]; \/\/\u0447\u0442\u043e-\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c<\/code><\/pre>\n<p>\u0438 \u0434\u043b\u044f\u00a0\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e 1\u00a0\u0440\u0430\u0437. <strong>Funchacho\u00a0<\/strong>\u2014 \u0448\u0442\u0443\u043a\u0430 \u0443\u043c\u043d\u0430\u044f. \u041e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0440\u0430\u0437\u0443, \u0430\u00a0\u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u00a0\u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0438. \u0422\u043e \u0435\u0441\u0442\u044c, \u0435\u0441\u043b\u0438 \u0437\u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 N \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0442\u0430\u043a\u0438\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0443\u0436\u0435\u00a0\u0431\u044b\u043b\u0438\u00a0\u2014 \u0437\u043d\u0430\u0447\u0438\u0442, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u00a0\u043a\u0435\u0448. \u0415\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u043c. \u0415\u0449\u0451 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u00a0\u043a\u0435\u0448\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0438 \u0438\u043b\u0438\u00a0\u0441\u0442\u0430\u043b\u0438 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c\u0438, \u0438 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u0440\u0438\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0415\u0449\u0451 \u0435\u0441\u0442\u044c <strong>FunchachoHead\u00a0<\/strong>\u2014 \u044d\u0442\u043e \u0442\u043e\u0442\u00a0\u0436\u0435 Funchacho, \u043d\u043e\u00a0\u043d\u0435\u00a0\u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u0430\u043c \u043c\u0435\u0442\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041a\u044d\u0448 \u043a\u043e\u0440\u043e\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f. \u041a\u0435\u0448\u0438\u0440\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u00a0\u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0438, \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cs\"> static readonly FunchachoHead&lt;(int x, int y), int&gt; mulHead = new();  public static int Mul(int X, int Y) {    if (mulHead.TryGetCachedValue((X, Y), out var result))        return result;     result = X * Y;     mulHead.AddIfNeedCache((X, Y), result);     return result; }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d <strong>Funchacho<\/strong> \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0435\u00a0ConcurrentDictionary, \u0430 <strong>RWDictionary<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432\u00a0\u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 <strong>RWLockDictionaryWrapper<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0446\u0435\u043f\u043b\u044f\u0435\u0442 \u043d\u0430\u00a0\u043b\u044e\u0431\u043e\u0439 <strong>IDictionary <\/strong>\u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 <strong>ReaderWriterLockSlim<\/strong>.<\/p>\n<p><strong>RWDictionary <\/strong>\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 <strong>RWLockDictionaryWrapper <\/strong>\u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u0430\u043c\u043e\u0433\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e <strong>Dictionary<\/strong>.<\/p>\n<p><strong>RWDictionary <\/strong>\u0442\u0443\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e <strong>ConcurrentDictionary <\/strong>\u0437\u0430\u0442\u043e\u0447\u0435\u043d \u043f\u043e\u0434\u00a0\u0438 \u0447\u0430\u0441\u0442\u044b\u0435 \u0447\u0442\u0435\u043d\u0438\u044f, \u0438 \u0447\u0430\u0441\u0442\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0430\u00a0\u0443\u00a0\u043d\u0430\u0441 \u0442\u0443\u0442, \u0432\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u043e\u0434\u043d\u0438 \u0447\u0442\u0435\u043d\u0438\u044f. \u0418 <strong>RWDictionary <\/strong>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u00a0\u0442\u0430\u043a\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0432\u043e\u0440\u043d\u0435\u0435, \u0447\u0435\u043c \u0442\u044f\u0436\u0451\u043b\u044b\u0439 <strong>ConcurrentDictionary<\/strong>.<\/p>\n<p>\u0421\u0430\u043c\u0438 <strong>RWLockDictionaryWrapper\/RWDictionary <\/strong>\u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u0438\u0445 \u043d\u0435\u00a0\u0431\u0443\u0434\u0443.<\/p>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"%D0%9F%D0%B5%D0%BF%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B\" id=\"\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b<\/h2>\n<p>\u0423\u00a0\u043d\u0430\u0441 \u0442\u0443\u0442 \u0432\u0441\u044f\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u0441\u00a0\u0446\u0432\u0435\u0442\u0430\u043c\u0438 \u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c\u0438. \u0412\u00a0\u0442\u0430\u043a\u0438\u0445 \u0434\u0435\u043b\u0430\u0445 \u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u00a0\u0441\u00a0\u0447\u0438\u0441\u043b\u0430\u043c\u0438, \u0430\u00a0\u0441 <strong>2D<\/strong>, <strong>3D<\/strong> \u0438 <strong>4D \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438<\/strong>. \u0423\u043c\u043d\u043e\u0436\u0438\u043b \u0432\u0435\u043a\u0442\u043e\u0440, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0439 \u0446\u0432\u0435\u0442\u00a0\u2014 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b \u044f\u0440\u043a\u043e\u0441\u0442\u044c, \u043f\u043e\u0434\u0435\u043b\u0438\u043b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0430\u00a0\u0440\u0430\u0437\u043c\u0435\u0440\u00a0\u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0438 \u0432\u0441\u0451 \u0432\u00a0\u0442\u0430\u043a\u043e\u043c \u0434\u0443\u0445\u0435.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8f4\/7fd\/36f\/8f47fd36f2b5173d9513cc25a6958888.webp\" width=\"1560\" height=\"720\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/8f4\/7fd\/36f\/8f47fd36f2b5173d9513cc25a6958888.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8f4\/7fd\/36f\/8f47fd36f2b5173d9513cc25a6958888.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u00a0\u044f\u0437\u044b\u043a\u0435 C# \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 <strong>Vector4\u00a0<\/strong>\u0438 \u043f\u0440\u043e\u0447\u0438\u0435 <strong>Vector256&lt;float&gt;<\/strong>. \u0418\u041c\u0425\u041e\u00a0\u2014 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u0435 \u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b\u0435. \u0421\u0435\u0440\u044c\u0451\u0437\u043d\u043e, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432\u0438\u0434\u0430<\/p>\n<pre><code class=\"cs\">Vector&lt;int&gt; a = new Vector&lt;int&gt;(5); a *= new Vector&lt;int&gt;(2);<\/code><\/pre>\n<p>\u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043d\u0435\u00a0\u043e\u0447\u0435\u043d\u044c. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0447\u0442\u043e\u2011\u0442\u043e \u0430\u2011\u043b\u044f HLSL:<\/p>\n<pre><code class=\"cs\">int4 a = 5; a *= 2;<\/code><\/pre>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432\u00a0\u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430, \u044f \u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 C#\u00a0\u2014 \u0432\u043e\u0442 \u044d\u0442\u0438\u043c \u0432\u0441\u0435\u043c <strong>bool<\/strong>, <strong>int<\/strong>, <strong>float<\/strong>, <strong>decimal <\/strong>\u0438 \u043f\u0440\u043e\u0447\u0438\u043c\u00a0\u2014 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0438. \u0414\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0435, \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u0435 \u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u0435. \u0415\u0449\u0435 \u0434\u043e\u00a0\u043a\u0443\u0447\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0438\u043f\u044b \u0441\u00a0<strong>\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439<\/strong> \u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u044b <strong>\u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0443\u0433\u043b\u043e\u0432<\/strong>, \u0438 \u0438\u043c \u0432\u0441\u0435\u043c \u0442\u043e\u0436\u0435 \u0440\u0430\u0437\u0434\u0430\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u043f\u043e\u0434\u0432\u0438\u0434\u044b. \u0418 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. <span class=\"habrahidden\">\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 <\/span><\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a57\/d8a\/4ed\/a57d8a4edebb87a0f1d1e9d3332f4fdb.webp\" alt=\"\" title=\"\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a57\/d8a\/4ed\/a57d8a4edebb87a0f1d1e9d3332f4fdb.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a57\/d8a\/4ed\/a57d8a4edebb87a0f1d1e9d3332f4fdb.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c, \u043f\u043e\u043c\u0438\u043c\u043e <strong>decimal<\/strong>, <strong>float<\/strong>, <strong>int <\/strong>\u0438 \u043f\u0440\u043e\u0447\u0438\u0445, \u0432\u00a0<strong>C#<\/strong> \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f <strong>decimal3<\/strong>, <strong>float2<\/strong>, <strong>int4<\/strong>, <strong>Half3<\/strong>, <strong>degreeds2<\/strong>, <strong>radians3<\/strong>, <strong>turns <\/strong>\u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0448\u0442\u0443\u043a\u0438. \u0418 \u0432\u0438\u0448\u0435\u043d\u043a\u043e\u0439 \u043d\u0430\u00a0\u0442\u043e\u0440\u0442\u00a0\u2014 \u0435\u0449\u0451 \u0434\u0432\u0430 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u0430. \u0412\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 <strong>C# <\/strong>\u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u043b\u0435\u0437\u0442\u044c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b \u0442\u0438\u043f\u044b \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/490\/63d\/888\/49063d88837b366926e2e935c4702afb.webp\" width=\"1560\" height=\"1201\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/490\/63d\/888\/49063d88837b366926e2e935c4702afb.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/490\/63d\/888\/49063d88837b366926e2e935c4702afb.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u00a0\u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0443\u0432\u0435\u0441\u0438\u0441\u0442\u0430\u044f <strong>\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/strong> \u0441\u00a0\u043a\u0443\u0447\u0435\u0439 \u0444\u0438\u0447 \u0438 \u043f\u043b\u044e\u0448\u0435\u043a<span class=\"habrahidden\"> \u0438 \u0431\u0430\u0433\u043e\u0432 :3<\/span>. \u0412\u0435\u0441\u044c \u0441\u043e\u0444\u0442 \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0443\u0436\u0435 \u043d\u0430\u00a0\u043d\u0435\u0439, \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430, \u0447\u0442\u043e\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u044b \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0449\u0435. \u041f\u043e\u00a0\u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043c\u043d\u0435, \u0438, \u043f\u043e\u00a0\u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0444\u0442\u0435.<\/p>\n<p>\u042d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439, \u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0GUI.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d95\/b3a\/c38\/d95b3ac38e858de94246ea10facae80f.png\" width=\"778\" height=\"323\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d95\/b3a\/c38\/d95b3ac38e858de94246ea10facae80f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d95\/b3a\/c38\/d95b3ac38e858de94246ea10facae80f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0435\u0441\u0442\u044c \u043a\u0443\u0447\u0430 \u0444\u043b\u0430\u0433\u043e\u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0430\u00a0\u0432\u0441\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0436\u0438\u0437\u043d\u0438, \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u043d\u0435\u00a0\u043f\u043e\u0434 <strong>.NET<\/strong>, \u0430\u00a0\u043f\u043e\u0434\u00a0\u0441\u0442\u0430\u0440\u044b\u0439 <strong>.NET Framework<\/strong>. \u041c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u00a0<strong>GDI<\/strong>, <strong>WinForms<\/strong>, <strong>WPF <\/strong>\u0438 <strong>SharpDX\u00a0<\/strong>\u2014 \u0442\u043e\u0433\u0434\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u044f\u0432\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u0446\u0432\u0435\u0442\u0430, \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438\u0437\u00a0\u044d\u0442\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/p>\n<pre><code class=\"cs\">var brushGDI = new SolidBrush(byte4.Gold);  float4 myColor = float4.Green * 0.2f; var brushWPF = new SolidColorBrush(myColor);  int2 sz = (200,50); btnApply.Size = sz;<\/code><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0438\u0441\u0442\u0438 \u0438\u0437\u00a0\u0446\u0432\u0435\u0442\u043e\u0432 <strong>float4\u00a0<\/strong>\u0438 <strong>byte4<\/strong>, \u0430\u00a0\u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <strong>int2\u00a0<\/strong>\u0438 <strong>double2\u00a0<\/strong>\u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432. <strong>SIMD <\/strong>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0436\u0435\u00a0\u2014 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0444\u043b\u0430\u0433\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0431\u0435\u0441\u0442\u0438\u0430\u0440\u0438\u0439:<\/p>\n<ul>\n<li>\n<p>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 <strong>Pepe \u0434\u043b\u044f\u00a0\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438<\/strong>\u00a0\u2014 \u043c\u0435\u0441\u0442\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 System.Math<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 <strong>PepeHelper \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0438\u043f\u0430\u0445<\/strong>, \u0447\u0442\u043e\u0431\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e <strong>float4 <\/strong>\u044d\u0442\u043e <strong>float<\/strong> \u0438 <strong>4<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>\u0423\u0433\u043b\u044b<\/strong>: <strong>turns<\/strong>, <strong>radians \u0438 degreeds<\/strong>. \u041d\u0435\u044f\u0432\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u0432 \u0434\u0440\u0443\u0433\u0430<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cs\">degreeds angle = 90; var value = Pepe.Sin(angle); \/\/\u0433\u0440\u0430\u0434\u0443\u0441\u044b \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u044f\u0442\u0441\u044f \u0432 \u0440\u0430\u0434\u0438\u0430\u043d\u044b angle = Pepe.Arcsin(value); \/\/\u0441\u043d\u043e\u0432\u0430 \u0432\u0441\u0451 \u043e\u043a angle += Pepe.Pi; \/\/\u0412\u0441\u0451 \u043e\u043a<\/code><\/pre>\n<p>\u041c\u0435\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 <strong>Pepe.Pi_Pi_Pi<\/strong> \u0442\u0443\u0442 \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f <strong>radians3<\/strong>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<ul>\n<li>\n<p><strong>\u0427\u0438\u0441\u043b\u0430 \u0441\u00a0\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439<\/strong>: <strong>fxdsbyte, fxdshort, fxdint, fxdlong<\/strong>. \u0412\u00a0\u0447\u0430\u0441\u0442\u0438 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0438\u0445\u0430\u0442\u044c \u0432\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0431\u0435\u0437\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u043d\u043e\u0439. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043c\u0435\u043d\u044f \u043f\u0440\u0435\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438 \u043c\u044b\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0441\u0447\u0451\u0442\u044b \u043d\u0430 <strong>fxdint, <\/strong>\u0430\u00a0\u043d\u0435 <strong>float, <\/strong>\u043d\u043e\u00a0\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041f\u043e\u043a\u0430 \u0447\u0442\u043e\u00a0\u0438\u0437\u00a0\u043d\u0438\u0445 \u0432\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u043b <strong>fxdlong<\/strong>, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0440\u0435\u0437\u0430\u043b \u0437\u0430\u00a0\u043d\u0435\u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0442\u0438\u043f\u044b<\/strong>. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435: \u0434\u043b\u044f <strong>bool <\/strong>\u0438 \u0432\u0441\u0435\u0445 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 C#, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f\u00a0\u043d\u043e\u0432\u043e\u0438\u0441\u043f\u0435\u0447\u0451\u043d\u043d\u044b\u0445, \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0438: <strong>int4<\/strong>, <strong>float2<\/strong>, <strong>decimal4<\/strong>, <strong>bool3<\/strong>, <strong>sbyte4<\/strong>, <strong>nuint3<\/strong>, <strong>degreeds4<\/strong>, <strong>fxdsbyte2, Half3\u00a0<\/strong>\u0438\u00a0\u0442.\u00a0\u0434. <\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435: \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043a\u0430\u043b\u044f\u0440\u0430\u043c\u0438 \u0438 \u043a\u043e\u0440\u0442\u0435\u0436\u0430\u043c\u0438; \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435, \u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0434\u043b\u044f\u00a0\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.<\/p>\n<pre><code class=\"cs\">float3 a = (1, 2, 3); double3 b = (0.1, 0.2, 0.3); ulong3 c = 3; \/\/(3, 3, 3); double3 d = (1.23, -0.23, 1000);  double3 result = (a + b) * c \/ d;<\/code><\/pre>\n<pre><code class=\"cs\">float4 a = 1.0f; \/\/\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0432\u0435\u043a\u0442\u043e\u0440 1 1 1 1 float3 b = (2, 5f, 2); \/\/\u041c\u043e\u0436\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u043c nint2 numbers = (1, 2); \/\/\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 nint \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u0446\u0438\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 var (alpha, beta) = numbers; \/\/\u0414\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f b.zxy = a.rgg * 5.0f; \/\/\u0421\u0432\u0438\u0437\u043b\u0438\u043d\u0433 - \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f bool4 horosho = (true, false, true, true); a *= horosho; \/\/true \u043a\u0430\u043a 1, false \u043a\u0430\u043a 0 decimal2 money = (123m, 456m) + (decimal2)b.rr;  degreeds4 angle_deg = 90; radians4 angle = angle_deg; a \/= angle.\u043a\u0437\u0437\u0437; \/\/xyzw rgba \u043a\u0437\u0441\u0430  float4 someValue = 5; someValue.xyz = (1, 2, 3); \/\/\u044d\u0442\u043e \u0432\u0441\u0451 someValue.rgb = (1, 2, 3); \/\/\u043e\u0434\u043d\u043e \u0438 someValue.\u043a\u0437\u0441 = (1, 2, 3); \/\/\u0442\u043e \u0436\u0435  a.gba.xy.BitsAsLong = 0; \/\/BitsAs\u2026 - \u0448\u0442\u0443\u043a\u0430 \u0434\u043b\u044f \u0448\u0430\u043b\u043e\u0432\u043b\u0438\u0432\u044b\u0445 \u0445\u0430\u043a\u043e\u0432  int2[] cords = [(0, 0), (0, 1), (-1, 2)]; \/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442  int2.InterlockedIncrement(ref cords[1]); \/\/\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438  float2 p = float2.InterlockedExchange(ref a.rg, 5); bool4 bb = bool4.InterlockedExchange(ref horosho, true);<\/code><\/pre>\n<p><strong>\u0421\u0432\u0438\u0437\u043b\u0438\u043d\u0433\u00a0<\/strong>\u2014 \u0448\u0442\u0443\u043a\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f. \u0414\u043b\u044f\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432: <strong>xyzw<\/strong>, <strong>zzwy<\/strong>, <strong>xzzw <\/strong>\u0438 \u043f\u0440\u043e\u0447\u0438\u0435. \u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438, \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u00a0\u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044f\u043c\u0438, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438.<\/p>\n<ul>\n<li>\n<p><strong>\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 pepector <\/strong>\u0445\u0440\u0430\u043d\u0438\u0442 \u043b\u044e\u0431\u043e\u0435 \u0438\u0437\u00a0\u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e<strong>. <\/strong>\u041c\u0435\u0441\u0442\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 <strong>dynamic<\/strong>, \u043d\u043e\u00a0\u043d\u0435\u00a0\u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0439, \u0430\u00a0\u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0439\u00a0\u2014 \u043d\u0438\u043a\u0430\u043a\u0438\u0445\u00a0\u043b\u0438\u0448\u043d\u0438\u0445 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439. \u0410\u0432\u0442\u043e\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0441\u00a0\u043b\u044e\u0431\u044b\u043c \u0441\u043a\u0430\u043b\u044f\u0440\u043e\u043c \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c, \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u0438\u043f \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0423\u043c\u0435\u0435\u0442 \u0443\u043c\u043d\u043e \u0441\u0436\u0438\u043c\u0430\u0442\u044c\u0441\u044f, \u0443\u043c\u0435\u0435\u0442 \u0432\u00a0\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0438 \u0435\u0449\u0451 \u043a\u0443\u0447\u0443 \u0432\u0441\u0435\u0433\u043e. <\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cs\">pepector a = 1, b = (3, 5, 6, 2); \/\/\u0441\u043a\u0430\u043b\u044f\u0440 \u0438 4D, \u043e\u0431\u0430 \u0438\u043d\u0442\u044b b *= 0.3; \/\/b \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b\u0441\u044f \u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u043b \u0442\u0438\u043f \u043d\u0430 double a += b; \/\/a \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u043e\u0436\u0435 \u0441\u0442\u0430\u043b double4 a.xzyy = 15m; \/\/\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b decimal4 var (va, lu, es) = a.bgrr; \/\/\u0434\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f a.ElementType = pepector_type.t_float; \/\/\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0439\u0441\u044f \/\/\u0422\u0435\u043f\u0435\u0440\u044c \u043a\u0443\u043a\u043e\u0436\u0438\u043c \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0438\u0441\u0435\u043b b.Compact(); \/\/\u041f\u043e\u0441\u043b\u0435 \u043a\u0443\u043a\u043e\u0436\u0438\u043d\u0433\u0430 b \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u0430\u043b byte. \u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043d\u0451\u043c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0442\u0438\u043f\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 - byte<\/code><\/pre>\n<p>\u041f\u0440\u0438\u00a0\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 pepector \u0445\u0438\u0442\u0440\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0421\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 <strong>int <\/strong>\u0438 <strong>double<\/strong>, \u043d\u043e, \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0442\u0438\u043f\u044b.<\/p>\n<pre><code class=\"cs\">\/\/\u042d\u0442\u043e \u0432\u0441\u0451 int\u044b pepector numbers1 = (1, 2, 3, 4, 5, 6, 7, 8, 10); \/\/\u0410 \u044d\u0442\u043e \u0443\u0436\u0435 short\u044b pepector numbers2 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20); \/\/\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0443\u043c\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043b \u0441\u0432\u043e\u0439 \u0442\u0438\u043f - short \/\/\u0442\u0430\u043a \u043a\u0430\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0434\u043b\u044f int \/\/\u043d\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u044d\u0442\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \/\/\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c short<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c01\/611\/179\/c01611179ef71ecb951519ce89081284.webp\" alt=\"\u0412\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e.\" title=\"\u0412\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e.\" width=\"3913\" height=\"990\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c01\/611\/179\/c01611179ef71ecb951519ce89081284.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c01\/611\/179\/c01611179ef71ecb951519ce89081284.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e.<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 <strong>64-\u0431\u0430\u0439\u0442\u0430<\/strong> \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u0438\u043f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438 \u0434\u043e\u00a0\u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043b\u044e\u0431\u044b\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 <strong>16-\u0431\u0430\u0439\u0442\u043d\u044b\u0445<\/strong> <strong>decimal<\/strong>. \u041c\u043e\u0436\u043d\u043e \u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u00a0\u2014 \u043d\u043e\u00a0\u0442\u0443\u0442 \u0443\u0436 \u0432\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442\u00a0\u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430. bool\u043e\u0432 \u0432\u043b\u0435\u0437\u0435\u0442 \u043c\u043d\u043e\u0433\u043e, \u0430\u00a0\u0432\u043e\u0442 long\u043e\u0432\u00a0\u2014 \u043d\u0435\u00a0\u043e\u0447\u0435\u043d\u044c.<\/p>\n<ul>\n<li>\n<p><strong>universal&lt;T&gt;<\/strong>\u00a0\u2014 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u0430\u043a\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0412\u043c\u0435\u0441\u0442\u043e T \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0451 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0438 \u043f\u0440\u043e\u0447\u0435\u0435, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0434\u043b\u044f\u00a0\u0447\u0435\u0433\u043e \u0438 \u0441\u043e\u0437\u0434\u0430\u043d. \u041d\u0430\u043f\u0438\u0441\u0430\u043d \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 JIT\u2011\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432\u00a0Release \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u00a0\u0431\u044b\u043b\u0430 \u0431\u043b\u0438\u0437\u043a\u0430 \u043a\u00a0\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>PepeHelper<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u2011\u0431\u0434, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431\u043e\u00a0\u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u0430\u0445 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0443\u0442\u043e\u0447\u043d\u044f\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b: <strong>IsInteger<\/strong>, <strong>IsVector<\/strong>, <strong>RealElementType<\/strong> \u0438 <strong>ElementType<\/strong>, <strong>Name<\/strong>, <strong>AliasKeyword<\/strong>, <strong>RadiansInOneUnit<\/strong>, <strong>ElementSizeInBytes<\/strong>, <strong>CanBeNegative<\/strong> \u0438 \u0435\u0449\u0451 \u043a\u0443\u0447\u0430 \u0432\u0441\u0435\u0433\u043e.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b\u00a0<\/strong>\u2014 \u043e\u0434\u043d\u0430\u00a0\u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432\u00a0\u044d\u0442\u043e\u043c \u0441\u043e\u0444\u0442\u0435, \u0434\u0435\u043b\u0430\u043b \u044f \u0435\u0451 \u0435\u0449\u0451 \u0432 <strong>2022\u00a0<\/strong>\u0433\u043e\u0434\u0443. \u0414\u043b\u044f\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u043e\u0434\u0438\u0442\u044c \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u00a0\u043d\u0443\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 <strong>StringBuilder<\/strong>. \u0420\u043e\u0441\u043b\u0438\u043d \u043c\u043d\u0435 \u043d\u0435\u00a0\u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0441\u0432\u043e\u0435\u0439 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e\u0441\u0442\u044c\u044e, \u0430\u00a0\u04224\u00a0\u2014 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435\u043c \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438, \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e. \u0424\u0438\u0448\u043a\u043e\u0439 \u043c\u043e\u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u0442\u0430\u043b\u043e \u0442\u043e, \u0447\u0442\u043e\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u0434\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0445\u043e\u0436\u0430 \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0441\u0430\u043c\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430\u00a0\u2014 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0443. \u0422\u0435\u043c \u043d\u0435\u00a0\u043c\u0435\u043d\u0435\u0435, \u043a\u043e\u0434 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0442\u043e\u0436\u0435 \u043d\u0435\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439\u00a0\u2014 \u0431\u043e\u043b\u0435\u0435 15\u043a \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c\u00a0\u2014 \u0435\u0441\u043b\u0438\u00a0\u0431\u044b \u0432\u00a0<strong>C#\u00a0<\/strong>\u0431\u044b\u043b\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0438\/\u0438\u043b\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u0442\u043e \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u043e\u0442 \u0432\u0441\u0451\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0441\u0438\u043b\u044c\u043d\u043e \u0445\u0443\u0434\u0435\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u0441\u0442\u0440\u043e\u043a. \u0414\u0430\u00a0\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0431 \u043a\u043e\u0440\u0442\u0435\u0436\u0438, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0438\u0437\u00a0\u0442\u0438\u043f\u043e\u0432, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443 (\u0442\u0438\u043f\u0430 <strong>(float x, float y) my_var<\/strong>), \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438\u00a0\u0431\u044b \u044d\u0442\u0443 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443\u00a0\u2014\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0441\u0438\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u0447\u0435. \u0418\u043b\u0438\u00a0\u043b\u0443\u0447\u0448\u0435\u00a0\u2014 <em>\u0435\u0441\u043b\u0438 \u043a\u043e\u0440\u0442\u0435\u0436 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434 \u0438\u043b\u0438\u00a0\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 X, \u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u0438\u043b\u0438\u00a0\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 X \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u043a\u043e\u0440\u0442\u0435\u0436\u0443<\/em>. \u0423\u0442\u0438\u043d\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438<\/summary>\n<div class=\"spoiler__content\">\n<h2>\u0412\u0435\u043a\u0442\u043e\u0440\u044b<\/h2>\n<ul>\n<li>\n<p>\u0412\u0435\u043a\u0442\u043e\u0440\u044b \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b. \u0418\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0435\u00a0\u0431\u044b\u043b\u0438\u00a0\u0431\u044b\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043d\u043e\u00a0\u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u00a0\u2014 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043a\u0430\u043a\u00a0\u0442\u0430\u043d\u0446\u0435\u0432\u0430\u0442\u044c \u0432\u00a0\u0445\u043e\u043a\u043a\u0435\u0439\u043d\u043e\u0439 \u0437\u0430\u0449\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0435\u0441\u043b\u0438 \u0443\u043f\u0430\u0434\u0451\u0448\u044c \u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u0441\u0438\u043d\u044f\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u0412\u0435\u043a\u0442\u043e\u0440\u044b \u0435\u0441\u0442\u044c \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f\u00a0\u0432\u0441\u0435\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f <strong>nint<\/strong>, <strong>nuint<\/strong>, <strong>decimal<\/strong>, <strong>sbyte<\/strong>, <strong>ushort<\/strong> \u0438 \u043f\u0440\u043e\u0447\u0438\u0445, \u043d\u043e\u00a0\u0438 \u0434\u043b\u044f\u00a0Half<\/p>\n<\/li>\n<li>\n<p>\u0412\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f <strong>nint<\/strong>, <strong>nuint <\/strong>\u0438 <strong>Half <\/strong>\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u0446\u0438\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/p>\n<\/li>\n<li>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 <strong>xyzw rgba \u043a\u0437\u0441\u0430 <\/strong>\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044f\u043c\u0438, \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <strong>FieldOffset<\/strong><\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 \u0438 \u0434\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u0442\u044c:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cs\">fxdlong3 values = (1, 2, 3); var (x, y, z) = values;<\/code><\/pre>\n<ul>\n<li>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440\u044b<strong>[]<\/strong>. \u0418\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440\u044b \u0431\u0435\u0440\u0443\u0442 \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0430\u00a0\u0434\u043b\u0438\u043d\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0437\u0430\u00a0\u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u00a0\u2014 \u0432\u0435\u043a\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u00a0\u043a\u0440\u0443\u0433\u0443<\/p>\n<\/li>\n<li>\n<p>\u0421\u0432\u0438\u0437\u043b\u0438\u043d\u0433 (\u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f xyzw<strong> <\/strong>rgba \u043a\u0437\u0441\u0430 \u0432\u00a0\u043b\u044e\u0431\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435) \u0441\u0434\u0435\u043b\u0430\u043d \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0441\u00a0\u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u0438\u0437\u00a0\u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439 \u0431\u0443\u043a\u0432 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f. \u0412\u00a0\u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u0433\u0434\u0435 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0443\u043a\u0432 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u00a0\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u00a0\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u0430\u00a0\u043f\u043e\u043b\u0435 \u0441\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u0430 \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cs\">[\u0414(\u0418), \u0427(\u042c)] public byte2 yx { get =&gt; (y, x); set =&gt; (y, x) = value; } [\u0414(\u0418), \u0427(\u042c)] public byte2 yy { get =&gt; (y, y); set =&gt; (y, y) = value; } [\u0414(\u0418), \u0427(\u042c)] [FieldOffset(sizeof(byte) * 1)] public byte2 yz;<\/code><\/pre>\n<p>\u0443\u00a0\u0447\u0435\u0442\u044b\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u0442\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 1000.<\/p>\n<ul>\n<li>\n<p>\u0411\u044b\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0435\u0441\u043b\u0438 \u0432\u00a0VisualStudio \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u0443, \u0442\u043e \u043e\u043d\u0430 \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0434\u0430\u0442\u044c \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u0441\u0451, \u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0435\u044e\u0437\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e, \u0441\u0432\u0438\u0437\u043b\u0438\u043d\u0433\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0438\u0437\u00a0\u043f\u043e\u043a\u0430\u0437\u0430 \u0432\u00a0\u0434\u0435\u0431\u0430\u0433\u0435 \u0438 \u0432\u00a0\u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442\u0435 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <strong>[DebuggerBrowsable]<\/strong> \u0438 <strong>[EditorBrowsable]<\/strong>. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u0438 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043d\u0435\u00a0\u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0438\u0441\u044c \u043a\u0443\u0447\u0443 \u0440\u0430\u0437 \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0435, \u044f \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b \u0438\u0445 \u0434\u043e\u00a0\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u043a\u0432\u044b:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cs\">using \u0414 = System.Diagnostics.DebuggerBrowsableAttribute; using \u0427 = System.ComponentModel.EditorBrowsableAttribute;<\/code><\/pre>\n<p>\u0438<\/p>\n<pre><code class=\"cs\">const DebuggerBrowsableState \u0418 = DebuggerBrowsableState.Never; const EditorBrowsableState \u042c = EditorBrowsableState.Never;<\/code><\/pre>\n<p>\u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043c\u0435\u0441\u0442\u043e<\/p>\n<pre><code class=\"cs\">[DebuggerBrowsable(DebuggerBrowsableState.Never), EditorBrowsableState(EditorBrowsableState.Never)]<\/code><\/pre>\n<p>\u044f \u043f\u0438\u0448\u0443 \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u0438 \u044f\u0441\u043d\u043e:<\/p>\n<pre><code class=\"cs\">[\u0414(\u0418), \u0427(\u042c)]<\/code><\/pre>\n<ul>\n<li>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b WithX, WithY, WithZ, WithW \u0438\u043c\u0435\u044e\u0442 \u0442\u0430\u043a\u0436\u0435 \u0442\u043e\u043b\u0441\u0442\u044b\u0435 \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0438, \u0442\u0438\u043f\u0430 WithXYZ \u0438 WithZW<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u0435 \u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0438\u043c\u0435\u044e\u0442 \u043f\u043b\u044e\u0448\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0446\u0432\u0435\u0442\u043e\u043c. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0432 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u043a\u0443\u0447\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432, \u0442\u0438\u043f\u0430 <strong>byte4.Aquamarine<\/strong> \u0438 \u0432\u0441\u0451 \u0442\u0430\u043a\u043e\u0435. \u041e\u043d\u0438 \u0435\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u0443 <strong>decimal3 <\/strong>\u0438 <strong>fxdlong4<\/strong>. \u0422\u0430\u043a\u0436\u0435 \u0442\u0430\u043a\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0446\u0432\u0435\u0442\u0430 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <strong>float3.ColorByRusName[\u201c\u0411\u0435\u0436\u0435\u0432\u044b\u0439\u201d]<\/strong> \u0438\u043b\u0438 <strong>double4.RusNameByColor(myColor).<\/strong> \u041f\u043e\u0438\u0441\u043a, \u043a\u0441\u0442\u0430\u0442\u0438, \u043d\u0435\u0447\u0443\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443.\u00a0 \u0415\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <strong>float3.RGBtoHSL<\/strong> \u0438\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <strong>Hue { get; set; }<\/strong> \u0443 <strong>double3 <\/strong>(\u043d\u0430 \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0442\u0435\u043d\u0438\u0435\/\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 rgb \u0441 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0435\u0439)<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430\u00a0\u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0435\u043f\u0435\u043c\u0430\u0442\u0438\u043a\u0438, \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0432\u043e\u0438\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0442\u0438\u043f\u0430 <strong>byte4.Avg<\/strong>, <strong>decimal2.DistancePow2<\/strong>, <strong>long4.DotProduct<\/strong> \u0438\u043b\u0438 <strong>int3.Div<\/strong>. \u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u043d\u0435\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 <strong>Increment<\/strong>\/<strong>Decrement <\/strong>\u0432\u00a0\u043d\u0430\u043b\u0438\u0447\u0438\u0438<\/p>\n<\/li>\n<li>\n<p>\u0423\u00a0\u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <strong>Length<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043c\u0435\u043d\u044f\u0442\u044c, \u0440\u0430\u0431\u043e\u0442\u0430\u044f \u0441\u00a0\u0434\u043b\u0438\u043d\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u043d\u0435\u00a0\u043c\u0435\u043d\u044f\u044f \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0423 <strong>2D \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/strong> \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <strong>Angle <\/strong>\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043c\u0435\u043d\u044f\u0442\u044c, \u0440\u0430\u0431\u043e\u0442\u0430\u044f \u0441\u00a0\u0443\u0433\u043b\u043e\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0435\u00a0\u043c\u0435\u043d\u044f\u044f \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0443. <strong>Angle <\/strong>\u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f <strong>radians<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>int2\u00a0<\/strong>\u043d\u0435\u044f\u0432\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u00a0\u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u00a0<strong>Size<\/strong>, \u0438 \u0432\u00a0<strong>Point<\/strong>. <strong>float2\u00a0<\/strong>\u043d\u0435\u044f\u0432\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u00a0\u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u00a0<strong>SizeF <\/strong>\u0438 <strong>PointF<\/strong>. \u0414\u0430, \u043c\u043d\u0435 \u043d\u0435\u00a0\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u00a0<strong>Point <\/strong>\u0438 <strong>Size<\/strong>. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u0441\u0435 <strong>2D <\/strong>\u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043f\u043e\u043b\u044f <strong>WidthOrLeft <\/strong>\u0438 <strong>HeightOrTop<\/strong>, \u043a\u0430\u043a\u00a0\u0431\u044b \u043d\u0430\u043c\u0435\u043a\u0430\u044f, \u0447\u0442\u043e\u00a0\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 <strong>x<\/strong> \u0438 <strong>y<\/strong> \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a\u00a0\u0443\u0433\u043e\u0434\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u0435\u0441\u0442\u044c \u0443 <strong>double2\u00a0<\/strong>\u0434\u043b\u044f <strong>Point <\/strong>\u0438 <strong>Size <\/strong>\u0438\u0437 <strong>WPF<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>double4<\/strong>, <strong>double3<\/strong>, <strong>byte4<\/strong>, <strong>byte3<\/strong>, <strong>float4<\/strong>, float3\u00a0\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441\u00a0\u0446\u0432\u0435\u0442\u0430\u043c\u0438 \u0438\u0437\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u0412\u00a0<strong>WPF <\/strong>\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c double4\u00a0\u043a\u0430\u043a\u00a0<strong>Thickness <\/strong>\u0438 <strong>CornerRadius<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0423 <strong>3D <\/strong>\u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c <strong>Angle<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f <strong>radians3\u00a0<\/strong>\u2014 \u0442\u0440\u0438 \u0443\u0433\u043b\u0430 \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437\u00a0\u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/li>\n<li>\n<p><strong>4D <\/strong>\u0432\u0435\u043a\u0442\u043e\u0440\u044b \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043a\u0430\u043a\u00a0\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. <strong>x <\/strong>\u0438 <strong>y <\/strong>\u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u00a0\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u0443\u0433\u043b\u0430, <strong>z<\/strong> \u0438 <strong>w<\/strong> \u0437\u0430\u00a0\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u043f\u0440\u0430\u0432\u043e\u0433\u043e. \u0423\u00a0\u044d\u0442\u0438\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <strong>Size<\/strong>, <strong>Width <\/strong>\u0438 <strong>Height<\/strong>, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u044f <strong>Left<\/strong>, <strong>Top<\/strong>, <strong>Right <\/strong>\u0438 <strong>Bottom<\/strong>. \u041f\u0440\u0438\u0447\u0451\u043c \u044d\u0442\u0438 \u043f\u043e\u043b\u044f \u0435\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u0443\u00a0<strong>bool4\u00a0<\/strong>\u2014 \u043d\u0443 \u0430\u00a0\u0432\u0434\u0440\u0443\u0433 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u0430\u043a\u043e\u0439\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0430\u043c\u043a\u0438 \u0443\u00a0\u043a\u043d\u043e\u043f\u043a\u0438 \u0432\u00a0<strong>bool4<\/strong>. \u0422\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0434\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 (\u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e get, \u043d\u043e set) \u0434\u043b\u044f\u00a0\u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432\u044b\u0445 \u0434\u0435\u043b. \u0418\u043c\u0435\u043d\u0430 \u0443\u00a0\u043d\u0438\u0445 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u00a0<strong>Rect&#8230;<\/strong>: <\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cs\">RectLeftHalf RectRightHalf RectTopHalf RectBottomHalf RectPush RectIsIntersect RectIsContainsPoint RectPushProportional RectPlaceProportionalInside RectPlaceProportionalOutside RectCenter RectGetMovedInside RectFlipHorisontal<\/code><\/pre>\n<p>\u0438 \u043f\u0440\u043e\u0447\u0438\u0435. \u0418 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c \u0434\u043b\u044f\u00a0\u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <strong>int4<\/strong>, <strong>double4\u00a0<\/strong>\u0438 <strong>float4<\/strong>. \u0414\u0430\u2011\u0434\u0430, \u044f \u0442\u043e\u0436\u0435 \u0440\u0430\u0434\u0443\u044e\u0441\u044c, \u0447\u0442\u043e\u00a0\u0432 <strong>C#<\/strong> \u043d\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043e\u0442\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440. \u041c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0432\u043f\u0438\u0445\u043d\u0443\u0442\u044c \u0438\u0445 \u0432\u00a0\u0441\u0443\u0431\u043f\u043e\u043b\u0435, \u0447\u0442\u043e\u0431\u044b\u00a0\u0431\u044b\u043b\u043e \u043d\u0435 <strong>value.RectCenter<\/strong>, \u0430 <strong>place.Rect.Center<\/strong>, \u043d\u043e\u00a0\u043f\u043e\u043a\u0430 \u0440\u0443\u043a\u0438 \u043d\u0435\u00a0\u0434\u043e\u0448\u043b\u0438. \u041d\u0435\u0442, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u0431\u043e\u043a\u0441\u0438\u043d\u0433.<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u00a0\u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u0441\u0435\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0445\u0438\u0442\u0440\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0434\u043b\u044f\u00a0<strong>\u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439<\/strong>. \u0415\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043d\u0430\u0431\u043e\u0440 char \u043f\u043e\u00a0\u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u043c\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e. \u041f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u0447\u043a\u043e\u0439 \u0441\u00a0\u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u043d\u043e\u00a0\u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e, \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u0439. \u0414\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u043b\u0430\u044e\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u0438 \u043f\u043e\u00a0\u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430\u043c (<strong>__vectorHelperClass.cs<\/strong>). \u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, <strong>IFormatProvider <\/strong>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0442\u043e\u0436\u0435 \u0445\u0438\u0442\u0440\u044b\u0439 \u0438 \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439. \u0418 \u0434\u0430\u00a0\u2014 \u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u00a0<strong>char<\/strong>. <strong>NumberFormat <\/strong>\u0438 <strong>IFormatProvider <\/strong>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>\u0423\u00a0\u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f\u00a0\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\/\u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430<\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u0442\u043e\u0434 <strong>Equals <\/strong>\u0443\u00a0\u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0436\u0440\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0442\u0438\u043f\u043e\u0432 \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u00a0\u043d\u0438\u043c\u0438. \u0422\u043e \u0435\u0441\u0442\u044c <strong>float3\u00a0<\/strong>\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u00a0<strong>sbyte3<\/strong>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u0436\u0435 \u0443\u00a0\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043d\u0438\u043c\u0438 \u043a\u0430\u043a\u00a0\u0441\u00a0\u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>FindIndex<\/strong>, <strong>Contains <\/strong>\u0438\u043b\u0438\u00a0<strong>ContainsIntersections<\/strong>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0438 \u043e\u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f, \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0431\u0435\u0437\u00a0\u0446\u0438\u043a\u043b\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u0445\u044d\u0448\u0430 \u0432\u00a0\u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432\u00a0\u2014 <strong>GetHashCodeULong<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 <strong>64-\u0431\u0438\u0442\u043d\u044b\u0439 \u0445\u044d\u0448 \u043f\u043e\u00a0\u041a\u043d\u0443\u0442\u0443<\/strong>. \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u00a0\u0431\u044b\u0441\u0442\u0440\u043e, <strong>\u0431\u0435\u0437\u00a0\u0446\u0438\u043a\u043b\u043e\u0432<\/strong>: \u043e\u0434\u0438\u043d \u0438\u043b\u0438\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0431\u0435\u0440\u0451\u0442 64\u00a0\u0431\u0438\u0442\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 + \u0445\u0432\u043e\u0441\u0442. \u0410 <strong>GetHashCode <\/strong>\u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e <strong>GetHashCodeULong().GetHashCode()<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435 \u0442\u0438\u043f\u044b, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0435 <strong>32\u00a0<\/strong>\u0438\u043b\u0438 <strong>64\u00a0<\/strong>\u0431\u0438\u0442\u0430, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 <strong>\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/strong>. \u041a\u00a0\u043d\u0438\u043c \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>bool4<\/strong>, <strong>float2<\/strong>, <strong>Half4<\/strong>, <strong>byte4<\/strong>, <strong>int2<\/strong>, <strong>sbyte4\u00a0<\/strong>\u0438 \u043f\u0440\u043e\u0447\u0438\u0435. \u041c\u043e\u0436\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0446\u0432\u0435\u0442 \u0432\u00a0<strong>Half4\u00a0<\/strong>\u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u0435\u0433\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c <strong>Half4.InterlockedExchange<\/strong>, \u0438\u043b\u0438\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043a\u0430\u043a\u043e\u0439\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u0430\u0434\u0430\u0447\u0435 <strong>ushort4.InterlockedIncrement<\/strong> <\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <strong>IsInDiapasone<\/strong>, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0438\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 <strong>\u0432\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445<\/strong>. \u042d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 <strong>bool <\/strong>\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438. \u0422\u043e \u0435\u0441\u0442\u044c <strong>int3.IsInDiapasone(int3\u00a0min, int3\u00a0max);<\/strong> \u0432\u0435\u0440\u043d\u0451\u0442 <strong>bool3<\/strong>, \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f\u00a0\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435. \u0415\u0441\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043f\u0443\u0442\u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u00a0\u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435 (\u0447\u0435\u0440\u0435\u0437<strong> ref\/out string)<\/strong> \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0447\u043b\u0435\u043d\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0432\u044b\u0448\u043b\u0438 \u0438\u0437\u00a0\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0438 \u043a\u0430\u043a, \u0442\u0438\u043f\u0430: \u00ab<em>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 x \u0440\u0430\u0432\u043d\u043e 3, \u0430\u00a0\u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 6; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 y \u0440\u0430\u0432\u043d\u043e 10\u00a0\u0430\u00a0\u044d\u0442\u043e \u043c\u0435\u043d\u044c\u0448\u0435 111<\/em>\u00bb\u00a0\u2014 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u042f\u0432\u043d\u0430\u044f\/\u043d\u0435\u044f\u0432\u043d\u0430\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c:  <\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043a\u0430\u043b\u044f\u0440\u0430\u043c\u0438: \u0435\u0441\u043b\u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u044b \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u044f\u0432\u043d\u043e, \u0442\u043e \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u044f\u0432\u043d\u043e, \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>int2\u00a0<\/strong>\u0432\u043e\u00a0<strong>float2\u00a0<\/strong>\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u044f\u0432\u043d\u043e, \u0430\u00a0\u0432\u043e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong>float2\u00a0<\/strong>\u0432\u00a0<strong>int2\u00a0<\/strong>\u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u044f\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430: <strong>int2\u00a0a = (int2)float2_value;<\/strong><\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043f\u043e\u00a0\u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u0443: <strong>\u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0442\u0435\u0440\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/strong>. \u0422\u043e \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0432\u00a0\u043c\u0435\u043d\u044c\u0448\u0443\u044e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u044f\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, ulong4\u00a0\u0432\u00a0ulong3\u00a0\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u0410\u00a0\u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c\u00a0\u2014 \u043f\u043e\u0442\u0435\u0440\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0435\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u044f\u0432\u043d\u043e. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e (\u043d\u0443 \u0438\u043b\u0438\u00a0false \u0434\u043b\u044f\u00a0\u0431\u0443\u043b\u043e\u0432)<\/p>\n<ul>\n<li>\n<p><em>\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u00a0\u2014 \u043d\u0435\u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u0430 \u0432\u00a0\u0432\u0435\u043a\u0442\u043e\u0440. \u0412\u00a0\u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0432\u043d\u044b \u0441\u043a\u0430\u043b\u044f\u0440\u0443, \u043a\u0430\u043a\u043e\u0433\u043e\u00a0\u0431\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u043d \u043d\u0438\u00a0\u0431\u044b\u043b<\/em><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>pepector<\/h2>\n<ul>\n<li>\n<p><strong>pepector\u00a0<\/strong>\u2014 \u043e\u0434\u0438\u043d \u0438\u0437\u00a0\u0441\u0430\u043c\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u0430\u043c\u0438 \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f <strong>nint<\/strong>, \u0443\u0433\u043b\u044b \u0438 <strong>bool<\/strong>\u044b <\/p>\n<\/li>\n<li>\n<p>\u0422\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0435\u043d\u0443\u043c\u043e\u0432\u0441\u043a\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c <strong>ElementType<\/strong>. \u0415\u0441\u043b\u0438 \u0435\u0433\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c, \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u0441\u043e\u043e\u0442\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0435\u043d\u0443\u043c\u0430 <strong>pepector_type <\/strong>\u0438 \u0442\u0438\u043f\u043e\u0432 <strong>C#<\/strong> \u0432 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cs\">pepector_type  GetPepectorType(this Type t); Type ToType(this pepector_type type);<\/code><\/pre>\n<p>\u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043a\u0443\u0447\u0430 \u0431\u043e\u043d\u0443\u0441\u043d\u043e\u0439 \u043c\u0438\u0448\u0443\u0440\u044b \u0432\u0438\u0434\u0430<\/p>\n<pre><code class=\"cs\">pepector GetMinValue(this pepector_type t); IsAngleUnit(this pepector_type t); IsFloatingPoint(this pepector_type t); IsFixedPoint(this pepector_type t); GetElementSizeInBytes(this pepector_type t);<\/code><\/pre>\n<p>\u0438 \u043f\u0440\u043e\u0447\u0438\u0435. \u041c\u0438\u043d\u0438 <strong>PepeHelper <\/strong>\u043a\u043e\u0440\u043e\u0447\u0435.<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u043b\u0438 <u>\u0437\u0430\u0434\u0430\u0442\u044c <\/u>\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c <strong>Count<\/strong><\/p>\n<\/li>\n<li>\n<p>\u041c\u043d\u043e\u0433\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0438 \u043d\u0430\u0444\u0430\u0440\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438\u0444\u0430\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u0432\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u044f \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0446\u0438\u043a\u043b\u043e\u0432. \u0426\u0438\u043a\u043b\u044b \u0432\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430\u00a0\u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u0445\u00a0\u2014 \u0434\u043b\u044f\u00a0\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cs\">  if (a.ElementType == pepector_type.t_float)   {       float* ptr = (float*)&amp;a;       float* end = ptr + a.Count;       int i = 0;       while (ptr &lt; end)       {           *ptr = Pepe.Round(*ptr, decimalCount.GetAndConvertValueAt&lt;int&gt;(i++));           ptr++;       }    }   else if (a.ElementType == pepector_type.t_double || a.IsAngleUnit)   { \u2026 <\/code><\/pre>\n<ul>\n<li>\n<p>\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0442\u043e\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u0438\u0437\u043b\u0438\u0433\u043e\u0432\u044b\u0435 <strong>xyzw rgba \u043a\u0437\u0441\u0430<\/strong>. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f <strong>pepector<\/strong>. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\/\u0437\u0430\u0434\u0430\u044e\u0442 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0434\u043b\u0438\u043d\u044b \u0438 \u0440\u0430\u0432\u043d\u044b \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e, \u043f\u0435\u0440\u0432\u043e\u0433\u043e, \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430. \u0415\u0441\u043b\u0438 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439, \u0442\u043e \u043f\u0440\u0438\u00a0\u0447\u0442\u0435\u043d\u0438\u0438 \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f 0\u00a0\u0442\u043e\u0433\u043e\u00a0\u0436\u0435 \u0442\u0438\u043f\u0430, \u0447\u0442\u043e\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440, \u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u0438\u043d\u0430 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440<strong>[]<\/strong>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043b\u0435\u0436\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0430<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0435\u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044e, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c <strong>foreach<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0423\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0445\u0430\u043a\u043e\u0432\u044b\u0435 <strong>BitsAs\u2026<\/strong> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0430\u00a0\u0432\u0441\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0438\u043f\u044b<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u043c\u043e\u0436\u043d\u043e \u044e\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u00a0\u0441\u043f\u0438\u0441\u043e\u043a \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <strong>TryAdd&lt;T&gt;<\/strong>, <strong>TryInsert&lt;T&gt;<\/strong>, <strong>TryRemoveAt<\/strong> \u0438 <strong>Clear<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0423\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u0431\u043e\u043b\u0435\u0435 <strong>200\u00a0\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 <\/strong>\u043d\u0430\u00a0\u0432\u0441\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b. \u041d\u043e\u00a0\u0435\u0441\u043b\u0438 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u043d\u0430\u0434\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430\u0434 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c, \u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <strong>pepector.Create&lt;T&gt;<\/strong> \u0438\u043b\u0438\u00a0<strong>TryCreate&lt;T&gt;<\/strong>, \u0430\u00a0\u043d\u0435\u00a0\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u00a0\u2014 \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u0432\u00a0\u043a\u0443\u0447\u0435. <strong>Create\/TryCreate <\/strong>\u043d\u0430\u00a0\u0434\u0435\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0438 \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <strong>TryAdd&lt;T&gt;<\/strong>\u00a0\u2014 \u0430\u00a0\u0432\u043e\u0442 \u0432\u00a0\u043d\u0451\u043c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0443\u0436\u0435 \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043d\u0430\u00a0\u0432\u0441\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0436\u0438\u0437\u043d\u0438  <\/p>\n<\/li>\n<li>\n<p>\u0423 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u043e\u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u044f <strong>AllowExceptions<\/strong><\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <strong>TryCompact<\/strong>. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439. \u0418\u0434\u0435\u044f \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u043c\u044b \u0438\u0449\u0435\u043c \u0442\u0438\u043f\u044b, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0438\u0445\u043d\u0443\u0442\u044c \u0432\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043d\u043e\u00a0\u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0442\u043e, \u0447\u0442\u043e\u00a0\u0432\u00a0\u043d\u0451\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441, \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0442\u0438\u043f\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443, \u0430\u00a0\u043d\u0435\u00a0\u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u0422\u043e \u0435\u0441\u0442\u044c, \u0435\u0441\u043b\u0438 \u0447\u0438\u0441\u043b\u0430 \u0432\u00a0\u043d\u0438\u0445 \u0440\u0430\u0432\u043d\u044b \u0438 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0432\u043d\u043e, \u043e\u043d\u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u044b\u043c\u0438\u00a0\u2014 \u0438 \u0431\u0435\u0437\u00a0\u0440\u0430\u0437\u043d\u0438\u0446\u044b, \u043a\u0430\u043a\u043e\u0433\u043e \u043e\u043d\u0438 \u0442\u0430\u043c \u0442\u0438\u043f\u0430. <strong>bool<\/strong>\u044b \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0437\u0430 <strong>0<\/strong>\u00a0\u0438 <strong>1<\/strong>\u00a0\u043f\u0440\u0438\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441\u00a0\u0447\u0438\u0441\u043b\u0430\u043c\u0438<\/p>\n<ul>\n<li>\n<p>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <strong>==<\/strong>, <strong>!=<\/strong>, <strong>&gt;<\/strong> \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0432\u044b\u0434\u0430\u0451\u0442 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 bool. \u0415\u0441\u043b\u0438 \u0443\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0432\u043d\u044b, \u0442\u043e \u043e\u043d\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u044b\u043c\u0438, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u044f\u00a0\u0431\u044b \u043e\u0434\u0438\u043d \u043d\u0435\u00a0\u0440\u0430\u0432\u0435\u043d\u00a0\u2014 \u043d\u0435\u00a0\u0440\u0430\u0432\u043d\u044b\u043c\u0438. \u0412\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 (\u0431\u043e\u043b\u044c\u0448\u0435\/\u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435) \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043b\u044f\u00a0\u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u043f\u0430\u0440\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <strong>VectorEquals<\/strong>, <strong>VectorLargerThan <\/strong>\u0438 \u043f\u0440\u043e\u0447\u0438\u0435\u00a0\u2014 \u0432\u043e\u0442 \u043e\u043d\u0438 \u0432\u044b\u0434\u0430\u044e\u0442 \u043d\u0435\u00a0<strong>bool<\/strong>, \u0430\u00a0<strong>pepector<\/strong>, \u043d\u0430\u0431\u0438\u0442\u044b\u0439 <strong>bool<\/strong>\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 \u0434\u043b\u044f\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043f\u0430\u0440\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0437\u00a0\u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0434\u0432\u0430 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443, \u0442\u043e \u0443\u00a0\u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u0438\u043d\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u043d\u043e\u043c\u0443, \u0430\u00a0\u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u044b\u043c\u0438 0. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b (4, 0, 0, 0) \u0438 (4, 0) \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u044b\u043c\u0438 <\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443 <strong>+\u00a0\u2014 * \/%<\/strong>, <strong>\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442<\/strong>\/<strong>\u0434\u0435\u043a\u0440\u0435\u043c\u0435\u043d\u0442 ++\u00a0\u2014 &#8212;<\/strong>, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0443\u043d\u0430\u0440\u043d\u044b\u0435 <strong>\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b + <\/strong>\u0438 <strong>\u2014<\/strong>. \u0412\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0435\u0440\u043d\u0443\u043b\u00a0\u0431\u044b C#, \u0435\u0441\u043b\u0438\u00a0\u0431\u044b \u044d\u0442\u043e\u00a0\u0431\u044b\u043b\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0438\u043f\u044b. \u0422\u043e \u0435\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0441 <strong>int <\/strong>\u043f\u0440\u0438\u00a0\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0430 <strong>double <\/strong>\u0434\u0430\u0441\u0442 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0441 <strong>double<\/strong>. \u0415\u0441\u043b\u0438 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b \u0440\u0430\u0437\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b, \u0434\u043b\u0438\u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u00a0\u0434\u043b\u0438\u043d\u043d\u043e\u0433\u043e, \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u044b\u043c\u0438 <strong>0<\/strong>. \u0410\u00a0\u0435\u0449\u0451 \u0435\u0441\u0442\u044c <strong>Round <\/strong>\u0434\u043b\u044f\u00a0\u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f, <strong>SumElements<\/strong>, <strong>Dot<\/strong>, <strong>GetLengthPow2<\/strong>, <strong>GCD<\/strong>, <strong>MLC<\/strong>, <strong>Floor <\/strong>\u0438 \u043f\u0440\u043e\u0447\u0438\u0435. \u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u044d\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u00a0\u043b\u044e\u0431\u044b\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c \u0442\u0438\u043f\u043e\u043c<\/p>\n<\/li>\n<li>\n<p>\u0423\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u0435\u0441\u0442\u044c <strong>IIF\u00a0<\/strong>\u2014 \u0430\u043d\u0430\u043b\u043e\u0433 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <strong>condition ? ifTrue : ifFalse<\/strong><\/p>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u0434\u043e \u0443\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u0441 <strong>bool<\/strong>\u0430\u043c\u0438 \u0438 \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u043b\u044f <strong>true <\/strong>\u0438 <strong>false<\/strong>, \u0438 \u043e\u043d \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0432\u044b\u0431\u0435\u0440\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <strong>IIF <\/strong>\u0443\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u0441\u00a0\u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043e\u043d \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0451, \u0447\u0442\u043e<strong> &gt;= 0.5<\/strong> \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0437\u0430 <strong>true<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <strong>UpgradeCountSmart<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043a\u0430\u043b\u044f\u0440\u044b \u0432\u00a0\u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0430\u00a0\u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0432\u00a0\u0447\u0435\u0442\u044b\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u0435 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u0442\u00a0\u0431\u044b\u043b \u0440\u0430\u0432\u0435\u043d <strong>1.0<\/strong>\u00a0\u0438\u043b\u0438 <strong>255\u00a0<\/strong>\u0432\u00a0\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u00a0\u0442\u0438\u043f\u0430\u00a0\u2014 \u0447\u0442\u043e\u0431\u044b \u0441\u00a0\u0446\u0432\u0435\u0442\u0430\u043c\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u00a0\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <strong>64-\u0431\u0438\u0442\u043d\u044b\u0439<\/strong> \u0438 <strong>32-\u0431\u0438\u0442\u043d\u044b\u0439<\/strong> \u0445\u044d\u0448\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f\u00a0\u0431\u044b\u0441\u0442\u0440\u043e<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u00a0\u0442\u0438\u043f\u0430\u043c\u0438 \u0438\u0437\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0442\u0438\u043f\u0430 <strong>Windows Forms<\/strong>, <strong>WPF<\/strong>, <strong>GDI<\/strong>, <strong>SharpDX <\/strong>\u0438 \u043f\u0440\u043e\u0447\u0438\u0445<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u00a0\u0438 \u0443\u00a0\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u00a0\u0442\u0435\u043a\u0441\u0442 \u0447\u0435\u0440\u0435\u0437 <strong>ToString <\/strong>\u0441\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 <strong>IFormatProvider <\/strong>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u00a0<strong>char*<\/strong><\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u0441\u043b\u043e\u0436\u043d\u044b\u0439: \u043f\u043e\u043c\u0438\u043c\u043e \u0432\u0441\u044f\u043a\u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0435\u043a <strong>char*<\/strong>, <strong>IFormatProvider <\/strong>\u0438 <strong>NumberFormat<\/strong>, \u043e\u043d \u0435\u0449\u0451 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0442\u0438\u043f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u043c\u0443 \u0434\u0430\u044e\u0442. \u0418 \u043e\u043d \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442. \u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0442\u0438\u043f\u0430\u043c\u00a0\u2014 <strong>double <\/strong>\u0438 <strong>int<\/strong>. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u00a0\u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e, \u043e\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432\u00a0\u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445\u00a0\u2014 <strong>float<\/strong>, <strong>short <\/strong>\u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438 \u0432\u00a0\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d <strong>int <\/strong>\u043d\u0435\u00a0\u0432\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c <strong>long<\/strong>. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e\u00a0\u2014 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u0438\u043f <strong>byte<\/strong>. \u0410\u00a0\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0449\u0451 \u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435\u00a0\u2014 \u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043a\u00a0<strong>sbyte<\/strong>. \u0412\u00a0\u0443\u043f\u043e\u0440\u043e\u0442\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u00a0\u0441\u0432\u043e\u0435\u043c\u0443 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e (\u043d\u0443 \u0442\u0438\u043f\u0430 <strong>pepector.Parse(\u00abfalse, 1.34\u00a0325, 34, -23\u00bb)<\/strong>), \u043d\u043e\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442. \u0412\u00a0\u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u043e\u0441\u043b\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u044b\u0439 \u0442\u0438\u043f<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0443\u043c\u0435\u0435\u0442 \u0443\u043c\u043d\u043e \u0431\u043e\u043a\u0441\u0438\u0442\u044c\u0441\u044f \u0432 <strong>object <\/strong>\u043c\u0435\u0442\u043e\u0434\u043e\u043c <strong>TryToObject <\/strong>\u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u00a0\u0437\u0430\u0431\u043e\u043a\u0441\u0435\u043d\u043d\u044b\u043c \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u043e\u043c, \u0430\u00a0\u0437\u0430\u0431\u043e\u043a\u0441\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0442\u0438\u043f\u043e\u043c. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440 \u0441\u00a0\u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f double \u0437\u0430\u0431\u043e\u043a\u0441\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>double4<\/strong>, \u0441\u00a0\u043e\u0434\u043d\u0438\u043c <strong>nint <\/strong>\u0437\u0430\u0431\u043e\u043a\u0441\u0438\u0442 <strong>nint<\/strong>, \u0430\u00a0\u0441\u00a0\u0442\u0440\u0435\u043c\u044f <strong>Half <\/strong>\u0437\u0430\u0431\u043e\u043a\u0441\u0438\u0442 <strong>Half3<\/strong>. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u0443\u0447\u0443 \u0444\u043b\u0430\u0433\u043e\u0432\u00a0\u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0431\u043e\u043a\u0441\u0438\u0442\u044c \u0432\u00a0\u0432\u0438\u0434\u0435 \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439, \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0435\u0441\u043b\u0438 \u0437\u0430\u0431\u043e\u043a\u0441\u0438\u0442\u044c \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c (\u0434\u0430\u0442\u044c \u043a\u043e\u0440\u0442\u0435\u0436, \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0441\u043e\u0431\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u043b\u0438\u00a0\u0437\u0430\u0431\u043e\u043a\u0441\u0438\u0442\u044c \u0441\u0430\u043c \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440), \u0447\u0442\u043e\u00a0\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0432\u043d\u043e <strong>0<\/strong> \u0438 \u043f\u0440\u043e\u0447\u0435\u0435<\/p>\n<\/li>\n<\/ul>\n<h2>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b universal&lt;T&gt;<\/h2>\n<ul>\n<li>\n<p>\u041f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f\u00a0\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u043d\u0430\u0434 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0438\u043f\u0430<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 <strong>\u0441\u043a\u0430\u043b\u044f\u0440\u044b<\/strong>, <strong>\u0432\u0435\u043a\u0442\u043e\u0440\u044b <\/strong>\u0438 <strong>pepector<\/strong>. \u0418 \u043a\u043e\u0440\u0442\u0435\u0436\u0438\u00a0\u2014 \u043d\u0430\u043f\u043e\u043b\u0448\u0438\u0448\u0435\u0447\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u00a0<strong>T<\/strong> \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439\u00a0\u2014 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0432\u043f\u0438\u0445\u043d\u0443\u0442\u044c \u0432\u00a0\u043b\u044e\u0431\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0431\u0435\u0437\u00a0\u0437\u0430\u043c\u043e\u0440\u043e\u0447\u0435\u043a. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f, \u043c\u043e\u0436\u043d\u043e\u00a0\u043b\u0438 \u0435\u0433\u043e \u043d\u0430\u0442\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u00a0\u0442\u0438\u043f <strong>T<\/strong>, \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <strong>universal&lt;T&gt;.CheckIsTypeAllowed()<\/strong> <\/p>\n<\/li>\n<li>\n<p>\u0423\u00a0\u043d\u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <strong>rgba xyzw \u043a\u0437\u0441\u0430<\/strong>. \u041d\u0430\u00a0\u0432\u044b\u0445\u043e\u0434\u0435 \u0434\u0430\u044e\u0442 \u0442\u043e\u0442\u00a0\u0436\u0435 <strong>universal&lt;T&gt;<\/strong>, \u0443\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0432\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u043e\u043b\u044e<\/p>\n<\/li>\n<li>\n<p>\u0423\u00a0\u043d\u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0432\u0438\u0437\u043b\u0438\u043d\u0433. \u041c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0435\u043c\u0443 <strong>.bgrr<\/strong> \u0438 <strong>.zzxy<\/strong><\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0439 \u043f\u0440\u0438\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 <strong>Debug <\/strong>\u0438 <strong>Release<\/strong>. \u0412\u00a0\u0434\u0435\u0431\u0430\u0433\u0435 \u0443\u043f\u043e\u0440 \u0441\u0434\u0435\u043b\u0430\u043d \u043d\u0430\u00a0\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0438 <strong>universal&lt;T&gt;<\/strong> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0412\u00a0\u0440\u0435\u043b\u0438\u0437 \u043a\u043e\u043c\u043f\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0434\u043e\u043b\u044c\u0448\u0435, \u043d\u043e\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0438\u2011\u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a\u00a0\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b <strong>JIT <\/strong>\u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043b \u0432\u0441\u0451 \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0435<\/p>\n<\/li>\n<li>\n<p>\u0418\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443 \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>universal&lt;T&gt;.MinValue<\/strong>, <strong>universal&lt;T&gt;.Pi<\/strong> \u0438\u043b\u0438\u00a0<strong>universal&lt;T&gt;.Zero<\/strong>. \u0415\u0441\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 <strong>Dot<\/strong>, <strong>SumElements<\/strong>, <strong>IsInfinity <\/strong>\u0438 \u043f\u0440\u043e\u0447\u0435\u0435<\/p>\n<\/li>\n<li>\n<p>\u0423\u043c\u0435\u0435\u0442 \u0432\u00a0\u043f\u0430\u0440\u0441\u0438\u043d\u0433, <strong>ToString<\/strong>, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 <strong>32\u00a0<\/strong>\u0438 <strong>64\u00a0<\/strong>\u0431\u0438\u0442\u043d\u043e\u0433\u043e <strong>\u0445\u044d\u0448\u0430<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432\u00a0\u043d\u0435\u0433\u043e \u0442\u0438\u043f <strong>T<\/strong><\/p>\n<\/li>\n<li>\n<p>\u041a\u0440\u0438\u0432\u0435\u043d\u044c\u043a\u043e\u2011\u043a\u043e\u0441\u043e \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u043a\u043e\u0440\u0442\u0435\u0436\u0430\u043c\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 <strong>T<\/strong>\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u0440\u0442\u0435\u0436 \u0438\u0437\u00a0\u0434\u0432\u0443\u0445 \u0438\u043d\u0442\u043e\u0432, \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u2011\u0432\u044b\u0447\u0438\u0442\u0430\u0442\u044c\u2011\u0443\u043c\u043d\u043e\u0436\u0430\u0442\u044c \u0438 \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u0441\u0451. \u041d\u043e\u00a0\u043e\u043d\u043e \u043d\u0435\u00a0\u0434\u043e\u043f\u0438\u043b\u0435\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0438\u043f \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d, \u0442\u043e \u0435\u0441\u0442\u044c <strong>&lt;T&gt;<\/strong>\u00a0\u2014 \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043a\u0430\u043a\u0430\u044f\u2011\u0442\u043e \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u0430\u044f \u0435\u043c\u0443 \u0434\u0438\u0447\u044c\u00a0\u2014 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0447\u0435\u0440\u0435\u0437 <strong>Reflection<\/strong>. \u0415\u0441\u043b\u0438 \u0432\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f <strong>T<\/strong>\u00a0\u2014 \u0432\u0435\u0440\u043d\u0451\u0442 \u0435\u0433\u043e<\/p>\n<\/li>\n<\/ul>\n<h2>\u041f\u0435\u043f\u0435\u043c\u0430\u0442\u0438\u043a\u0430<\/h2>\n<ul>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <strong>Math<\/strong>. \u041f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u00a0\u043b\u044e\u0431\u044b\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438\u00a0\u2014 \u0432\u00a0\u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0430\u0442\u043e\u0432. \u0422\u043e \u0435\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>Pepe.Log(new double4(&#8230;))<\/strong> \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u0442 <strong>double4\u00a0<\/strong>\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 C# \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0434\u043e\u043d\u0438\u043c\u0430\u043b \u043c\u0435\u043d\u044f \u00ab\u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u0437\u043e\u0432\u043e\u0432\u00bb \u0438 \u0443\u043f\u043e\u0440\u043d\u043e \u043d\u0435\u00a0\u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0435\u0433\u043e \u043e\u0442\u00a0\u043d\u0435\u0433\u043e \u0445\u043e\u0442\u044f\u0442, \u0438, \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c, \u043d\u0435\u00a0\u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435\u00a0\u0431\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0438 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432\u00a0\u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c\u0435, \u044f \u0442\u0443\u043f\u043e \u0437\u0430\u043a\u0430\u0442\u0430\u043b \u0432\u00a0<strong>Pepe <\/strong>\u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0434\u043b\u044f\u00a0\u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043e\u043a \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432\u00a0<strong>Pepe <\/strong>\u043d\u0435\u00a0\u043c\u043d\u043e\u0433\u043e, \u0430\u00a0\u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e. \u042d\u0442\u043e \u043f\u043b\u043e\u0445\u043e, \u043d\u043e\u00a0\u044f \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u0440\u0435\u0448\u0438\u043b, \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c<\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0438\u0433\u043e\u043d\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0436\u0440\u0443\u0442 <strong>radains<\/strong>, <strong>radians2<\/strong>, <strong>radains3 <\/strong>\u0438 <strong>radians4<\/strong>. \u0415\u0441\u043b\u0438 \u0438\u043c \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0434\u0443\u0441\u044b \u0438\u043b\u0438 \u0432\u0438\u0442\u043a\u0438, \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u042d\u0442\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f <strong>pepector<\/strong>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0433\u0440\u0430\u0434\u0443\u0441\u044b \u0438 \u0432\u0438\u0442\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0412\u00a0\u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442\u00a0<strong>Math<\/strong>, \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0<strong>float <\/strong>\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 <strong>float<\/strong>. \u0422\u043e \u0435\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>Log10(float3)<\/strong> \u0432\u0435\u0440\u043d\u0451\u0442<strong> float3\u00a0<\/strong>\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043d\u0435\u00a0<strong>Math<\/strong>, \u0430\u00a0<strong>MathF<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0422\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f <strong>Half<\/strong>. <strong>Pow(Half2, Half2)<\/strong> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <strong>Half2\u00a0<\/strong>\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u00a0\u0447\u0435\u0440\u0435\u0437 <strong>Math<\/strong>, \u0430\u00a0\u0447\u0435\u0440\u0435\u0437 <strong>Half.Pow<\/strong>. \u042f \u043f\u043e\u043a\u043e\u043f\u0430\u043b\u0441\u044f \u0432\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 <strong>Half <\/strong>\u0438 \u0443\u0432\u0438\u0434\u0435\u043b \u0447\u0442\u043e\u00a0\u043e\u043d \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u00a0<strong>MathF<\/strong>. \u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043c\u044b\u0441\u043b\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430\u00a0LUT\u2011\u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430\u0445 (16\u00a0\u0431\u0438\u0442 \u0432\u0441\u0451 \u0442\u0430\u043a\u0438 \u043d\u0435\u00a0\u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e), \u043d\u043e\u00a0\u0440\u0443\u043a\u0438 \u043d\u0435\u00a0\u0434\u043e\u0448\u043b\u0438. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u0435\u00a0\u0444\u0430\u043a\u0442, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435\u00a0\u2014 \u0442\u0443\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430\u0434\u043e<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 <strong>pepector<\/strong>\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u0446\u0438\u043a\u043b\u044b \u043d\u0430\u00a0\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u0445 \u0441\u00a0\u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u00a0\u0442\u0435\u043b\u043e \u0446\u0438\u043a\u043b\u0430 \u0438\u0444\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u044b, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u0441\u0438\u0441\u0442\u044b\u0435, \u043d\u043e\u00a0\u0431\u044b\u0441\u0442\u0440\u044b\u0435<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p>\u0412\u00a0\u0446\u0435\u043b\u043e\u043c, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0432\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430\u0445, \u043c\u043d\u0435 \u0434\u043e\u00a0\u0441\u0438\u0445 \u043f\u043e\u0440 \u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0441\u043f\u043e\u0440\u043d\u044b\u043c\u0438. \u0412\u00a0\u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u044f\u0432\u043d\u043e\u0435\/\u043d\u0435\u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0442\u043e, \u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u00a0\u2014 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u0438\u043b\u0438\u00a0\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 bool. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439, \u043a\u0430\u043a\u00a0\u0432\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0435, \u043d\u043e\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u043e\u0442\u00a0\u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0437\u043a\u043e \u0443\u043f\u0430\u043b\u043e, \u0442.\u043a. C# \u0447\u0430\u0441\u0442\u043e \u043d\u0435\u00a0\u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u0447\u0435\u0433\u043e \u043e\u0442\u00a0\u043d\u0435\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u043e\u0442\u044f\u0442. \u042d\u0442\u043e \u0438 \u043d\u0435\u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u00a0\u2014 if \u0432\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0435 \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u00a0\u0442\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e\u00a0\u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435. \u041f\u043e\u00a0\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c \u0442\u043e\u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0442\u043a\u0440\u044b\u0442.<\/p>\n<p>\u041c\u043d\u043e\u0433\u043e\u0435 \u043f\u043e\u043a\u0430 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u00ab\u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u043e\u0442 \u0442\u0430\u043a, \u0430\u00a0\u0442\u0430\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c\u00bb\u00a0\u2014 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u043d\u0435\u00a0\u0440\u0430\u0437 \u0432\u043d\u043e\u0441\u0438\u043b\u043e \u0441\u0432\u043e\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0432\u044b.<\/p>\n<p><a class=\"anchor\" name=\"%D0%AD%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%D0%91%D1%83%D1%84%D0%B5%D1%80%D1%8B\" id=\"\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435\u0411\u0443\u0444\u0435\u0440\u044b\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u044b<\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b\u00a0\u0431\u044b\u043b\u043e \u0433\u0434\u0435 \u0440\u0430\u0437\u0433\u0443\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u00a0\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438, \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0445 \u043b\u0435\u043d\u0442 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u044f \u0445\u0440\u0430\u043d\u044e \u043d\u0435\u00a0\u0432\u00a0<strong>\u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445<\/strong>, \u0430\u00a0\u0432\u00a0<strong>\u0431\u0443\u0444\u0435\u0440\u0430\u0445 \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438<\/strong>: \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0445, \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u044f \u0440\u043e\u0434\u0438\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u0441\u00a0\u0440\u0430\u0437\u0432\u0435\u0442\u0432\u043b\u0451\u043d\u043d\u043e\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0435\u0439, \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u043c\u0438 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0448\u0442\u0443\u043a\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u00a0\u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0444\u0442\u0430.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/84d\/c9a\/66f\/84dc9a66f2c0edbd8ad4fdd610fda645.webp\" width=\"1560\" height=\"878\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/84d\/c9a\/66f\/84dc9a66f2c0edbd8ad4fdd610fda645.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/84d\/c9a\/66f\/84dc9a66f2c0edbd8ad4fdd610fda645.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0411\u0443\u0444\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043b\u044e\u0431\u043e\u0433\u043e <strong>\u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430<\/strong> (\u043f\u0440\u0438\u0432\u0435\u0442 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430\u043c) \u0438 \u0438\u043c\u0435\u0442\u044c \u043e\u0442\u00a0\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u00a0\u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439,\u00a0\u0431\u044b\u0442\u044c \u043a\u0430\u043a\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438, \u0442\u0430\u043a \u0438 \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u043c\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e\u2011\u0442\u043e \u043f\u0430\u043c\u044f\u0442\u044c).<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">Booffer1D&lt;T&gt;<\/p>\n<\/td>\n<td data-colwidth=\"236\" width=\"236\">\n<p align=\"left\">BoofferLink1D&lt;T&gt;<\/p>\n<\/td>\n<td>\n<p align=\"left\">PooledBooffer1D&lt;T&gt;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Booffer2D&lt;T&gt;<\/p>\n<\/td>\n<td data-colwidth=\"236\" width=\"236\">\n<p align=\"left\">BoofferLink2D&lt;T&gt;<\/p>\n<\/td>\n<td>\n<p align=\"left\">PooledBooffer2D&lt;T&gt;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Booffer3D&lt;T&gt;<\/p>\n<\/td>\n<td data-colwidth=\"236\" width=\"236\">\n<p align=\"left\">BoofferLink3D&lt;T&gt;<\/p>\n<\/td>\n<td>\n<p align=\"left\">PooledBooffer3D&lt;T&gt;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Booffer4D&lt;T&gt;<\/p>\n<\/td>\n<td data-colwidth=\"236\" width=\"236\">\n<p align=\"left\">BoofferLink4D&lt;T&gt;<\/p>\n<\/td>\n<td>\n<p align=\"left\">PooledBooffer4D&lt;T&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u043e\u043b\u043d\u0430\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u00a0<strong>\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 <\/strong>\u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>Booffer3D&lt;pepector&gt;<\/strong> \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c <strong><abbr class=\"habraabbr\" title=\"\u041a\u0430\u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0431\u044a\u0451\u043c\u0435. \u041a\u0443\u0431\u0438\u043a \u0438\u0437 \u041c\u0430\u0439\u043d\u043a\u0440\u0430\u0444\u0442\u0430 \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440\" data-title=\"&lt;p&gt;\u041a\u0430\u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0431\u044a\u0451\u043c\u0435. \u041a\u0443\u0431\u0438\u043a \u0438\u0437 \u041c\u0430\u0439\u043d\u043a\u0440\u0430\u0444\u0442\u0430 \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440&lt;\/p&gt;\" data-abbr=\"\u0432\u043e\u043a\u0441\u0435\u043b\u0435\">\u0432\u043e\u043a\u0441\u0435\u043b\u0435<\/abbr> <\/strong>\u0440\u0430\u0437\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \u0415\u0449\u0451 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u0441\u044d\u043c\u043f\u043b\u0438\u043d\u0433 \u0441\u00a0\u0431\u0438\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0435\u0439<\/strong> (\u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u00a0\u0434\u0440\u043e\u0431\u043d\u044b\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c)\u00a0\u2014 \u0434\u0430\u0436\u0435 \u0443 <strong>4D<\/strong>.<\/p>\n<p>\u041d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c\u00a0\u2014 \u0448\u0442\u0443\u043a\u0430 \u043e\u043f\u0430\u0441\u043d\u0430\u044f, \u0438 \u0434\u043b\u044f\u00a0\u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u0441\u0442\u0440\u0435\u043b\u0430 \u043d\u043e\u0433 \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u0447:<\/p>\n<ol>\n<li>\n<p>\u0412\u0441\u0435 \u0431\u0443\u0444\u0435\u0440\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f <strong>DisposableExtended<\/strong>, \u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0432\u0441\u0435 \u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043f\u043b\u044e\u0448\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438. \u0412\u00a0\u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u00a0\u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044f \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0443\u0444\u0435\u0440\u0430, \u0430\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0\u0431\u0443\u0444\u0435\u0440 \u0441\u0442\u0430\u043b \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c<\/p>\n<\/li>\n<li>\n<p><strong>\u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u00a0\u043f\u0430\u043c\u044f\u0442\u044c \u0443\u00a0\u0431\u0443\u0444\u0435\u0440\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0435\u0440\u043d\u044b\u0439, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0431\u0443\u0444\u0435\u0440 \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u043b\u0438\/\u0443\u0434\u0430\u043b\u0438\u043b\u0438<\/strong>\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u00a0\u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u043e\u043d \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u0435\u0434\u0438\u043d\u044b\u0439 \u043e\u0431\u0449\u0438\u0439 \u0434\u043b\u044f\u00a0\u0432\u0441\u0435\u0433\u043e \u0441\u043e\u0444\u0442\u0430 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u0440\u0438\u00a0\u0441\u0431\u043e\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0432\u00a0\u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u043c \u043a\u0443\u0441\u043a\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0448\u0430, \u043d\u043e\u00a0\u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0443\u043f\u0430\u0441\u0442\u044c \u043e\u0442 \u00ab<em>\u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0432\u00a0\u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c<\/em>\u00bb. \u0418 \u0434\u0430\u00a0\u2014 \u043f\u0440\u0438\u00a0\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a\u00a0\u0442\u0430\u043a\u043e\u043c\u0443 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c\u0443 \u0431\u0443\u0444\u0435\u0440\u0443 \u043e\u043d \u0433\u0440\u043e\u043c\u043a\u043e \u043e\u0440\u0451\u0442 \u0432\u00a0\u043b\u043e\u0433, \u0430\u00a0\u0432\u00a0\u0434\u0435\u0431\u0430\u0433\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u0441\u044f. \u041d\u043e\u00a0\u0433\u043b\u0430\u0432\u043d\u043e\u0435\u00a0\u2014 \u0441\u043e\u0444\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443, \u0430\u00a0\u043d\u0435\u00a0\u0443\u043f\u0430\u0434\u0451\u0442<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 <strong>\u043f\u0430\u043c\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u00a0\u043f\u043e\u043b\u044f\u043c\u0438<\/strong>\u00a0\u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e\u2011\u0442\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e\u00a0\u043d\u0430\u0447\u0430\u043b\u0430, \u0441\u043a\u043e\u043b\u044c\u043a\u043e\u2011\u0442\u043e \u043f\u043e\u0441\u043b\u0435. \u0422\u0430\u043a \u043c\u044b <em>\u0441\u043d\u0438\u0436\u0430\u0435\u043c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c<\/em>, \u0447\u0442\u043e\u00a0\u043f\u0440\u0438\u00a0\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0431\u0443\u0444\u0435\u0440\u0430 \u0441\u043e\u0444\u0442 \u0443\u043f\u0430\u0434\u0451\u0442. \u041e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u043b\u044f \u0432\u00a0\u043e\u0434\u0438\u043d \u0438\u043b\u0438\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0439\u00a0\u2014 \u0432\u00a0\u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 + \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 <\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/369\/f4e\/14e\/369f4e14eaa9dd62819854117f106165.webp\" alt=\"\" title=\"\" width=\"3840\" height=\"2160\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/369\/f4e\/14e\/369f4e14eaa9dd62819854117f106165.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/369\/f4e\/14e\/369f4e14eaa9dd62819854117f106165.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0411\u0443\u0444\u0435\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>2D \u0431\u0443\u0444\u0435\u0440<\/strong> \u0443\u043c\u0435\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c\u00a0\u043b\u0438\u043d\u0438\u0438, \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 <strong>2D\u2011\u0431\u0443\u0444\u0435\u0440\u044b<\/strong>\u00a0\u2014 \u0438 \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u0430\u043b\u044f\u0440\u044b \u0438 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b.<\/p>\n<pre><code class=\"cs\">public void DrawSomething&lt;T&gt;(Booffer2D&lt;T&gt; canvas, T color) where T : unmanaged {    if (E.IsInvalid(canvas)) return;     using var ds = canvas.DisposeProtectedScope;    if (ds.IsFailed()) return;     canvas.SetLine(50, 50, 100, 100, color);    canvas.SetLine((20, 30), (40, 50), color);     var color_200percent_brightness = (universal.Create(color) * 2).Value;    canvas.SetLine((10, 80), (20, 20), color_200percent_brightness);     canvas.SetRectangle((50, 60, 100, 200), color);     canvas.ShiftX(50); \/\/\u0421\u0434\u0432\u0438\u0433\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432\u043f\u0440\u0430\u0432\u043e }<\/code><\/pre>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u00a0\u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u0430\u044f <span class=\"habrahidden\">(\u043d\u0443 \u043a\u0440\u043e\u043c\u0435 <\/span><strong><span class=\"habrahidden\">BoofferLink<\/span><\/strong><span class=\"habrahidden\">, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0442\u044f\u043d\u0443\u0442\u044c \u043d\u0430\u00a0\u0447\u0442\u043e\u00a0\u0443\u0433\u043e\u0434\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u043a\u0430\u043a\u00a0\u0431\u0443\u0444\u0435\u0440)<\/span>, \u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435\u00a0\u0435\u0437\u0434\u044f\u0442 \u0442\u0443\u0434\u0430\u2011\u0441\u044e\u0434\u0430, \u0447\u0442\u043e\u00a0\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f\u00a0\u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0445\u0438\u0442\u0440\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0446\u0432\u0435\u0442\u043e\u0432 <strong>Booffer2D&lt;ushort3&gt;<\/strong> \u0438 \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 <strong>Booffer1D&lt;IntPtr&gt;<\/strong>, \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0432\u00a0\u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430, \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u0442\u0438\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u0446\u0432\u0435\u0442, \u0438, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c, \u0447\u0442\u043e\u2011\u0442\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c, \u043d\u0435\u00a0\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0430\u0434\u0440\u0435\u0441 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u0435\u0433\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0422\u0430\u043a \u043c\u044b \u0432\u044b\u043a\u0438\u043d\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u0440\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0427\u0442\u043e \u044f \u0438\u043c\u0435\u044e \u0432\u0432\u0438\u0434\u0443<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cs\">\/\/\u041f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c\u0441\u044f \u043f\u043e \u0431\u0443\u0444\u0435\u0440\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043f\u0438\u0445\u0430\u0435\u043c \u0432 \u043d\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f if (mapPack.TryGetMapPointers(mapIndex, out var begin, out var count, out var end, out var end4)) {     var end8 = begin + count \/ 8 * 8;     var ptr = begin;     var source_ptr = source_begin;     \/\/ptr - \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439     \/\/source_ptr - \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c     while (ptr &lt; end8)     {         **ptr++ = *source_ptr++;         **ptr++ = *source_ptr++;         **ptr++ = *source_ptr++;         **ptr++ = *source_ptr++;          **ptr++ = *source_ptr++;         **ptr++ = *source_ptr++;         **ptr++ = *source_ptr++;         **ptr++ = *source_ptr++;     }     while (ptr &lt; end)         **ptr++ = *source_ptr++; }<\/code><\/pre>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"%D0%AD%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%D0%9F%D0%B5%D0%BF%D0%B5%D1%80%D1%83%D0%B1%D0%BA%D0%B0\" id=\"\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f\u041f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0430\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0430<\/h2>\n<p>\u0412\u00a0\u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u043c \u043e\u043a\u043e\u0448\u043a\u0435 \u0446\u0432\u0435\u0442\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0441\u044c \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 <strong>byte3\u00a0<\/strong><span class=\"habrahidden\">(\u0432\u0441\u0435\u0433\u043e 16.7\u00a0\u043c\u043b\u043d. \u043e\u0442\u0442\u0435\u043d\u043a\u043e\u0432)<\/span>, \u0438\u00a0\u0431\u044b\u043b\u043e \u0433\u0434\u0435 \u0440\u0430\u0437\u0433\u0443\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u00a0\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u043d\u0430\u00a0\u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430\u0445 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 (<strong>LUT<\/strong>). \u0410\u00a0\u0442\u0443\u0442 \u0443\u00a0\u043d\u0430\u0441 <strong>float3\u00a0<\/strong>\u2014 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0436\u0440\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 800\u00a0\u0422\u0431 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u041c\u043d\u0435 \u0435\u0451, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435\u00a0\u0436\u0430\u043b\u043a\u043e, \u043d\u043e\u00a0\u043d\u0435\u00a0\u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \ud83d\ude42 \u0411\u0443\u0434\u0435\u043c \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u043e\u2011\u0434\u0440\u0443\u0433\u043e\u043c\u0443.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/76f\/39f\/b81\/76f39fb81785c1ff9af9bcd1415dac23.webp\" width=\"2058\" height=\"2231\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/76f\/39f\/b81\/76f39fb81785c1ff9af9bcd1415dac23.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/76f\/39f\/b81\/76f39fb81785c1ff9af9bcd1415dac23.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0418\u0442\u0430\u043a, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u00a0\u0431\u0443\u0444\u0435\u0440\u0430\u0445 \u043d\u0430\u0434\u043e \u043e\u0431\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0434\u043e \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0434\u043b\u044f\u00a0\u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0445 \u043b\u0435\u043d\u0442, \u0443\u043c\u043d\u043e\u0436\u0430\u0442\u044c, \u0434\u0435\u043b\u0438\u0442\u044c \u0438 \u0432\u0441\u0451 \u0432\u00a0\u0442\u0430\u043a\u043e\u043c \u0434\u0443\u0445\u0435.<\/p>\n<p>\u0423\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435\u043c\u2011\u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0438 \u043f\u0440\u043e\u0447\u0435\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u00a0\u0431\u0443\u0444\u0435\u0440\u0430\u0445 \u0443\u00a0\u043c\u0435\u043d\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f <strong>Peperubka<\/strong>. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c\u00a0\u0431\u044b, \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043b\u044f\u00a0<strong>C++<\/strong>, \u043d\u043e\u00a0\u043c\u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u0432\u00a0\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043d\u0430\u00a0<strong>C#<\/strong>. \u042f \u0438 \u0437\u0430\u0448\u0451\u043b. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0440\u0435\u043c\u044f \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u043c\u0438: \u0446\u0438\u043a\u043b\u0430\u043c\u0438 \u043d\u0430\u00a0\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u0445, simd\u043e\u0432\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438 \u0430\u043d\u0440\u043e\u043b\u043b\u0438\u043d\u0433\u043e\u043c.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9ae\/dd2\/c4a\/9aedd2c4a0c39c369b360d73bd638e32.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/9ae\/dd2\/c4a\/9aedd2c4a0c39c369b360d73bd638e32.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9ae\/dd2\/c4a\/9aedd2c4a0c39c369b360d73bd638e32.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0446\u0438\u043a\u043b\u044b \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u0445<\/summary>\n<div class=\"spoiler__content\">\n<p>\u042d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u043c \u0446\u0438\u043a\u043b\u0430 \u0441\u043b\u0443\u0436\u0438\u0442 \u043d\u0435\u00a0\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u0435\/\u0431\u0443\u0444\u0435\u0440\u0435, \u0430\u00a0\u043f\u0440\u044f\u043c\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u044d\u0442\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438. \u0412\u00a0\u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0434\u043e \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0446\u0438\u043a\u043b\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 (\u0430\u0434\u0440\u0435\u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 + \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430). \u0426\u0438\u043a\u043b \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c. \u0418 \u0437\u0430\u043e\u0434\u043d\u043e \u043f\u0440\u0438\u00a0\u043b\u044e\u0431\u043e\u043c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043f\u043e\u0440\u0443\u0448\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u0441\u043e\u0444\u0442 \u0438 \u043e\u0433\u0440\u0435\u0441\u0442\u0438 \u0442\u0440\u0443\u0434\u043d\u043e\u0443\u043b\u043e\u0432\u0438\u043c\u044b\u0439 \u0431\u0430\u0433 \ud83d\ude42 \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0434\u043e \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e. \u041c\u043d\u043e\u0433\u0438\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043c\u043d\u044b, \u0447\u0442\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b \u0432\u00a0\u0446\u0438\u043a\u043b\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 <\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 SIMD \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>S<\/strong>ingle <strong>I<\/strong>nstruction, <strong>M<\/strong>ultiple <strong>D<\/strong>ata<\/p>\n<p>\u042d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u00ab\u0437\u0430 \u0440\u0430\u0437\u00bb \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u00a0\u043e\u0434\u043d\u0430 \u043f\u0430\u0440\u0430 \u0447\u0438\u0441\u0435\u043b, \u0430\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u00ab\u0432\u043e\u0437\u044c\u043c\u0438 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0438 \u0443\u043c\u043d\u043e\u0436\u044c \u043d\u0430\u00a0\u044d\u0442\u043e\u00bb \u043c\u043e\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u00ab\u0432\u043e\u0437\u044c\u043c\u0438 16\u00a0\u044d\u0442\u0438\u0445 \u0447\u0438\u0441\u0435\u043b \u0438 \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0443\u043c\u043d\u043e\u0436\u044c \u043d\u0430\u00a0\u0432\u043e\u0442 \u044d\u0442\u0438 16\u00a0\u0447\u0438\u0441\u0435\u043b\u00bb\u00a0\u2014 \u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u00ab\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439\u00bb, \u043d\u0430\u00a0\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0443\u00a0\u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u00a0\u2014 <strong>SSE<\/strong>, <strong>AVX <\/strong>\u0438 \u043f\u0440\u043e\u0447\u0438\u0435. \u041d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0451 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043d\u043e\u00a0\u043f\u0440\u043e\u00a0\u043c\u0438\u043a\u0440\u043e\u043a\u043e\u0434 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c \u0442\u0443\u0442 \u044f \u043d\u0435\u00a0\u0431\u0443\u0434\u0443<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0430\u043d\u0440\u043e\u043b\u043b\u0438\u043d\u0433<\/summary>\n<div class=\"spoiler__content\">\n<p>\u042d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0442\u0435\u043b\u043e \u0446\u0438\u043a\u043b\u0430 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u043d\u0446\u0430 \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u0430 \u0440\u0435\u0436\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e<\/p>\n<pre><code class=\"cs\">for (int i = 0; i &lt; 100; i++) c[i] = a[i] * b[i];<\/code><\/pre>\n<p>\u043f\u0438\u0448\u0443\u0442 \u0447\u0442\u043e\u2011\u0442\u043e \u0442\u0438\u043f\u0430 <\/p>\n<pre><code class=\"cs\">for (int i = 0; i &lt; 100;)  { c[i] = a[i] * b[i]; i++;     c[i] = a[i] * b[i]; i++; } \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u201c&lt; 100\u201d \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0440\u0435\u0436\u0435<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u2011\u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u044f \u0438 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f\u2011\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u043e\u0432, \u043f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0430 \u0443\u043c\u0435\u0435\u0442 \u0432\u00a0\u0431\u044b\u0441\u0442\u0440\u044b\u0435 <strong>x<sup>y<\/sup> <\/strong>\u0438 <strong>x<sup>-1<\/sup><\/strong>, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435+\u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u00a0\u0440\u0430\u0437, \u043e\u0431\u0440\u0435\u0437\u043a\u0443 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430, \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong>RGB <\/strong>\u2194 <strong>RGBA <\/strong>\u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u0418\u00a0\u2014 \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435\u00a0\u2014 \u0443\u043c\u0435\u0435\u0442 \u0432\u00a0\u043f\u0435\u0440\u0435\u0432\u043e\u0434 <strong>HDR <\/strong>\u0432 <strong>SDR<\/strong>. \u041f\u0438\u043a\u0441\u0435\u043b\u0438\u2011\u0442\u043e \u0443\u00a0\u043d\u0430\u0441 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 <strong>HDR<\/strong>, \u0430\u00a0\u043b\u0435\u043d\u0442\u044b\u00a0\u2014 <strong>SDR<\/strong>. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/511\/abb\/dac\/511abbdac2276847402aa5d2271b2cbb.webp\" width=\"3840\" height=\"2160\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/511\/abb\/dac\/511abbdac2276847402aa5d2271b2cbb.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/511\/abb\/dac\/511abbdac2276847402aa5d2271b2cbb.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0443 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code class=\"cs\">public static void TestPeperubka&lt;T&gt;(IBooffer&lt;T&gt; buf1, IBooffer&lt;T&gt; buf2, IBooffer&lt;T&gt; buf3, T someValue, IBooffer&lt;T&gt; output) where T : unmanaged {     Peperubka.MulAdd(buf1, buf2, buf3); \/\/buf1 = buf1 * buf2 + buf3     Peperubka.MulAdd(buf1, buf3, someValue); \/\/buf1 = buf1 * buf2 + someValue     Peperubka.MulAdd(buf1, buf2, buf3, output); \/\/output = buf1 * buf2 + buf3     Peperubka.MulAdd(buf1, buf2, someValue, output); \/\/output = buf1 * someValue + buf2      Peperubka.Mul(buf1, buf2); \/\/buf1 *= buf2     Peperubka.Mul(buf1, someValue); \/\/buf1 *= someValue     Peperubka.Mul(buf1, buf2, output); \/\/output = buf1 * buf2     Peperubka.Mul(buf1, someValue, output); \/\/output = buf1 * someValue      Peperubka.Add(buf1, buf2); \/\/buf1 += buf2     Peperubka.Add(buf1, someValue); \/\/buf1 += someValue     Peperubka.Add(buf1, buf2, output); \/\/output = buf1 + buf2     Peperubka.Add(buf1, someValue, output); \/\/output = buf1 + someValue      Peperubka.Div(buf1, buf2); \/\/buf1 \/= buf2     Peperubka.Div(buf1, someValue); \/\/buf1 \/= someValue     Peperubka.Div(buf1, someValue, fastMulReciprocal: true); \/\/buf1 *= 1 \/ someValue     Peperubka.Div(someValue, buf1); \/\/buf1 = someValue \/ buf1     Peperubka.Div(buf1, buf2, output); \/\/output = buf1 \/ buf2     Peperubka.Div(buf1, someValue, output); \/\/output = buf1 \/ someValue      Peperubka.Sub(buf1, buf2); \/\/buf1 -= buf2     Peperubka.Sub(buf1, someValue); \/\/buf1 -= someValue     Peperubka.Sub(buf1, buf2, output); \/\/output = buf1 - buf2     Peperubka.Sub(buf1, someValue, output); \/\/output = buf1 - someValue      Peperubka.Reciprocal(buf1, fastInexactIfAvaiable: false); \/\/buf1 = 1 \/ buf1     Peperubka.Pow(buf1, someValue, output, fastInexactIfAvaiable: true); \/\/output = buf1 ^ someValue     pepector sum = Peperubka.CalculateSum(buf1);     Peperubka.Clamp(buf2, universal&lt;T&gt;.Zero.Value, (universal&lt;T&gt;.MaxValue \/ 2).Value); }<\/code><\/pre>\n<p>\u0415\u0449\u0451 \u0432\u00a0\u043f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0435 \u0435\u0441\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0443\u043c\u043c\u0430\u0442\u043e\u0440<\/p>\n<\/li>\n<li>\n<p>\u0421\u043f\u0435\u0446\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 <strong>RGB<\/strong> \u0432\u00a0<strong>BGR <\/strong>(\u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e)<\/p>\n<\/li>\n<li>\n<p>\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0441\u00a0\u0440\u0430\u0437\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043f\u043e\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0441\u0442\u0440\u043e\u0438\u0442 LUT\u2011\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u043b\u044f\u00a0\u043c\u0435\u043b\u043a\u0438\u0445 \u0442\u0438\u043f\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u0431\u0443\u0444\u0435\u0440\u043e\u0432, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0442\u0435 \u0431\u0443\u0444\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0443\u0442 \u043f\u043e\u0434\u0440\u044f\u0434, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0438\u0439 \u0438\u0445 \u0438 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0451 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 <strong>1D<\/strong>, <strong>2D<\/strong>, <strong>3D<\/strong> \u0438 <strong>4D<\/strong> \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0438\u043f\u0430\u00a0\u2014 \u0441\u043a\u0430\u043b\u044f\u0440\u043e\u0432 \u0438 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0438 \u0438\u043c\u0435\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438: \u0431\u0443\u0444\u0435\u0440 \u0441\u00a0\u0431\u0443\u0444\u0435\u0440\u043e\u043c, \u0431\u0443\u0444\u0435\u0440 \u0441\u00a0\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 + \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043a\u0443\u0434\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u00a0\u2014 \u0432\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438\u043b\u0438\u00a0\u0432\u00a0\u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e \u043d\u043e\u0432\u044b\u0439.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9aa\/236\/cd1\/9aa236cd1073233358af518e7ab083bb.webp\" alt=\"\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 AVX512 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e 16 \u0447\u0438\u0441\u0435\u043b float32 \u0437\u0430 \u0440\u0430\u0437\" title=\"\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 AVX512 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e 16 \u0447\u0438\u0441\u0435\u043b float32 \u0437\u0430 \u0440\u0430\u0437\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/9aa\/236\/cd1\/9aa236cd1073233358af518e7ab083bb.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9aa\/236\/cd1\/9aa236cd1073233358af518e7ab083bb.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 AVX512 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e 16 \u0447\u0438\u0441\u0435\u043b float32 \u0437\u0430 \u0440\u0430\u0437<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043b\u044f\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u044f \u0437\u0430\u043f\u0438\u043b\u0438\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u00a0<strong>AVX512<\/strong>, <strong>AVX2<\/strong>, <strong>SSE <\/strong>\u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445. \u0427\u0430\u0441\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u043a\u0438 <strong>C#<\/strong> \u0432\u0441\u0451\u2011\u0442\u0430\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443. \u0417\u0430\u0447\u0435\u043c? \u0420\u0443\u043a\u0438 \u0447\u0435\u0441\u0430\u043b\u0438\u0441\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>RGB -&gt; RGBA \u043d\u0430 AVX512 \u0434\u043b\u044f 8-\u0431\u0438\u0442\/\u043a\u0430\u043d\u0430\u043b \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 (byte3\/sbyte3\/bool3)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">\/\/\u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u044e\u0442 \u0443\u0436\u0435 \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u044b\u0435 private static bool simdWithSetAlpha512_byte(ref Vector3D* sourceBegin, ref Vector4D* destinationBegin, ref long valueCount, Vector3D* _originalSourceEnd, ScalarType alphaValue)  {      if (!Avx512BW.IsSupported || !Vector512&lt;byte&gt;.IsSupported || sizeof(ScalarType) != sizeof(byte))          return false;       byte* srcPtr = (byte*)sourceBegin;      byte* dstPtr = (byte*)destinationBegin;       var vector_count_inAVX512 = (512 \/ 8) \/ (sizeof(byte) * 3);      var valueVectorCompatibleCount = (valueCount \/ vector_count_inAVX512 - 1) * vector_count_inAVX512;      var valueVectorCompatibleCount4 = (valueVectorCompatibleCount \/ 4 - 2) * 4;       byte* sEnd = (byte*)srcPtr + valueVectorCompatibleCount * 3;      byte* sEnd4 = (byte*)srcPtr + valueVectorCompatibleCount4 * 3;        Vector512&lt;byte&gt; shuffleMask;      {          byte _ = 0;          shuffleMask = Vector512.Create(              0, 1, 2, _, 3, 4, 5, _,              6, 7, 8, _, 9, 10, 11, _,              12, 13, 14, _, 15, 16, 17, _,              18, 19, 20, _, 21, 22, 23, _,              24, 25, 26, _, 27, 28, 29, _,              30, 31, 32, _, 33, 34, 35, _,              36, 37, 38, _, 39, 40, 41, _,              42, 43, 44, _, 45, 46, 47, _);      }       Vector512&lt;byte&gt; blendMask = Vector512.Create(         0, 0, 0, 0xFF, 0, 0, 0, 0xFF,         0, 0, 0, 0xFF, 0, 0, 0, 0xFF,         0, 0, 0, 0xFF, 0, 0, 0, 0xFF,         0, 0, 0, 0xFF, 0, 0, 0, 0xFF,         0, 0, 0, 0xFF, 0, 0, 0, 0xFF,         0, 0, 0, 0xFF, 0, 0, 0, 0xFF,         0, 0, 0, 0xFF, 0, 0, 0, 0xFF,         0, 0, 0, 0xFF, 0, 0, 0, 0xFF);       byte* scalarArray = stackalloc byte[512 \/ 8 \/ sizeof(byte)];      {          byte scalarAlphaAsByte = *(byte*)&amp;alphaValue;          for (int i = 0; i &lt; 512 \/ 8 \/ sizeof(byte); i++)              scalarArray[i] = scalarAlphaAsByte;      }       var scalarVector = Vector512.Load(scalarArray);      while (srcPtr &lt; sEnd4)      {          {              var rgb = Vector512.LoadAligned(srcPtr); \/\/\u0420\u041e\u0412\u041d\u041e!!!!              var rgbShuffled = Vector512.Shuffle(rgb, shuffleMask);              var rgbBlended = Avx512BW.BlendVariable(rgbShuffled, scalarVector, blendMask);              Vector512.StoreAligned(rgbBlended, dstPtr);              srcPtr += (512 \/ 8 \/ sizeof(byte) \/ 4 * 3); \/\/48 \u0438\u043b\u0438 24 \u0438\u043b\u0438 12 \u0438\u043b\u0438 6 \u0441\u043a\u0430\u043b\u044f\u0440\u043e\u0432              dstPtr += (512 \/ 8 \/ sizeof(byte)); \/\/64 \u0438\u043b\u0438 32 \u0438\u043b\u0438 16 \u0438\u043b\u0438 8 \u0441\u043a\u0430\u043b\u044f\u0440\u043e\u0432          }          {              var rgb = Vector512.Load(srcPtr); \/\/\u043d\u0435 \u0440\u043e\u0432\u043d\u043e              var rgbShuffled = Vector512.Shuffle(rgb, shuffleMask);              var rgbBlended = Avx512BW.BlendVariable(rgbShuffled, scalarVector, blendMask);              Vector512.StoreAligned(rgbBlended, dstPtr);              srcPtr += (512 \/ 8 \/ sizeof(byte) \/ 4 * 3);              dstPtr += (512 \/ 8 \/ sizeof(byte));          }          {              var rgb = Vector512.Load(srcPtr); \/\/\u043d\u0435 \u0440\u043e\u0432\u043d\u043e              var rgbShuffled = Vector512.Shuffle(rgb, shuffleMask);              var rgbBlended = Avx512BW.BlendVariable(rgbShuffled, scalarVector, blendMask);              Vector512.StoreAligned(rgbBlended, dstPtr);              srcPtr += (512 \/ 8 \/ sizeof(byte) \/ 4 * 3);              dstPtr += (512 \/ 8 \/ sizeof(byte));          }          {              var rgb = Vector512.Load(srcPtr); \/\/\u043d\u0435 \u0440\u043e\u0432\u043d\u043e              var rgbShuffled = Vector512.Shuffle(rgb, shuffleMask);              var rgbBlended = Avx512BW.BlendVariable(rgbShuffled, scalarVector, blendMask);              Vector512.StoreAligned(rgbBlended, dstPtr);              srcPtr += (512 \/ 8 \/ sizeof(byte) \/ 4 * 3);              dstPtr += (512 \/ 8 \/ sizeof(byte));          }      }       while (srcPtr &lt; sEnd)      {          var rgb = Vector512.Load(srcPtr); \/\/\u043d\u0435 \u0440\u043e\u0432\u043d\u043e          var rgbShuffled = Vector512.Shuffle(rgb, shuffleMask);          var rgbBlended = Avx512BW.BlendVariable(rgbShuffled, scalarVector, blendMask);          Vector512.StoreAligned(rgbBlended, dstPtr);          srcPtr += (512 \/ 8 \/ sizeof(byte) \/ 4 * 3);          dstPtr += (512 \/ 8 \/ sizeof(byte));      }       sourceBegin = (Vector3D*)srcPtr;      destinationBegin = (Vector4D*)dstPtr;      valueCount = _originalSourceEnd - sourceBegin;      return true;  }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>AVX512 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044f\u0440\u043a\u043e\u0441\u0442\u0438 (8 \u0431\u0438\u0442\/\u043a\u0430\u043d\u0430\u043b)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">static readonly Vector512&lt;ushort&gt; _rgb_koefficients = Vector512.Create(   (ushort)38, (ushort)77, (ushort)13, (ushort)0,   (ushort)38, (ushort)77, (ushort)13, (ushort)0,   (ushort)38, (ushort)77, (ushort)13, (ushort)0,   (ushort)38, (ushort)77, (ushort)13, (ushort)0,   (ushort)38, (ushort)77, (ushort)13, (ushort)0,   (ushort)38, (ushort)77, (ushort)13, (ushort)0,   (ushort)38, (ushort)77, (ushort)13, (ushort)0,   (ushort)38, (ushort)77, (ushort)13, (ushort)0 );  static readonly Vector512&lt;ushort&gt; _channelRegrouping = Vector512.Create(   (ushort)0, (ushort)4, (ushort)8, (ushort)12, (ushort)16, (ushort)20, (ushort)24, (ushort)28, \/\/\u041a\u0440\u0430\u0441\u043d\u044b\u0435   (ushort)1, (ushort)5, (ushort)9, (ushort)13, (ushort)17, (ushort)21, (ushort)25, (ushort)29, \/\/\u0417\u0435\u043b\u0451\u043d\u044b\u0435   (ushort)2, (ushort)6, (ushort)10, (ushort)14, (ushort)18, (ushort)22, (ushort)26, (ushort)30, \/\/\u0421\u0438\u043d\u0438\u0435   (ushort)3, (ushort)7, (ushort)11, (ushort)15, (ushort)19, (ushort)23, (ushort)27, (ushort)31 \/\/\u041f\u043e\u0444\u0438\u0433 );  static readonly Vector256&lt;byte&gt; _byte_unrar_indices = Vector256.Create(   (byte)31, (byte)31, (byte)31, (byte)0,   (byte)31, (byte)31, (byte)31, (byte)1,   (byte)31, (byte)31, (byte)31, (byte)2,   (byte)31, (byte)31, (byte)31, (byte)3,   (byte)31, (byte)31, (byte)31, (byte)4,   (byte)31, (byte)31, (byte)31, (byte)5,   (byte)31, (byte)31, (byte)31, (byte)6,   (byte)31, (byte)31, (byte)31, (byte)7 );  static readonly Vector256&lt;byte&gt; _rgb_alpha_masks = Vector256.Create(   0, 0, 0, 0xFF,   0, 0, 0, 0xFF,   0, 0, 0, 0xFF,   0, 0, 0, 0xFF,   0, 0, 0, 0xFF,   0, 0, 0, 0xFF,   0, 0, 0, 0xFF,   0, 0, 0, 0xFF );  private static byte* _avx512_byte_Avx512BW(byte* ptr, byte* end_vec) {    \/\/\u041f\u0440\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043c\u0430\u0441\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0443\u044e \u0448\u0435\u043b\u0443\u0445\u0443 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b    var rgb_koefficients = _rgb_koefficients;    var channelRegrouping = _channelRegrouping;    var byte_unrar_indices = _byte_unrar_indices;    var rgb_alpha_masks = _rgb_alpha_masks;     while (ptr &lt; end_vec)    {        var colorsBytes = Vector256.LoadAligned&lt;byte&gt;(ptr);        var colorsUShort = Avx512BW.ConvertToVector512UInt16(colorsBytes);         \/\/\u0423\u043c\u043d\u043e\u0436\u0430\u0435\u043c RGB \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b        var colorsMultipled = colorsUShort * rgb_koefficients;         \/\/\u0421\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u044b\u0435 RGB        Vector128&lt;ushort&gt; sums;        {            \/\/\u0422\u0430\u0441\u0443\u0435\u043c  RGB RGB RGB RGB RGB RGB RGB RGB \u0432 RRRRRRRR GGGGGGGG BBBBBBBB AAAAAAAA            var regroupedChannels = Vector512.Shuffle(colorsMultipled, channelRegrouping);             \/\/\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e 3 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043a\u0440\u0430\u0441\u043d\u044b\u0445, \u0437\u0435\u043b\u0451\u043d\u044b\u0445 \u0438 \u0441\u0438\u043d\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442            var lower = regroupedChannels.GetLower(); \/\/RRRRRRRR GGGGGGGG             var reds = lower.GetLower(); \/\/RRRRRRRR            var greens = lower.GetUpper(); \/\/GGGGGGGG            var blues = regroupedChannels.GetUpper().GetLower(); \/\/BBBBBBBB             \/\/\u0421\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0440\u0430\u0437\u0443 8 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439            sums = reds + greens + blues; \/\/RRRRRRRR + GGGGGGGG + BBBBBBBB = SUM SUM SUM SUM SUM SUM SUM SUM        }         \/\/\u0414\u0435\u043b\u0438\u043c \u0432\u0441\u0435 8 \u0441\u0443\u043c\u043c \u043d\u0430 128        var lumsAsUShorts = Vector128.ShiftRightLogical(sums, 7);        \/\/\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u044f\u0440\u043a\u043e\u0441\u0442\u0438         \/\/\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u044f\u0440\u043a\u043e\u0441\u0442\u0438 \u0438\u0437 \u0443\u0448\u043e\u0440\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0431\u0430\u0439\u0442\u044b        var lumsAsBytes = Avx2.PackUnsignedSaturate(*(Vector256&lt;short&gt;*)&amp;lumsAsUShorts, Vector256&lt;short&gt;.Zero);         \/\/\u0420\u0430\u0437\u0434\u0432\u0438\u0433\u0430\u0435\u043c \u044f\u0440\u043a\u043e\u0441\u0442\u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0446\u0435\u043b\u0438\u0442\u044c\u0441\u044f        \/\/\u0438\u043c\u0438 \u043d\u0430 \u043c\u0435\u0441\u0442\u0430 \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b\u043e\u0432         var lumsShuffled = Vector256.Shuffle(lumsAsBytes, byte_unrar_indices);         \/\/\/\/\u0421\u043e\u0432\u043c\u0435\u0449\u0430\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0446\u0432\u0435\u0442\u0430 8 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441        \/\/\/\/\u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c\u0438 \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b\u0430\u043c\u0438        var blendedResult = Avx2.BlendVariable(colorsBytes, lumsShuffled, rgb_alpha_masks);        \/\/\u041f\u0438\u0448\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442        Vector256.StoreAligned(blendedResult, ptr);         \/\/\/\/\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 8 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439        ptr += (256 \/ 8 \/ sizeof(byte));    }     return ptr; }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u0439 1\/x \u043d\u0430 AVX2<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">private static unsafe bool tryReciprocalSIMD&lt;V&gt;(V* arg1, long count, bool fast) where V : unmanaged {     var elType = __scalarInnerTypeForSIMDExtractor&lt;V&gt;.ScalarElementType; \/\/\u0412\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u0447\u0442\u043e \u0437\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f     if (elType == null)         return false;      var vectorlen = __scalarInnerTypeForSIMDExtractor&lt;V&gt;.VectorLength;     var scalarCount = count * __scalarInnerTypeForSIMDExtractor&lt;V&gt;.VectorLength; #if !DISABLE_NINT     if (typeof(V) == typeof(nint))     {         if (sizeof(nint) == sizeof(int))             return tryReciprocalSIMD&lt;int&gt;((int*)arg1, count, fast);         else             return tryReciprocalSIMD&lt;long&gt;((long*)arg1, count, fast);     }     else if (typeof(V) == typeof(nint2))     {         if (sizeof(nint2) == sizeof(int2))             return tryReciprocalSIMD&lt;int2&gt;((int2*)arg1, count, fast);         else             return tryReciprocalSIMD&lt;long2&gt;((long2*)arg1, count, fast);     }     else if (typeof(V) == typeof(nint3))     {         if (sizeof(nint3) == sizeof(int3))             return tryReciprocalSIMD&lt;int3&gt;((int3*)arg1, count, fast);         else             return tryReciprocalSIMD&lt;long3&gt;((long3*)arg1, count, fast);     }     else if (typeof(V) == typeof(nint4))     {         if (sizeof(nint4) == sizeof(int4))             return tryReciprocalSIMD&lt;int4&gt;((int4*)arg1, count, fast);         else             return tryReciprocalSIMD&lt;long4&gt;((long4*)arg1, count, fast);     }     else if (typeof(V) == typeof(nuint))     {         if (sizeof(nuint) == sizeof(uint))             return tryReciprocalSIMD&lt;uint&gt;((uint*)arg1, count, fast);         else             return tryReciprocalSIMD&lt;ulong&gt;((ulong*)arg1, count, fast);     }     else if (typeof(V) == typeof(nuint2))     {         if (sizeof(nuint2) == sizeof(uint2))             return tryReciprocalSIMD&lt;uint2&gt;((uint2*)arg1, count, fast);         else             return tryReciprocalSIMD&lt;ulong2&gt;((ulong2*)arg1, count, fast);     }     else if (typeof(V) == typeof(nuint3))     {         if (sizeof(nuint3) == sizeof(uint3))             return tryReciprocalSIMD&lt;uint3&gt;((uint3*)arg1, count, fast);         else             return tryReciprocalSIMD&lt;ulong3&gt;((ulong3*)arg1, count, fast);     }     else if (typeof(V) == typeof(nuint4))     {         if (sizeof(nuint4) == sizeof(uint4))             return tryReciprocalSIMD&lt;uint4&gt;((uint4*)arg1, count, fast);         else             return tryReciprocalSIMD&lt;ulong4&gt;((ulong4*)arg1, count, fast);     } #endif #if !DISABLE_HALF     if (_tryReciprocalSIMD_AsTypeV&lt;V, Half&gt;.tryReciprocalSIMD_AsType(arg1, count, elType, scalarCount, vectorlen, fast)) return true; #endif     if (_tryReciprocalSIMD_AsTypeV&lt;V, float&gt;.tryReciprocalSIMD_AsType(arg1, count, elType, scalarCount, vectorlen, fast)) return true;     if (_tryReciprocalSIMD_AsTypeV&lt;V, double&gt;.tryReciprocalSIMD_AsType(arg1, count, elType, scalarCount, vectorlen, fast)) return true;     if (_tryReciprocalSIMD_AsTypeV&lt;V, byte&gt;.tryReciprocalSIMD_AsType(arg1, count, elType, scalarCount, vectorlen, fast)) return true;     if (_tryReciprocalSIMD_AsTypeV&lt;V, short&gt;.tryReciprocalSIMD_AsType(arg1, count, elType, scalarCount, vectorlen, fast)) return true;     if (_tryReciprocalSIMD_AsTypeV&lt;V, ushort&gt;.tryReciprocalSIMD_AsType(arg1, count, elType, scalarCount, vectorlen, fast)) return true;     if (_tryReciprocalSIMD_AsTypeV&lt;V, long&gt;.tryReciprocalSIMD_AsType(arg1, count, elType, scalarCount, vectorlen, fast)) return true;     if (_tryReciprocalSIMD_AsTypeV&lt;V, ulong&gt;.tryReciprocalSIMD_AsType(arg1, count, elType, scalarCount, vectorlen, fast)) return true;     if (_tryReciprocalSIMD_AsTypeV&lt;V, sbyte&gt;.tryReciprocalSIMD_AsType(arg1, count, elType, scalarCount, vectorlen, fast)) return true;     if (_tryReciprocalSIMD_AsTypeV&lt;V, int&gt;.tryReciprocalSIMD_AsType(arg1, count, elType, scalarCount, vectorlen, fast)) return true;     if (_tryReciprocalSIMD_AsTypeV&lt;V, uint&gt;.tryReciprocalSIMD_AsType(arg1, count, elType, scalarCount, vectorlen, fast)) return true;     if (_tryReciprocalSIMD_AsTypeV&lt;V, decimal&gt;.tryReciprocalSIMD_AsType(arg1, count, elType, scalarCount, vectorlen, fast)) return true;      return false; }  static class _tryReciprocalSIMD_AsTypeV&lt;V, T&gt; where V : unmanaged where T : unmanaged {     const int _ReciprCONST = 0x7EF311C2;     static readonly Vector&lt;int&gt; _ReciprCONST_V = new Vector&lt;int&gt;(_ReciprCONST);     public static unsafe bool tryReciprocalSIMD_AsType(V* canvas, long count, Type elType, long scalarCount, long vectorLen, bool fast)     {         unchecked         {             if (elType == typeof(T) &amp;&amp; Vector&lt;T&gt;.IsSupported &amp;&amp; Vector&lt;T&gt;.Count % vectorLen == 0)             {                 \/\/\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c\u0441\u044f                 if ((nint)canvas % simdAlign != 0)                 {                     universal&lt;V&gt;* canvas_u = (universal&lt;V&gt;*)canvas;                     universal&lt;V&gt;* canvas_u_end = (universal&lt;V&gt;*)(canvas + count);                                          while (canvas_u &lt; canvas_u_end)                     {                         if ((nint)canvas_u % simdAlign == 0)                             break;                         else                         {                             *canvas_u = universal&lt;V&gt;.One \/ *canvas_u;                             canvas_u++;                         }                     }                      canvas = (V*)canvas_u;                     count = canvas_u_end - canvas_u;                     scalarCount = count * (sizeof(V) \/ sizeof(T));                 }                  var oneScalar = universal&lt;T&gt;.One;                 var oneVector = new Vector&lt;T&gt;(oneScalar.Value);                  var vectorCount = scalarCount \/ (sizeof(Vector&lt;T&gt;) \/ sizeof(T));                 var cPtr = (Vector&lt;T&gt;*)canvas;                 var canvasEnd = cPtr + vectorCount;                  \/\/\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0444\u043b\u043e\u0430\u0442\u043e\u0432                 bool useFastFP32 = fast &amp;&amp; typeof(T) == typeof(float) &amp;&amp; Vector&lt;int&gt;.Count == Vector&lt;float&gt;.Count &amp;&amp; sizeof(int) == sizeof(float);                  if (useFastFP32)                 {                     Vector&lt;int&gt;* canvasPtrI = (Vector&lt;int&gt;*)cPtr;                     { \/\/\u0414\u0435\u0441\u0435\u0440\u0442\u043d\u044b\u0439 \u0430\u043d\u0440\u043e\u043b\u043b \u043f\u043e 4 \u0448\u0442\u0443\u043a                          Vector&lt;int&gt;* canvasPtrIEnd = (Vector&lt;int&gt;*)canvasEnd;                          var vector_pack4_count = vectorCount \/ 4;                         var canvasEnd4 = cPtr + vector_pack4_count * 4;                         while (canvasPtrI &lt; canvasEnd4)                         {                             *canvasPtrI = _ReciprCONST_V - *canvasPtrI; canvasPtrI++;                             *canvasPtrI = _ReciprCONST_V - *canvasPtrI; canvasPtrI++;                             *canvasPtrI = _ReciprCONST_V - *canvasPtrI; canvasPtrI++;                             *canvasPtrI = _ReciprCONST_V - *canvasPtrI; canvasPtrI++;                         }                     }                     { \/\/\u0425\u0432\u043e\u0441\u0442\u0438\u043a                         Vector&lt;int&gt;* canvasPtrIEnd = (Vector&lt;int&gt;*)canvasEnd;                          while (canvasPtrI &lt; canvasPtrIEnd)                         {                             *canvasPtrI = _ReciprCONST_V - *canvasPtrI;                             canvasPtrI++;                         }                         cPtr = (Vector&lt;T&gt;*)canvasPtrI;                     }                  }                 else                 {                     if (Avx2.IsSupported &amp;&amp; (long)cPtr % 32 == 0 &amp;&amp; typeof(T) == typeof(float) &amp;&amp; Vector&lt;T&gt;.Count == Vector256&lt;T&gt;.Count)                     {                         { \/\/\u0414\u0435\u0441\u0435\u0440\u0442\u043d\u044b\u0439 \u0430\u043d\u0440\u043e\u043b\u043b \u043f\u043e 4 \u0448\u0442\u0443\u043a                             var vector_pack4_count = vectorCount \/ 4;                             var canvasEnd4 = cPtr + vector_pack4_count * 4;                             float* c0, c1, c2, c3;                             while (cPtr &lt; canvasEnd4)                             {                                 var vect0 = Avx2.LoadAlignedVector256(c0 = (float*)cPtr); cPtr++;                                 var vect1 = Avx2.LoadAlignedVector256(c1 = (float*)cPtr); cPtr++;                                 var vect2 = Avx2.LoadAlignedVector256(c2 = (float*)cPtr); cPtr++;                                 var vect3 = Avx2.LoadAlignedVector256(c3 = (float*)cPtr); cPtr++;                                 var vectR0 = Avx2.Reciprocal(vect0);                                 var vectR1 = Avx2.Reciprocal(vect1);                                 var vectR2 = Avx2.Reciprocal(vect2);                                 var vectR3 = Avx2.Reciprocal(vect3);                                  Avx2.Store(c0, vectR0);                                 Avx2.Store(c1, vectR1);                                 Avx2.Store(c2, vectR2);                                 Avx2.Store(c3, vectR3);                             }                         }                         { \/\/\u0425\u0432\u043e\u0441\u0442\u0438\u043a                             while (cPtr &lt; canvasEnd)                             {                                 var vect0 = Avx2.LoadAlignedVector256((float*)cPtr);                                 var vectR0 = Avx2.Reciprocal(vect0);                                 Avx2.Store((float*)cPtr, vectR0);                                 cPtr++;                             }                         }                     }                     else                     {                         { \/\/\u0414\u0435\u0441\u0435\u0440\u0442\u043d\u044b\u0439 \u0430\u043d\u0440\u043e\u043b\u043b \u043f\u043e 4 \u0448\u0442\u0443\u043a                             var vector_pack4_count = vectorCount \/ 4;                             var canvasEnd4 = cPtr + vector_pack4_count * 4;                             while (cPtr &lt; canvasEnd4)                             {                                 *cPtr = oneVector \/ *cPtr; cPtr++;                                 *cPtr = oneVector \/ *cPtr; cPtr++;                                 *cPtr = oneVector \/ *cPtr; cPtr++;                                 *cPtr = oneVector \/ *cPtr; cPtr++;                             }                         }                         { \/\/\u0425\u0432\u043e\u0441\u0442\u0438\u043a                             while (cPtr &lt; canvasEnd)                             {                                 *cPtr = oneVector \/ *cPtr;                                 cPtr++;                             }                         }                     }                 }                  if (useFastFP32)                 {                     \/\/\u041a\u043e\u043d\u0447\u0438\u043a \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0430 universal\u0430\u0445                     \/\/\u0412 \u0431\u044b\u0441\u0442\u0440\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u0442\u0443\u0442 \u0441\u043c\u044b\u0441\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c                     \/\/\u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u043b\u0438\u0441\u044c \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0443\u0448\u043a\u0435                     if (scalarCount % Vector&lt;T&gt;.Count &gt; 0)                     {                         var canvasScalarPtr = (int*)cPtr;                         var canvasEnd2 = (int*)canvas + scalarCount;                         while (canvasScalarPtr &lt; canvasEnd2)                         {                             *canvasScalarPtr = _ReciprCONST_V[0] - *canvasScalarPtr;                             canvasScalarPtr++;                         }                     }                 }                 else                 {                     \/\/\u041a\u043e\u043d\u0447\u0438\u043a \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0430 universal\u0430\u0445                     if (scalarCount % Vector&lt;T&gt;.Count &gt; 0)                     {                         var canvasScalarPtr = (universal&lt;T&gt;*)cPtr;                         var canvasEnd2 = (universal&lt;T&gt;*)canvas + scalarCount;                         while (canvasScalarPtr &lt; canvasEnd2)                         {                             *canvasScalarPtr = oneScalar \/ *canvasScalarPtr;                             canvasScalarPtr++;                         }                     }                 }                  return true;             }             else                 return false;         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0423\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 \u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0435\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u0431\u0443\u0444\u0435\u0440\u043e\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">internal static unsafe bool tryMulAddSIMD&lt;V&gt;(V* arg1, V* arg2, V* k, long count) where V : unmanaged {     var elType = __scalarInnerTypeForSIMDExtractor&lt;V&gt;.ScalarElementType; \/\/\u0412\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u0447\u0442\u043e \u0437\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f     if (elType == null)         return false;      var vectorLen = __scalarInnerTypeForSIMDExtractor&lt;V&gt;.VectorLength;     var scalarCount = count * vectorLen; #if !DISABLE_NINT     if (typeof(V) == typeof(nint))     {         if (sizeof(nint) == sizeof(int))             return tryMulAddSIMD&lt;int&gt;((int*)arg1, (int*)arg2, (int*)k, count);         else             return tryMulAddSIMD&lt;long&gt;((long*)arg1, (long*)arg2, (long*)k, count);     }     else if (typeof(V) == typeof(nint2))     {         if (sizeof(nint2) == sizeof(int2))             return tryMulAddSIMD&lt;int2&gt;((int2*)arg1, (int2*)arg2, (int2*)k, count);         else             return tryMulAddSIMD&lt;long2&gt;((long2*)arg1, (long2*)arg2, (long2*)k, count);     }     else if (typeof(V) == typeof(nint3))     {         if (sizeof(nint3) == sizeof(int3))             return tryMulAddSIMD&lt;int3&gt;((int3*)arg1, (int3*)arg2, (int3*)k, count);         else             return tryMulAddSIMD&lt;long3&gt;((long3*)arg1, (long3*)arg2, (long3*)k, count);     }     else if (typeof(V) == typeof(nint4))     {         if (sizeof(nint4) == sizeof(int4))             return tryMulAddSIMD&lt;int4&gt;((int4*)arg1, (int4*)arg2, (int4*)k, count);         else             return tryMulAddSIMD&lt;long4&gt;((long4*)arg1, (long4*)arg2, (long4*)k, count);     }     else if (typeof(V) == typeof(nuint))     {         if (sizeof(nuint) == sizeof(uint))             return tryMulAddSIMD&lt;uint&gt;((uint*)arg1, (uint*)arg2, (uint*)k, count);         else             return tryMulAddSIMD&lt;ulong&gt;((ulong*)arg1, (ulong*)arg2, (ulong*)k, count);     }     else if (typeof(V) == typeof(nuint2))     {         if (sizeof(nuint2) == sizeof(uint2))             return tryMulAddSIMD&lt;uint2&gt;((uint2*)arg1, (uint2*)arg2, (uint2*)k, count);         else             return tryMulAddSIMD&lt;ulong2&gt;((ulong2*)arg1, (ulong2*)arg2, (ulong2*)k, count);     }     else if (typeof(V) == typeof(nuint3))     {         if (sizeof(nuint3) == sizeof(uint3))             return tryMulAddSIMD&lt;uint3&gt;((uint3*)arg1, (uint3*)arg2, (uint3*)k, count);         else             return tryMulAddSIMD&lt;ulong3&gt;((ulong3*)arg1, (ulong3*)arg2, (ulong3*)k, count);     }     else if (typeof(V) == typeof(nuint4))     {         if (sizeof(nuint4) == sizeof(uint4))             return tryMulAddSIMD&lt;uint4&gt;((uint4*)arg1, (uint4*)arg2, (uint4*)k, count);         else             return tryMulAddSIMD&lt;ulong4&gt;((ulong4*)arg1, (ulong4*)arg2, (ulong4*)k, count);     } #endif #if !DISABLE_HALF     if (_tryMulAddSIMD_AsTypeMask&lt;V, Half&gt;.tryMulAddSIMD_AsType(arg1, arg2, k, count, elType, scalarCount, vectorLen)) return true; #endif     if (_tryMulAddSIMD_AsTypeMask&lt;V, float&gt;.tryMulAddSIMD_AsType(arg1, arg2, k, count, elType, scalarCount, vectorLen)) return true;     if (_tryMulAddSIMD_AsTypeMask&lt;V, double&gt;.tryMulAddSIMD_AsType(arg1, arg2, k, count, elType, scalarCount, vectorLen)) return true;     if (_tryMulAddSIMD_AsTypeMask&lt;V, byte&gt;.tryMulAddSIMD_AsType(arg1, arg2, k, count, elType, scalarCount, vectorLen)) return true;     if (_tryMulAddSIMD_AsTypeMask&lt;V, short&gt;.tryMulAddSIMD_AsType(arg1, arg2, k, count, elType, scalarCount, vectorLen)) return true;     if (_tryMulAddSIMD_AsTypeMask&lt;V, ushort&gt;.tryMulAddSIMD_AsType(arg1, arg2, k, count, elType, scalarCount, vectorLen)) return true;     if (_tryMulAddSIMD_AsTypeMask&lt;V, long&gt;.tryMulAddSIMD_AsType(arg1, arg2, k, count, elType, scalarCount, vectorLen)) return true;     if (_tryMulAddSIMD_AsTypeMask&lt;V, ulong&gt;.tryMulAddSIMD_AsType(arg1, arg2, k, count, elType, scalarCount, vectorLen)) return true;     if (_tryMulAddSIMD_AsTypeMask&lt;V, sbyte&gt;.tryMulAddSIMD_AsType(arg1, arg2, k, count, elType, scalarCount, vectorLen)) return true;     if (_tryMulAddSIMD_AsTypeMask&lt;V, int&gt;.tryMulAddSIMD_AsType(arg1, arg2, k, count, elType, scalarCount, vectorLen)) return true;     if (_tryMulAddSIMD_AsTypeMask&lt;V, uint&gt;.tryMulAddSIMD_AsType(arg1, arg2, k, count, elType, scalarCount, vectorLen)) return true;     if (_tryMulAddSIMD_AsTypeMask&lt;V, decimal&gt;.tryMulAddSIMD_AsType(arg1, arg2, k, count, elType, scalarCount, vectorLen)) return true;      return false; }  static class _tryMulAddSIMD_AsTypeMask&lt;V, T&gt; where V : unmanaged where T : unmanaged {     public static unsafe bool tryMulAddSIMD_AsType(V* canvas, V* arg, V* k, long count, Type elType, long scalarCount, long vectorLen)     {         if (elType == typeof(T) &amp;&amp; Vector&lt;T&gt;.IsSupported)         {             \/\/\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c\u0441\u044f             if ((nint)canvas % simdAlign != 0 || (nint)arg % simdAlign != 0 || (nint)k % simdAlign != 0)             {                 universal&lt;V&gt;* canvas_u = (universal&lt;V&gt;*)canvas;                 universal&lt;V&gt;* k_u = (universal&lt;V&gt;*)k;                 universal&lt;V&gt;* arg_u = (universal&lt;V&gt;*)arg;                 universal&lt;V&gt;* canvas_u_end = (universal&lt;V&gt;*)(canvas + count);                  while (canvas_u &lt; canvas_u_end)                 {                     if ((nint)canvas_u % simdAlign == 0 &amp;&amp; (nint)arg_u % simdAlign == 0 &amp;&amp; (nint)k_u % simdAlign == 0)                         break;                     else                     {                         *canvas_u += *arg_u * *k_u;                         canvas_u++;                         arg_u++;                         k_u++;                     }                 }                  canvas = (V*)canvas_u;                 arg = (V*)arg_u;                 count = canvas_u_end - canvas_u;                 scalarCount = count * (sizeof(V) \/ sizeof(T));             }              var vectorCount = scalarCount \/ (sizeof(Vector&lt;T&gt;) \/ sizeof(T));             var canvasPtr = (Vector&lt;T&gt;*)canvas;             var canvasEnd = canvasPtr + vectorCount;             var argPtr = (Vector&lt;T&gt;*)arg;             var kPtr = (Vector&lt;T&gt;*)k;              if (typeof(T) == typeof(float) &amp;&amp; Hardcode.FloatAVX_only_for_aligned_32bytes_memory.IsGoodPointers(canvas, arg, k))             {                 float* canvasF = (float*)canvas;                 float* argF = (float*)arg;                 float* kF = (float*)kPtr;                 if (Hardcode.FloatAVX_only_for_aligned_32bytes_memory.TryAddMul(ref canvasF, ref argF, ref kF, count))                 {                     canvasPtr = (Vector&lt;T&gt;*)canvasF;                     argPtr = (Vector&lt;T&gt;*)argF;                     kPtr = (Vector&lt;T&gt;*)kF;                 }             }             else             {                 { \/\/\u041f\u0430\u0447\u043a\u0438 \u043f\u043e 4                     var pack4count = vectorCount \/ 4;                     var canvasEnd4 = (Vector&lt;T&gt;*)canvas + pack4count * 4;                     while (canvasPtr &lt; canvasEnd4)                     {                         *canvasPtr += *argPtr * *kPtr; canvasPtr++; argPtr++; kPtr++;                         *canvasPtr += *argPtr * *kPtr; canvasPtr++; argPtr++; kPtr++;                         *canvasPtr += *argPtr * *kPtr; canvasPtr++; argPtr++; kPtr++;                         *canvasPtr += *argPtr * *kPtr; canvasPtr++; argPtr++; kPtr++;                     }                 }             }             { \/\/\u0425\u0432\u043e\u0441\u0442\u0438\u043a                 while (canvasPtr &lt; canvasEnd)                 {                     *canvasPtr += *argPtr * *kPtr;                     canvasPtr++; argPtr++; kPtr++;                 }             }               \/\/\u041a\u043e\u043d\u0447\u0438\u043a \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0430 universal\u0430\u0445             if (scalarCount % Vector&lt;T&gt;.Count &gt; 0)             {                 var canvasScalarPtr = (universal&lt;T&gt;*)canvasPtr;                 var argScalarPtr = (universal&lt;T&gt;*)argPtr;                 var canvasEnd2 = (universal&lt;T&gt;*)canvas + scalarCount;                 var KU = (universal&lt;V&gt;*)kPtr;                 while (canvasScalarPtr &lt; canvasEnd2)                 {                     *canvasScalarPtr += *argScalarPtr * *KU;                     canvasScalarPtr++; argScalarPtr++; KU++;                 }             }             return true;         }         else             return false;     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e\u0441\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0430 \u0447\u0438\u0441\u043b\u043e<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">private static unsafe bool tryMulSIMD&lt;V&gt;(V* arg1, V arg2, long count) where V : unmanaged {     var elType = __scalarInnerTypeForSIMDExtractor&lt;V&gt;.ScalarElementType; \/\/\u0412\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u0447\u0442\u043e \u0437\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f     if (elType == null)         return false;      var vectorlen = __scalarInnerTypeForSIMDExtractor&lt;V&gt;.VectorLength;     var scalarCount = count * __scalarInnerTypeForSIMDExtractor&lt;V&gt;.VectorLength; #if !DISABLE_NINT     if (typeof(V) == typeof(nint))     {         if (sizeof(nint) == sizeof(int))             return tryMulSIMD&lt;int&gt;((int*)arg1, universal.Create(arg2).ConvertTo&lt;int&gt;(), count);         else             return tryMulSIMD&lt;long&gt;((long*)arg1, universal.Create(arg2).ConvertTo&lt;long&gt;(), count);     }     else if (typeof(V) == typeof(nint2))     {         if (sizeof(nint2) == sizeof(int2))             return tryMulSIMD&lt;int2&gt;((int2*)arg1, universal.Create(arg2).ConvertTo&lt;int2&gt;(), count);         else             return tryMulSIMD&lt;long2&gt;((long2*)arg1, universal.Create(arg2).ConvertTo&lt;long2&gt;(), count);     }     else if (typeof(V) == typeof(nint3))     {         if (sizeof(nint3) == sizeof(int3))             return tryMulSIMD&lt;int3&gt;((int3*)arg1, universal.Create(arg2).ConvertTo&lt;int3&gt;(), count);         else             return tryMulSIMD&lt;long3&gt;((long3*)arg1, universal.Create(arg2).ConvertTo&lt;long3&gt;(), count);     }     else if (typeof(V) == typeof(nint4))     {         if (sizeof(nint4) == sizeof(int4))             return tryMulSIMD&lt;int4&gt;((int4*)arg1, universal.Create(arg2).ConvertTo&lt;int4&gt;(), count);         else             return tryMulSIMD&lt;long4&gt;((long4*)arg1, universal.Create(arg2).ConvertTo&lt;long4&gt;(), count);     }     else if (typeof(V) == typeof(nuint))     {         if (sizeof(nuint) == sizeof(uint))             return tryMulSIMD&lt;uint&gt;((uint*)arg1, universal.Create(arg2).ConvertTo&lt;uint&gt;(), count);         else             return tryMulSIMD&lt;ulong&gt;((ulong*)arg1, universal.Create(arg2).ConvertTo&lt;ulong&gt;(), count);     }     else if (typeof(V) == typeof(nuint2))     {         if (sizeof(nuint2) == sizeof(uint2))             return tryMulSIMD&lt;uint2&gt;((uint2*)arg1, universal.Create(arg2).ConvertTo&lt;uint2&gt;(), count);         else             return tryMulSIMD&lt;ulong2&gt;((ulong2*)arg1, universal.Create(arg2).ConvertTo&lt;ulong2&gt;(), count);     }     else if (typeof(V) == typeof(nuint3))     {         if (sizeof(nuint3) == sizeof(uint3))             return tryMulSIMD&lt;uint3&gt;((uint3*)arg1, universal.Create(arg2).ConvertTo&lt;uint3&gt;(), count);         else             return tryMulSIMD&lt;ulong3&gt;((ulong3*)arg1, universal.Create(arg2).ConvertTo&lt;ulong3&gt;(), count);     }     else if (typeof(V) == typeof(nuint4))     {         if (sizeof(nuint4) == sizeof(uint4))             return tryMulSIMD&lt;uint4&gt;((uint4*)arg1, universal.Create(arg2).ConvertTo&lt;uint4&gt;(), count);         else             return tryMulSIMD&lt;ulong4&gt;((ulong4*)arg1, universal.Create(arg2).ConvertTo&lt;ulong4&gt;(), count);     } #endif #if !DISABLE_HALF     if (_tryMulSIMD_AsTypeV&lt;V, Half&gt;.tryMulSIMD_AsType(arg1, arg2, count, elType, scalarCount, vectorlen)) return true; #endif     if (_tryMulSIMD_AsTypeV&lt;V, float&gt;.tryMulSIMD_AsType(arg1, arg2, count, elType, scalarCount, vectorlen)) return true;     if (_tryMulSIMD_AsTypeV&lt;V, double&gt;.tryMulSIMD_AsType(arg1, arg2, count, elType, scalarCount, vectorlen)) return true;     if (_tryMulSIMD_AsTypeV&lt;V, byte&gt;.tryMulSIMD_AsType(arg1, arg2, count, elType, scalarCount, vectorlen)) return true;     if (_tryMulSIMD_AsTypeV&lt;V, short&gt;.tryMulSIMD_AsType(arg1, arg2, count, elType, scalarCount, vectorlen)) return true;     if (_tryMulSIMD_AsTypeV&lt;V, ushort&gt;.tryMulSIMD_AsType(arg1, arg2, count, elType, scalarCount, vectorlen)) return true;     if (_tryMulSIMD_AsTypeV&lt;V, long&gt;.tryMulSIMD_AsType(arg1, arg2, count, elType, scalarCount, vectorlen)) return true;     if (_tryMulSIMD_AsTypeV&lt;V, ulong&gt;.tryMulSIMD_AsType(arg1, arg2, count, elType, scalarCount, vectorlen)) return true;     if (_tryMulSIMD_AsTypeV&lt;V, sbyte&gt;.tryMulSIMD_AsType(arg1, arg2, count, elType, scalarCount, vectorlen)) return true;     if (_tryMulSIMD_AsTypeV&lt;V, int&gt;.tryMulSIMD_AsType(arg1, arg2, count, elType, scalarCount, vectorlen)) return true;     if (_tryMulSIMD_AsTypeV&lt;V, uint&gt;.tryMulSIMD_AsType(arg1, arg2, count, elType, scalarCount, vectorlen)) return true;     if (_tryMulSIMD_AsTypeV&lt;V, decimal&gt;.tryMulSIMD_AsType(arg1, arg2, count, elType, scalarCount, vectorlen)) return true;      return false; } static class _tryMulSIMD_AsTypeV&lt;V, T&gt; where V : unmanaged where T : unmanaged {     static readonly int vLen = PepeHelper.GetVectorLength&lt;V&gt;();     public static unsafe bool tryMulSIMD_AsType(V* canvas, V arg, long count, Type elType, long scalarCount, long vectorLen)     {         if ((long)canvas % sizeof(Vector&lt;T&gt;) != 0)             return false;         if (elType == typeof(T) &amp;&amp; Vector&lt;T&gt;.IsSupported &amp;&amp; Vector&lt;T&gt;.Count % vectorLen == 0)         {             \/\/\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c\u0441\u044f             if ((nint)canvas % simdAlign != 0)             {                 universal&lt;V&gt;* canvas_u = (universal&lt;V&gt;*)canvas;                 universal&lt;V&gt; M = universal.Create(arg);                 universal&lt;V&gt;* canvas_u_end = (universal&lt;V&gt;*)(canvas + count);                  while (canvas_u &lt; canvas_u_end)                 {                     if ((nint)canvas_u % simdAlign == 0)                         break;                     else                     {                         *canvas_u *= M;                         canvas_u++;                     }                 }                  canvas = (V*)canvas_u;                 count = canvas_u_end - canvas_u;                 scalarCount = count * (sizeof(V) \/ sizeof(T));             }              Vector&lt;T&gt; VV = default;             {                 V* ptr = (V*)&amp;VV;                 V* end = ptr + Vector&lt;T&gt;.Count \/ vectorLen;                 while (ptr &lt; end)                     *ptr++ = arg;             }               var vectorCount = scalarCount \/ (sizeof(Vector&lt;T&gt;) \/ sizeof(T));             var cPtr = (Vector&lt;T&gt;*)canvas;             var canvasEnd = cPtr + vectorCount;             if (typeof(T) == typeof(float) &amp;&amp; Hardcode.FloatAVX_only_for_aligned_32bytes_memory.IsGoodPointers(cPtr))             {                 float* canvasF = (float*)cPtr;                 if (Hardcode.FloatAVX_only_for_aligned_32bytes_memory.TryMul(ref canvasF, (float*)&amp;VV, count))                 {                     cPtr = (Vector&lt;T&gt;*)canvasF;                 }             }             else             {                 {                     var vector_pack4_count = vectorCount \/ 4;                     var canvasEnd4 = cPtr + vector_pack4_count * 4;                     while (cPtr &lt; canvasEnd4)                     {                         *cPtr *= VV; cPtr++;                         *cPtr *= VV; cPtr++;                         *cPtr *= VV; cPtr++;                         *cPtr *= VV; cPtr++;                     }                 }             }             { \/\/\u0425\u0432\u043e\u0441\u0442\u0438\u043a                 while (cPtr &lt; canvasEnd)                 {                     *cPtr *= VV;                     cPtr++;                 }             }               \/\/\u041a\u043e\u043d\u0447\u0438\u043a \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0430 universal\u0430\u0445             if (scalarCount % Vector&lt;T&gt;.Count &gt; 0)             {                 var canvasScalarPtr = (universal&lt;V&gt;*)cPtr;                 var argScalar = *(universal&lt;V&gt;*)&amp;arg;                 var canvasEnd2 = (universal&lt;V&gt;*)canvas + scalarCount \/ vLen;                 while (canvasScalarPtr &lt; canvasEnd2)                 {                     *canvasScalarPtr *= argScalar;                     canvasScalarPtr++;                 }             }              return true;         }         else             return false;     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F%D0%A1%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C\" id=\"\u0411\u044b\u0441\u0442\u0440\u0430\u044f\u0421\u0442\u0435\u043f\u0435\u043d\u044c\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438<\/h2>\n<p>\u041e\u0434\u043d\u0443 \u0438\u0437\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0438 \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<p>\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0434\u0438\u043e\u0434\u043e\u0432 \u043d\u0435\u043b\u0438\u043d\u0435\u0439\u043d\u0430: \u0435\u0441\u043b\u0438 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0435\u0451 \u0441 0% \u0434\u043e 100%, \u0442\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0434\u0438\u043e\u0434 \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0437\u043a\u043e, \u043f\u043e\u0442\u043e\u043c \u043e\u0447\u0435\u043d\u044c\u00a0\u0431\u044b\u0441\u0442\u0440\u043e, \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u043b\u0430\u0432\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f \u043a 100%. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b42\/dff\/f8a\/b42dfff8aca690d813b14ab609c63edb.webp\" width=\"1609\" height=\"1014\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b42\/dff\/f8a\/b42dfff8aca690d813b14ab609c63edb.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b42\/dff\/f8a\/b42dfff8aca690d813b14ab609c63edb.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0432\u044b\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0446\u0432\u0435\u0442\u0430-\u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043f\u043e\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u043d\u0430 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b, \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043d\u0435\u043b\u0438\u043d\u0435\u0439\u043d\u044b\u043c\u0438, \u043d\u043e \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443: \u0434\u0432\u0435 \u043d\u0435\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0441\u0442\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u0443\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/011\/f9c\/c2f\/011f9cc2f5d39459ab78b8394ef16099.png\" width=\"278\" height=\"112\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/011\/f9c\/c2f\/011f9cc2f5d39459ab78b8394ef16099.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/011\/f9c\/c2f\/011f9cc2f5d39459ab78b8394ef16099.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/557\/e8e\/61c\/557e8e61c9b1325cb2513264afc1f2cd.webp\" width=\"1417\" height=\"844\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/557\/e8e\/61c\/557e8e61c9b1325cb2513264afc1f2cd.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/557\/e8e\/61c\/557e8e61c9b1325cb2513264afc1f2cd.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u042d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u0433\u0430\u043c\u043c\u0430\u2011\u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0435\u0439<\/strong>, \u043e\u043d\u0430 \u043a\u0440\u0430\u0439\u043d\u0435 \u0432\u0430\u0436\u043d\u0430 \u0432\u00a0\u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0438 \u043d\u0430\u0448\u0438\u0445 \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0438\u0445 \u0434\u0435\u043b\u0430\u0445 \u0442\u043e\u0436\u0435. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0433\u0430\u043c\u043c\u0430\u2011\u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e: \u0435\u0441\u043b\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437\u00a0\u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0446\u0432\u0435\u0442\u0430 RGB \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e\u043c \u043e\u0442 0.0\u00a0\u0434\u043e 1.0, \u0442\u043e \u043d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0435\u0441\u0442\u0438 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0432\u00a0\u0441\u0442\u0435\u043f\u0435\u043d\u044c.<\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c 2315\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432, \u0446\u0432\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437\u00a0\u043d\u0438\u0445 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u0440\u0435\u043c\u044f \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u0412\u0441\u0435\u0433\u043e 6945\u00a0\u0447\u0438\u0441\u0435\u043b, \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u00a0\u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0434\u043b\u044f\u00a0\u0433\u0430\u043c\u043c\u0430\u2011\u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438.<\/p>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043b\u044f\u00a0\u043f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0438\u00a0\u2014 \u0432\u00a0\u043d\u0435\u0439 \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c <strong>Pow<\/strong>, \u0432\u043e\u0437\u0432\u043e\u0434\u044f\u0449\u0438\u0439 \u0432\u00a0\u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043d\u0430\u0431\u043e\u0440\u044b, \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0438 \u0431\u0443\u0444\u0435\u0440\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/883\/5a4\/aec\/8835a4aecb62de85f87521647417e015.png\" width=\"838\" height=\"700\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/883\/5a4\/aec\/8835a4aecb62de85f87521647417e015.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/883\/5a4\/aec\/8835a4aecb62de85f87521647417e015.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <strong>Pow <\/strong>\u0432\u00a0\u043f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f <strong>X<sup>n<\/sup><\/strong> \u0441\u0442\u0440\u0430\u0448\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f, \u0438 \u0441\u0438\u043c\u0434\u043e\u0432 \u0434\u043b\u044f\u00a0\u043d\u0435\u0451 \u043d\u0435\u0442 \ud83d\ude41 \u0421\u0438\u0434\u0438 \u043d\u0435\u00a0\u0441\u0438\u043c\u0434\u0438, \u043f\u043e\u00a0\u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0447\u0438\u0442\u0430\u0439. \u0418 \u0435\u0441\u043b\u0438 \u0432\u00a0\u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u043c \u043e\u043a\u043e\u0448\u043a\u0435 \u0443\u00a0\u043d\u0430\u0441\u00a0\u0431\u044b\u043b\u0438 <strong>8-\u0431\u0438\u0442\u043d\u044b\u0435<\/strong> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0434\u043b\u044f\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439 (\u0432\u0441\u0435\u0433\u043e <strong>256\u00a0<\/strong>\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432), \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0438\u0445 \u0438 \u0437\u0430\u0431\u044b\u0442\u044c \u043f\u0440\u043e\u00a0\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u00a0\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043d\u0430\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440, \u0437\u0434\u0435\u0441\u044c, \u0441 <strong>float3<\/strong>, \u044d\u0442\u043e \u043d\u0435\u00a0\u043f\u0440\u043e\u043a\u0430\u0442\u0438\u0442. <\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \u041e\u043d \u0441\u0430\u043c \u043f\u043e\u00a0\u0441\u0435\u0431\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u0431\u044b\u0441\u0442\u0440\u044b\u0439, \u0442\u0430\u043a \u0435\u0449\u0451 \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u00a0\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043c\u0434\u0430\u043c\u0438.<\/p>\n<p>\u042d\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0438 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0432\u00a0\u0441\u0442\u0435\u043f\u0435\u043d\u044c. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0441\u043e\u0431\u0443\u044e <strong>\u0432\u043e\u043b\u0448\u0435\u0431\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435\u00a0\u0436\u0435 \u0431\u0438\u0442\u044b \u0447\u0438\u0441\u043b\u0430 \u0442\u043e \u043a\u0430\u043a\u00a0\u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0442\u043e \u043a\u0430\u043a\u00a0\u0446\u0435\u043b\u043e\u0435<\/strong>.<\/p>\n<pre><code class=\"cpp\">\/\/\u041c\u0430\u0433\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f float fastPow(float a, float b) {   union    {      float d; \/\/\u0431\u0438\u0442\u044b u \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435     int x; \/\/\u0431\u0438\u0442\u044b u \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0446\u0435\u043b\u043e\u0435   } u = { a };      \/\/\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443   u.x = (int)(b * (u.x - 1072632447) + 1072632447);      return u.d; } \/\/\u041c\u0430\u0433\u0438\u044f \u043a\u043e\u043d\u0447\u0430\u0435\u0442\u0441\u044f<\/code><\/pre>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439, \u0432\u00a0\u0441\u0435\u0442\u0438 \u043f\u043b\u0430\u0432\u0430\u044e\u0442 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f\u00a0\u0447\u0438\u0441\u0435\u043b \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u043e\u0439 (32\u00a0\u0431\u0438\u0442\u0430) \u0438 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 (64\u00a0\u0431\u0438\u0442\u0430). \u041f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0443\u00a0\u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0432\u043c\u0435\u043d\u044f\u0435\u043c\u0430\u044f, \u0430\u00a0\u0432\u043e\u0442 \u0443\u00a0\u043e\u0434\u0438\u043d\u0430\u0440\u043d\u043e\u0439 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f\u00a0\u043c\u043e\u0438\u0445 \u0446\u0432\u0435\u0442\u043e\u0432, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0445\u0441\u044f \u043a\u0430\u043a\u00a0float3) \u043e\u043d\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <strong>40%<\/strong>. \u0421\u043e\u0440\u043e\u043a \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432, \u041a\u0430\u0440\u043b!<\/p>\n<p>\u041c\u0435\u043d\u044f \u044d\u0442\u043e \u0432\u044b\u0431\u0435\u0441\u0438\u043b\u043e\u00a0\u2014 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u0442\u044c. \u041f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u0434\u0443\u043c\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043c\u043d\u043e\u0436\u0430\u0442\u044c \u043d\u0430\u00a0\u0447\u0442\u043e\u2011\u043d\u0438\u0431\u0443\u0434\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u00a0\u044d\u0442\u0430\u043b\u043e\u043d\u0443, \u043d\u043e\u00a0\u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0442\u0443\u043f\u043e\u0439 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u00a0\u0440\u0430\u0431\u043e\u0442\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441\u00a0\u043a\u0430\u0436\u0434\u043e\u0439. <strong>\u0418 \u043d\u0430\u0448\u0451\u043b.<\/strong> <\/p>\n<p><strong>\u041d\u0430\u0434\u043e \u043d\u0435 1072632447, \u0430 1065353210<\/strong>!<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6a0\/eb5\/6c4\/6a0eb56c4ac79998cc5a1fb9bc3c6e39.webp\" width=\"740\" height=\"370\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6a0\/eb5\/6c4\/6a0eb56c4ac79998cc5a1fb9bc3c6e39.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6a0\/eb5\/6c4\/6a0eb56c4ac79998cc5a1fb9bc3c6e39.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0430\u0441\u044c \u0441 <strong>40%<\/strong> \u0434\u043e <strong>8%<\/strong>. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430\u00a0\u0430\u043d\u0440\u043e\u043b\u043b\u0430\u0445 \u0438 <strong>SIMD<\/strong>, \u044d\u0442\u0430 \u0433\u0430\u043c\u043c\u0430 \u0432 <strong>235\u00a0\u0440\u0430\u0437<\/strong>\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430\u0438\u0432\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430. \u0417\u0430\u0447\u0435\u043c \u0432\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0432\u044b\u043c\u0430\u0437\u0430\u043b\u0438 \u0443\u0431\u043e\u0433\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0441\u00a0\u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439, \u044f \u043d\u0435\u00a0\u043f\u043e\u043d\u0438\u043c\u0430\u044e. \u041f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0440\u0447\u0438\u0442.<\/p>\n<details class=\"spoiler\">\n<summary>\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u0442\u043e\u0447\u043d\u0430\u044f \u043d\u0435\u0442\u043e\u0447\u043d\u0430\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043d\u0430 \u0441\u0438\u043c\u0434\u0430\u0445<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">[StructLayout(LayoutKind.Explicit)] public unsafe struct float_int {     [FieldOffset(0)]     public int i;     [FieldOffset(0)]     public float f;     public static implicit operator float_int(float f) =&gt; new float_int { f = f };     public static implicit operator float_int(int i) =&gt; new float_int { i = i }; } [StructLayout(LayoutKind.Explicit)] unsafe struct float_intV {     [FieldOffset(0)]     public Vector&lt;int&gt; I;     [FieldOffset(0)]     public Vector&lt;float&gt; F;     public static implicit operator float_intV(float f) =&gt; new float_intV { F = new Vector&lt;float&gt;(f) };     public static implicit operator float_intV(int i) =&gt; new float_intV { I = new Vector&lt;int&gt;(i) };     public static implicit operator float_intV(Vector&lt;float&gt; f) =&gt; new float_intV { F = f };     public static implicit operator float_intV(Vector&lt;int&gt; i) =&gt; new float_intV { I = i }; }  \/\/\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0438 \u0434\u043e\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0445\u0432\u043e\u0441\u0442\u0438\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0441\u043d\u0430\u0440\u0443\u0436\u0438  \/\/\u0421\u0442\u0435\u043f\u0435\u043d\u044c - \u0441\u043a\u0430\u043b\u044f\u0440 static unsafe Vector&lt;float&gt;* VBD_fast_powSIMD(Vector&lt;float&gt;* begin, long vectorCount, Vector&lt;float&gt; power) {     float_intV POW = power;     Vector&lt;int&gt;* ptr = (Vector&lt;int&gt;*)begin;     Vector&lt;int&gt;* end = (Vector&lt;int&gt;*)begin + vectorCount;          \/\/var C = new Vector&lt;int&gt;(0x3fef127f);     var C = new Vector&lt;int&gt;(0x3f7ffffa);     var CF = Vector.ConvertToSingle(C);      { \/\/\u0430\u043d\u0440\u043e\u043b\u043b \u043f\u043e 4         var end4 = (Vector&lt;int&gt;*)begin + vectorCount \/ 4 * 4;         while (ptr &lt; end4)         {             *ptr = Vector.ConvertToInt32(POW.F * Vector.ConvertToSingle(*ptr - C) + CF); ptr++;             *ptr = Vector.ConvertToInt32(POW.F * Vector.ConvertToSingle(*ptr - C) + CF); ptr++;             *ptr = Vector.ConvertToInt32(POW.F * Vector.ConvertToSingle(*ptr - C) + CF); ptr++;             *ptr = Vector.ConvertToInt32(POW.F * Vector.ConvertToSingle(*ptr - C) + CF); ptr++;         }     }      while (ptr &lt; end)     {         *ptr = Vector.ConvertToInt32(POW.F * Vector.ConvertToSingle(*ptr - C) + CF);         ptr++;     }     return (Vector&lt;float&gt;*)ptr; }  \/\/\u0421\u0442\u0435\u043f\u0435\u043d\u044c - \u0432\u0435\u043a\u0442\u043e\u0440 3D static unsafe Vector&lt;float&gt;* VBD_fast_powSIMD_triple(Vector&lt;float&gt;* begin, long vectorCount, Vector&lt;float&gt; power_A, Vector&lt;float&gt; power_B, Vector&lt;float&gt; power_C) {      float_intV POW_A = power_A;     float_intV POW_B = power_B;     float_intV POW_C = power_C;      Vector&lt;int&gt;* ptr = (Vector&lt;int&gt;*)begin;     Vector&lt;int&gt;* end = (Vector&lt;int&gt;*)begin + vectorCount;      var C = new Vector&lt;int&gt;(0x3f7ffffa);     var CF = Vector.ConvertToSingle(C);      { \/\/\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0430\u0447\u043a\u0443\u0435\u043c\u0441\u044f \u043f\u043e 3. \u042d\u0442\u043e \u043d\u0435 \u0430\u043d\u0440\u043e\u043b\u043b, \u0442.\u043a. \u0443 \u043d\u0430\u0441 3 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u043e\u0434\u0440\u044f\u0434         var end3 = (Vector&lt;int&gt;*)begin + vectorCount \/ 3 * 3;         while (ptr &lt; end3)         {             *ptr = Vector.ConvertToInt32(POW_A.F * Vector.ConvertToSingle(*ptr - C) + CF); ptr++;             *ptr = Vector.ConvertToInt32(POW_B.F * Vector.ConvertToSingle(*ptr - C) + CF); ptr++;             *ptr = Vector.ConvertToInt32(POW_C.F * Vector.ConvertToSingle(*ptr - C) + CF); ptr++;         }     }      while (ptr &lt; end)     {         *ptr = Vector.ConvertToInt32(POW_A.F * Vector.ConvertToSingle(*ptr - C) + CF); ptr++;         if (ptr &gt;= end) break;         *ptr = Vector.ConvertToInt32(POW_B.F * Vector.ConvertToSingle(*ptr - C) + CF); ptr++;         if (ptr &gt;= end) break;         *ptr = Vector.ConvertToInt32(POW_C.F * Vector.ConvertToSingle(*ptr - C) + CF); ptr++;     }     return (Vector&lt;float&gt;*)ptr; }<\/code><\/pre>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c39\/461\/3f1\/c394613f1f67961d7853074059615a8a.png\" alt=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u043e\u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441 \u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u0431\u0435\u0437\" title=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u043e\u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441 \u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u0431\u0435\u0437\" width=\"5675\" height=\"1928\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c39\/461\/3f1\/c394613f1f67961d7853074059615a8a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c39\/461\/3f1\/c394613f1f67961d7853074059615a8a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u043e\u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441 \u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u0431\u0435\u0437<\/figcaption><\/div>\n<\/figure>\n<p><a href=\"https:\/\/raw.githubusercontent.com\/VBDUnit\/images_and_code_store\/refs\/heads\/main\/FastPowVBD.png\" rel=\"noopener noreferrer nofollow\">\u0425\u0430\u0439\u0440\u0435\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0442\u0435\u0441\u0442\u043e\u0432<\/a><\/p>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0432\u044b\u044f\u0432\u0438\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443: \u0438 \u043f\u0440\u0438\u00a0\u0441\u0442\u0430\u0440\u043e\u0439, \u0438 \u043f\u0440\u0438\u00a0\u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0435 \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 0\u00a0\u0432\u00a0\u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043e\u0442 0,999\u00a0999\u00a0\u0434\u043e 2.1\u00a0\u0432\u044b\u0434\u0430\u0451\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 10<sup>35<\/sup>. \u0418 \u043a\u043e\u0433\u0434\u0430 \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u043e\u0442 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u0435\u0442 \u0432\u00a0\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c HDR\u2192SDR, \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0439\u0442\u0438 \u043d\u0430\u00a0\u043f\u043b\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u0443\u044e \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0438 \u044f\u0432\u0438\u0442\u044c \u0441\u0432\u0435\u0440\u0445\u043d\u043e\u0432\u0443\u044e. \u041f\u043e\u0434\u043f\u0451\u0440 \u043a\u043e\u0441\u0442\u044b\u043b\u0451\u043c: \u0435\u0441\u043b\u0438 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043b\u0435\u0436\u0438\u0442 \u0432\u00a0\u044d\u0442\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435, \u0442\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043f\u0438\u0445\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043e\u0442 0.000001\u00a0\u0434\u043e 1000000. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0441\u00a0\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438.<\/p>\n<p><a class=\"anchor\" name=\"%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%86%D0%B8%D0%B8\" id=\"\u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438<\/h2>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4b3\/289\/d78\/4b3289d78ed70d31cdec1c097e6e6c62.webp\" width=\"12324\" height=\"2600\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/4b3\/289\/d78\/4b3289d78ed70d31cdec1c097e6e6c62.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4b3\/289\/d78\/4b3289d78ed70d31cdec1c097e6e6c62.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0443\u00a0\u043d\u0430\u0441 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u041b\u0435\u043d\u0442\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 36 \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u0441\u0446\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0445 \u0430\u0431\u044b \u043a\u0430\u043a<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u043d\u0435\u00a0\u043e\u0434\u0438\u043d, \u0430\u00a0\u0434\u0432\u0430: \u043e\u0434\u0438\u043d \u0441\u0432\u0435\u0442\u0438\u0442 \u043d\u0430\u0437\u0430\u0434, \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0434\u043e\u043b\u044c \u0441\u0442\u0435\u043d<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0442\u0443\u0440\u044b \u0432\u043e\u0441\u044c\u043c\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435, \u0430\u00a0\u043d\u0435\u00a0\u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435\u00a0\u2014 \u0443\u0433\u043b\u044b\u2011\u0442\u043e \u0441\u043a\u043e\u0448\u0435\u043d\u044b<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/881\/213\/e1a\/881213e1af5fbd48856822c0e885940f.webp\" width=\"780\" height=\"351\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/881\/213\/e1a\/881213e1af5fbd48856822c0e885940f.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/881\/213\/e1a\/881213e1af5fbd48856822c0e885940f.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u0435\u0440\u0445\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437\u00a0\u0434\u0432\u0443\u0445 \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0430\u0436 \u0438\u0437\u00a0\u0448\u0435\u0441\u0442\u0438 \u043a\u0443\u0441\u043a\u043e\u0432 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0445 \u043b\u0435\u043d\u0442\u00a0\u2014 3\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438 3\u00a0\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445. \u041a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0446\u0435\u043f\u043b\u0435\u043d\u044b \u0434\u0440\u0443\u0433 \u0441\u00a0\u0434\u0440\u0443\u0433\u043e\u043c \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u043e\u0442\u043a\u043d\u0443\u0442\u044b \u0432\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/865\/b00\/bf1\/865b00bf1f395c67dcc86cc04faecf5f.webp\" width=\"3840\" height=\"2160\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/865\/b00\/bf1\/865b00bf1f395c67dcc86cc04faecf5f.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/865\/b00\/bf1\/865b00bf1f395c67dcc86cc04faecf5f.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><a href=\"https:\/\/raw.githubusercontent.com\/VBDUnit\/images_and_code_store\/refs\/heads\/main\/pu_and_controllers\/stm32_16k.webp\" rel=\"noopener noreferrer nofollow\">16K<\/a><\/p>\n<p>\u041f\u043e\u0434\u00a0\u044d\u0442\u043e \u043c\u0435\u0441\u0438\u0432\u043e \u043d\u0430\u0434\u043e \u043a\u0430\u043a\u2011\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u044b. \u041a\u0430\u043a\u2011\u0442\u043e \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043f\u043e\u0441\u0435\u0434\u0435\u0442\u044c, \u043f\u043e\u043a\u0430 \u0440\u0430\u0441\u043f\u0443\u0442\u044b\u0432\u0430\u0435\u0448\u044c \u0433\u0434\u0435, \u043a\u0442\u043e \u0438 \u043a\u0430\u043a\u00a0\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d.<\/p>\n<p>\u042f \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e\u00a0\u043b\u0435\u043d\u0442\u044b \u0443\u00a0\u043c\u0435\u043d\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u043a\u0430\u043a\u2011\u0442\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7c6\/6b2\/793\/7c66b27933b1bd997a2137b1d836c647.webp\" alt=\"\u0422\u043e \u0435\u0441\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u0430\u044f \u0438 \u043a\u043e\u043d\u0442\u0440\u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u0430\u044f \u0434\u0438\u0447\u044c\" title=\"\u0422\u043e \u0435\u0441\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u0430\u044f \u0438 \u043a\u043e\u043d\u0442\u0440\u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u0430\u044f \u0434\u0438\u0447\u044c\" width=\"780\" height=\"307\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7c6\/6b2\/793\/7c66b27933b1bd997a2137b1d836c647.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7c6\/6b2\/793\/7c66b27933b1bd997a2137b1d836c647.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u043e \u0435\u0441\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u0430\u044f \u0438 \u043a\u043e\u043d\u0442\u0440\u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u0430\u044f \u0434\u0438\u0447\u044c<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u043b\u0435\u043d\u0442 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0430\u0441\u043f\u0435\u043a\u0442: \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e\u00a0\u043d\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 <strong>float3<\/strong>, \u0430\u00a0\u043d\u0435\u00a0<strong>byte3<\/strong>, \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u0430 \u0441\u0442\u0430\u0440\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043e\u0444\u0442\u0430. \u0424\u043e\u043a\u0443\u0441 \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u0430\u043a\u00a0\u0438 \u0441\u0430\u043c\u0438 \u043b\u0435\u043d\u0442\u044b, \u043f\u043e\u2011\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e <strong>byte3<\/strong>.<\/p>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e\u00a0\u043c\u0435\u0436\u0434\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u043c\u0438 <strong>byte3\u00a0<\/strong>\u043b\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0441\u043e\u0444\u0442\u043e\u043c \u043d\u0430\u00a0<strong>float3\u00a0<\/strong>\u043f\u0440\u043e\u0441\u0438\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f. \u0418 \u043e\u043d\u0430 \u0435\u0441\u0442\u044c.<\/p>\n<p><strong>\u0421\u043e\u0444\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u00a0\u0441\u00a0\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438, \u0430\u00a0\u0441\u00a0\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043b\u0435\u043d\u0442\u0430\u043c\u0438, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u043c\u0438 \u0438\u0437\u00a0\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432. <\/strong>\u0426\u0432\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u043b\u0430\u0432\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <strong>float3\u00a0<\/strong>\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <strong>HDR<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c <strong>\u044f\u0440\u0447\u0435 100%<\/strong>.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/739\/f3a\/c15\/739f3ac15acb4cb67b20a572c2902927.webp\" alt=\"\u0427\u0451\u0440\u043d\u044b\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u043c\u043e\u0436\u043d\u043e\" title=\"\u0427\u0451\u0440\u043d\u044b\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u043c\u043e\u0436\u043d\u043e\" width=\"2614\" height=\"623\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/739\/f3a\/c15\/739f3ac15acb4cb67b20a572c2902927.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/739\/f3a\/c15\/739f3ac15acb4cb67b20a572c2902927.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0427\u0451\u0440\u043d\u044b\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u043c\u043e\u0436\u043d\u043e<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e\u0444\u0442\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u00a0\u0437\u0430\u0434\u0430\u043d\u0438\u044e \u0446\u0432\u0435\u0442\u043e\u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u043d\u0430\u00a0\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043b\u0435\u043d\u0442\u0430\u0445, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435, \u0434\u043b\u044f\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043d\u0430\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438 <strong>\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043b\u0435\u043d\u0442\u044b \u0441\u00a0\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c\u0438<\/strong>, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437 <strong>float3\u00a0<\/strong>\u0432 <strong>byte3\u00a0<\/strong>\u0438 <strong>\u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f <\/strong>\u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u00a0\u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043b\u0435\u043d\u0442 \u043a\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443. \u0418 \u0434\u0430\u00a0\u2014 \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0448\u0435\u0441\u0442\u044c. \u0421\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0431\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u00a0\u043a\u0430\u043a\u0438\u0445\u2011\u0442\u043e \u043b\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0430\u043a\u2011\u0442\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b, \u0430\u00a0\u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u044e.<\/p>\n<h3>1. \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c<\/h3>\n<p>\u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f <strong><u>\u0431\u043b\u043e\u043a\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f<\/u><\/strong> \u0438 <strong><u>\u0422\u0422\u0425 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430<\/u><\/strong>, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u043e\u0433\u043e\u0440\u043e\u0434.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bc5\/259\/1b7\/bc52591b7d03e4cc7362a70da38a6f1f.webp\" width=\"3840\" height=\"1509\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/bc5\/259\/1b7\/bc52591b7d03e4cc7362a70da38a6f1f.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bc5\/259\/1b7\/bc52591b7d03e4cc7362a70da38a6f1f.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>2. \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043b\u0435\u043d\u0442\u044b<\/h3>\n<p>\u0412\u00a0\u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0442\u0435 \u0441\u0430\u043c\u044b\u0435 <strong>17\u00a0\u043b\u0435\u043d\u0442<\/strong>, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0\u043a\u0443\u0441\u043e\u0447\u043a\u043e\u0432. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u00a0\u043a\u0443\u0441\u043e\u0447\u043a\u043e\u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0434\u0440\u0443\u0433 \u043e\u0442\u00a0\u0434\u0440\u0443\u0433\u0430 \u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u0440\u0430\u044f\u043c \u0442\u0435\u043b\u0438\u043a\u0430. \u0417\u0434\u0435\u0441\u044c\u00a0\u0436\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043b\u0435\u043d\u0442\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u0431\u043b\u043e\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f <span class=\"habrahidden\">(\u0432 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0445 <\/span><strong><span class=\"habrahidden\">3<\/span><\/strong><span class=\"habrahidden\">)<\/span>.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/157\/606\/2d5\/1576062d58e6d3afd0726fb8c9089e9d.webp\" width=\"1560\" height=\"614\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/157\/606\/2d5\/1576062d58e6d3afd0726fb8c9089e9d.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/157\/606\/2d5\/1576062d58e6d3afd0726fb8c9089e9d.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>3. \u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043b\u0435\u043d\u0442<\/h3>\n<p>\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430\u00a0\u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043b\u0435\u043d\u0442\u00a0\u2014 \u043e\u0442\u00a0\u0442\u0430\u043a\u043e\u0433\u043e\u2011\u0442\u043e \u0434\u043e\u00a0\u0442\u0430\u043a\u043e\u0433\u043e\u2011\u0442\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430. \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a, \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0432\u043e\u0438 <strong><u>\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u00a0\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435<\/u><\/strong>\u00a0\u2014 \u0441\u043e\u0444\u0442 \u0437\u043d\u0430\u0435\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0438\u043e\u0434\u0430 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0432 \u00ab\u043c\u0438\u0440\u043e\u0432\u044b\u0445\u00bb \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u0432\u00a0\u043c\u0438\u043b\u043b\u0438\u043c\u0435\u0442\u0440\u0430\u0445. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/330\/54a\/4e2\/33054a4e2e4159dfb1a904798d1ddc3c.webp\" width=\"3840\" height=\"1509\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/330\/54a\/4e2\/33054a4e2e4159dfb1a904798d1ddc3c.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/330\/54a\/4e2\/33054a4e2e4159dfb1a904798d1ddc3c.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0414\u0430\u00a0\u2014 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0435\u0437\u0430\u043b \u043b\u0435\u043d\u0442\u044b \u043d\u0430\u00a0\u043a\u0443\u0441\u043a\u0438 \u0431\u043e\u043a\u043e\u0440\u0435\u0437\u0430\u043c\u0438, \u043f\u0440\u0438\u043a\u043b\u0435\u0438\u043b \u0438\u0445, \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0432\u043e\u0434\u0430\u043c\u0438, \u0430\u00a0\u0437\u0430\u0442\u0435\u043c \u043d\u0430\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u043d\u043e\u0432\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b \u043e\u0431\u0440\u0430\u0442\u043d\u043e. <strong>\u0422\u0430\u043a \u043d\u0430\u0434\u043e.<\/strong><\/p>\n<h3>4. \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043b\u0435\u043d\u0442\u044b<\/h3>\n<p><strong><u>\u041d\u0430\u0431\u043e\u0440\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043b\u0435\u043d\u0442.<\/u><\/strong> \u0412 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0445 <strong>16 \u0448\u0442\u0443\u043a<\/strong>: \u043f\u0430\u0440\u0430 \u0432\u0435\u0440\u0445\u043d\u0438\u0445, \u043f\u0430\u0440\u0430 \u043d\u0438\u0436\u043d\u0438\u0445, \u0431\u043e\u043a\u043e\u0432\u0443\u0448\u043a\u0438 \u0438 \u0441\u043a\u043e\u0441\u044b. \u0417\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0433\u0440\u0430\u043d\u044c\u044e \u0432\u0441\u0435\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 <strong>\u043a\u0430\u043a \u0441 \u0435\u0434\u0438\u043d\u044b\u043c \u0446\u0435\u043b\u044b\u043c<\/strong>, \u0438\u043b\u0438 \u043a\u0430\u043a\u0438\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0435\u0440\u0445\u043d\u0438\u043c \u043b\u0435\u0432\u044b\u043c \u0441\u043a\u043e\u0441\u043e\u043c, \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044f\u0441\u044c, \u043a\u0443\u0434\u0430 \u0438 \u0447\u0442\u043e \u0442\u0430\u043c \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043e \u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7db\/025\/0b8\/7db0250b84d3b3686a159440dc7f8d5c.webp\" width=\"3840\" height=\"1509\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7db\/025\/0b8\/7db0250b84d3b3686a159440dc7f8d5c.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7db\/025\/0b8\/7db0250b84d3b3686a159440dc7f8d5c.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u0432\u00a0\u0441\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u043c \u043e\u043a\u043e\u0448\u043a\u0435 \u0441\u043a\u043e\u0441\u044b \u043d\u0435\u00a0\u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043b\u0435\u043d\u0442\u0430\u043c\u0438. \u0422\u0430\u043c\u00a0\u0431\u044b\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0435\u043d\u0442\u044b, \u0430\u00a0\u0441\u043a\u043e\u0441\u044b \u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u043f\u043e\u043f\u043e\u043b\u0430\u043c \u0438 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043a\u0438 \u0441\u0447\u0438\u0442\u0430\u043b\u0438\u0441\u044c \u0437\u0430\u00a0\u043a\u0440\u0430\u044f \u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0440\u044f\u0434\u043e\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043b\u0435\u043d\u0442\u044b\u00a0\u2014 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043b\u0438\u00a0\u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439.<\/p>\n<h3>5. \u041a\u043e\u043d\u0442\u0443\u0440\u044b<\/h3>\n<p><strong><u>\u041a\u043e\u043d\u0442\u0443\u0440\u044b<\/u> <\/strong>\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043b\u0435\u043d\u0442. \u0412\u00a0\u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0445 \u0434\u0432\u0430: <strong>\u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442<\/strong> \u0438 <strong>\u0431\u043b\u0438\u0436\u043d\u0438\u0439 \u0441\u0432\u0435\u0442<\/strong>. \u041b\u0435\u043d\u0442\u044b \u0432\u00a0\u043e\u0431\u043e\u0438\u0445 \u043a\u043e\u043d\u0442\u0443\u0440\u0430\u0445 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u044b \u043f\u043e\u00a0\u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c1e\/eab\/273\/c1eeab273c7a8f041e26b2656429d129.webp\" width=\"3840\" height=\"1509\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c1e\/eab\/273\/c1eeab273c7a8f041e26b2656429d129.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c1e\/eab\/273\/c1eeab273c7a8f041e26b2656429d129.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>6. \u0418\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044f<\/h3>\n<p><strong><u>\u0418\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044f<\/u><\/strong> \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0432\u0441\u0435 \u043a\u043e\u043d\u0442\u0443\u0440\u044b \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/934\/150\/769\/9341507697e18604137690f1be77b388.webp\" width=\"3840\" height=\"1509\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/934\/150\/769\/9341507697e18604137690f1be77b388.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/934\/150\/769\/9341507697e18604137690f1be77b388.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043b\u043e\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0438\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0446\u0432\u0435\u0442\u0430 \u0434\u0438\u043e\u0434\u043e\u0432 \u0438 \u0434\u0430\u0436\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0412\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0439, \u0433\u0434\u0435 \u0432\u0438\u0441\u044f\u0442 \u043b\u0435\u043d\u0442\u044b. \u0414\u0430, \u043c\u043e\u0436\u043d\u043e \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u0432\u0435\u0441\u0438\u0442\u044c \u0432 <strong>5D <\/strong>\u043c\u0438\u0440\u0435, \u0430\u00a0\u0434\u0440\u0443\u0433\u043e\u0439\u00a0\u2014 \u0432\u00a0\u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u043c <strong>8D<\/strong>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043a\u043b\u0435\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439 \u0434\u043b\u044f\u00a0\u0442\u0435\u0442\u0440\u0430\u0445\u0440\u043e\u043c\u0430\u0442\u043e\u0432 \u0441\u0432\u043e\u0439 \u043f\u044f\u0442\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u0433\u0430\u043b\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u0441\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u00a0\u2014 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c. \u0425\u043e\u0440\u043e\u0448\u043e, \u043a\u043e\u0433\u0434\u0430 \u0441\u0430\u043c\u044b\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u0432\u0430\u0436\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u0443\u0436\u0435 \u043d\u0430\u00a0\u0431\u0430\u0437\u0435 \u044d\u0442\u0438\u0445 \u0441\u043b\u043e\u0451\u0432 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043c\u043e\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0443\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u00ab<strong>\u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442<\/strong>\u00bb \u0438 \u00ab<strong>\u0431\u043b\u0438\u0436\u043d\u0438\u0439 \u0441\u0432\u0435\u0442<\/strong>\u00bb, \u00ab<strong>\u043b\u0435\u0432\u044b\u0439 \u0442\u0435\u043b\u0438\u043a<\/strong>\u00bb, \u00ab<strong>\u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u043f\u0440\u0430\u0432\u044b\u0439 \u0441\u043a\u043e\u0441<\/strong>\u00bb \u0438 \u043f\u0440\u043e\u0447\u0435\u0435.<\/p>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u044d\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432\u00a0\u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438\u2011\u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0439 \u0441\u043e\u0444\u0442 \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0437\u0430\u0442\u043e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u00a0\u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0431\u0443\u044e \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443 \u0431\u0435\u0437\u00a0\u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u043d\u0438\u044f, \u043d\u043e\u00a0\u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u00a0\u2014 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0433\u0435\u043c\u043e\u0440\u043d\u043e, \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043d\u044f\u0442\u0435\u043d, \u0430\u00a0\u043f\u0443\u0442\u044c \u043a\u00a0\u043d\u0435\u043c\u0443 \u0442\u0435\u0440\u043d\u0438\u0441\u0442. \u0422\u0430\u043a \u0447\u0442\u043e\u00a0\u0441\u043b\u043e\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043c\u043e\u0435\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u044f \u0442\u0443\u043f\u043e \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0434\u0438\u043b \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using Ambiknight; using Ambiknight.LEDCore.Physical; using Ambiknight.LEDCore.Installations; using Ambiknight.Pepectors; using System.Collections.ObjectModel;  namespace Ambiknight.Kernel {     public record struct LEDInfo(int GlobalLEDIndex, TV TV, Tier Tier, Side Side, LogicalStripe LogicalStripe, PhysicalSpan PhysicalSpan, int LocalPhysicalSpanIndex)     {         public PhysicalStripe PhysicalStripe =&gt; PhysicalSpan.ParentPhysicalStripe;         public PhysicalStripeInfo PhysicalInfo =&gt; PhysicalStripe.Info;     }      public class StandardInstallation : PlacedLogicalStripe1DInstallation&lt;StandardPhysicalInstallation, Chain, LogicalStripe, PhysicalSpan, PhysicalStripe, float3, STM32Color, float2, float4&gt;     {         public BackRingChain Back =&gt; Chains[0] as BackRingChain;         public WideRingChain Wide =&gt; Chains[1] as WideRingChain;          public StandardInstallation() : base(new StandardPhysicalInstallation().Dim(out var physical), (a, b) =&gt; (Pepe.Min(a.xy, b.xy), Pepe.Max(a.zw, b.zw)), createBack(physical), createWide(physical))         {             Left = new(\"\u0414\u0432\u0435 \u043b\u0435\u0432\u044b\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0438 \u043d\u0430 \u043b\u0435\u0432\u043e\u043c \u0442\u0435\u043b\u0438\u043a\u0435\", Back.Left, Wide.Left);             Top = new(\"\u0414\u0432\u0435 \u0432\u0435\u0440\u0445\u043d\u0438\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0438 \u043d\u0430\u0434 \u0432\u0441\u0435\u043c\u0438 \u0442\u0440\u0435\u043c\u044f \u0442\u0435\u043b\u0438\u043a\u0430\u043c\u0438\", Back.Top, Wide.Top);             Right = new(\"\u0414\u0432\u0435 \u043f\u0440\u0430\u0432\u044b\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0438 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043c \u0442\u0435\u043b\u0438\u043a\u0435\", Back.Right, Wide.Right);             Bottom = new(\"\u0414\u0432\u0435 \u043d\u0438\u0436\u043d\u0438\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0438 \u043f\u043e\u0434 \u0432\u0441\u0435\u043c\u0438 \u0442\u0440\u0435\u043c\u044f \u0442\u0435\u043b\u0438\u043a\u0430\u043c\u0438\", Back.Bottom, Wide.Bottom);              LeftTopBevel = new(\"\u041b\u0435\u0432\u044b\u0439 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0441\u043a\u043e\u0441\", Back.LeftTopBevel, Wide.LeftTopBevel);             LeftBottomBevel = new(\"\u041b\u0435\u0432\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0441\u043a\u043e\u0441\", Back.LeftBottomBevel, Wide.LeftBottomBevel);             RightTopBevel = new(\"\u041f\u0440\u0430\u0432\u044b\u0439 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0441\u043a\u043e\u0441\", Back.RightTopBevel, Wide.RightTopBevel);             RightBottomBevel = new(\"\u041f\u0440\u0430\u0432\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0441\u043a\u043e\u0441\", Back.RightBottomBevel, Wide.RightBottomBevel);                          LEDInfos = new ReadOnlyCollection&lt;LEDInfo&gt;(buildLEDIndex());             InfosByTV = new ReadOnlyDictionary&lt;TV, ReadOnlyCollection&lt;LEDInfo&gt;&gt;(buildTVIndex());         }          LEDInfo[] buildLEDIndex()         {             var result = new LEDInfo[LEDCount];             var t = LEDInfos;             int globalIndex = 0;             foreach (var virtualStripe in Stripes)                 foreach (var physicalSpan in virtualStripe.Spans)                     for (int physicalSpanLEDIndex = 0; physicalSpanLEDIndex &lt; physicalSpan.LEDCount; physicalSpanLEDIndex++)                     {                         result[globalIndex] = new(globalIndex, physicalSpan.TV, physicalSpan.Tier, physicalSpan.Side, virtualStripe, physicalSpan, physicalSpanLEDIndex);                         globalIndex++;                     }             if (globalIndex != LEDCount)                 throw new Exception(\"\u041d\u0435 \u0432\u0441\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b \u043e\u043a\u0443\u0447\u0435\u043d\u044b!\");             return result;         }         Dictionary&lt;TV,ReadOnlyCollection&lt;LEDInfo&gt;&gt; buildTVIndex()         {             var tv = new Dictionary&lt;TV, List&lt;LEDInfo&gt;&gt;();             tv[TV.Left] = new List&lt;LEDInfo&gt;();             tv[TV.Center] = new List&lt;LEDInfo&gt;();             tv[TV.Right] = new List&lt;LEDInfo&gt;();              foreach (var item in LEDInfos)                 tv[item.TV].Add(item);              return tv.Select(a =&gt; KeyValuePair.Create(a.Key, new ReadOnlyCollection&lt;LEDInfo&gt;(a.Value))).ToDictionary();         }         public ReadOnlyCollection&lt;LEDInfo&gt; LEDInfos { get; }         public ReadOnlyDictionary&lt;TV, ReadOnlyCollection&lt;LEDInfo&gt;&gt; InfosByTV { get; }          \/\/\u0411\u0443\u0438\u043c \u043c\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0451 \u0432 \u043c\u0438\u043b\u043b\u0438\u043c\u0435\u0442\u0440\u0430\u0445         \/\/\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u0432 2\u0414. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438 \u0432 3\u0414, \u0442.\u043a. \u0442\u0435\u043b\u0438\u043a\u0438 \u0448\u0435\u0432\u0435\u043b\u044f\u0442\u0441\u044f         \/\/\u041d\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u0442\u0430 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0447\u0442\u0438 0, \u0430 \u0433\u0435\u043c\u043e\u0440\u0430 \u0433\u043e\u0440\u0430\u0430\u0430\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435         \/\/\u0422\u0430\u043a \u0447\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u0435\u043b\u0438\u043a\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438          \/\/\u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u043b\u0435\u0432\u043e\u0433\u043e \u043a\u0440\u0430\u044f \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043b\u0435\u043d\u0442\u044b (\u043d\u0435 \u0441\u043a\u043e\u0441, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u043b\u0435\u043d\u0442\u0430)         \/\/\u041d\u0430\u0448 \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u0439 \u043a\u043e\u043d\u0442\u0443\u0440 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0445 \u043b\u0435\u043d\u0442 - \u043d\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a, \u0430 \u0432\u043e\u0441\u044c\u043c\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a         \/\/\u0422\u0430\u043a \u043a\u0430\u043a \u0443\u0433\u043b\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043a\u043e\u0448\u0435\u043d\u044b         \/\/\u042d\u0442\u043e \u0442\u043e\u0436\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c          \/\/ \u0411\u043b\u0438\u0436\u043d\u0438\u0439 \u0441\u0432\u0435\u0442         static BackRingChain createBack(StandardPhysicalInstallation physical)         {              \/\/\u0412\u0435\u0440\u0445\u043d\u044f\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 ---             var topCord = -343;             var top = new TopStripe                (                    Tier.Back,                    new SideTopPhysicalSpan(physical.LeftTV.Back.TopStripe, 143, (-1739, topCord), 0, (-738, topCord)),                    new SideTopPhysicalSpan(physical.LeftTV.Back.FragmentaryStripe, 12, (-726, topCord), 0, (-642, topCord)),                    new CenterTopPhysicalSpan(physical.CenterTV.Fragmentary, 22, (-583, topCord), 45, (-422, topCord), Tier.Back),                    new CenterTopPhysicalSpan(physical.CenterTV.TopBack, 0, (-410, topCord), 143, (590, topCord)),                    new SideTopPhysicalSpan(physical.RightTV.Back.FragmentaryStripe, 0, (642, topCord), 13, (733, topCord)),                    new SideTopPhysicalSpan(physical.RightTV.Back.TopStripe, 0, (751, topCord), 142, (1745, topCord))                );             var c1 = top.LEDCount;             var c2 = top.Spans.Select(a =&gt; a.LEDCount).Sum();              \/\/\u041f\u0440\u0430\u0432\u044b\u0439 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0441\u043a\u043e\u0441 \\             var rightTopBevel = new RightTopBevelStripe(Tier.Back, new SideBevelPhysicalSpan(Side.BevelRightTop, physical.RightTV.Back.FragmentaryStripe, 14, (1758, -335), 27, (1822, -271)));              \/\/\u041f\u0440\u0430\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437 |             var right = new RightStripe(Tier.Back, new SideRightPhysicalSpan(physical.RightTV.Back.FragmentaryStripe, 28, (1829, -256), 101, (1829, 250)));              \/\/\u041f\u0440\u0430\u0432\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0441\u043a\u043e\u0441 \/             var rightBottomBevel = new RightBottomBevelStripe(Tier.Back, new SideBevelPhysicalSpan(Side.BevelRightBottom, physical.RightTV.Back.FragmentaryStripe, 102, (1822, 274), 118, (1740, 338)));              \/\/\u041d\u0438\u0436\u043d\u044f\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0421\u041f\u0420\u0410\u0412\u0410 \u041d\u0410\u041b\u0415\u0412\u041e (\u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442!) ---             var bottomCord = 342;             var bottom = new BottomStripe                 (                     Tier.Back,                     new SideBottomPhysicalSpan(physical.RightTV.Back.BottomStripe, 143, (1726, bottomCord), 0, (725, bottomCord)),                     new SideBottomPhysicalSpan(physical.RightTV.Back.FragmentaryStripe, 130, (718, bottomCord), 119, (641, bottomCord)),                     new CenterPhysicalSpan(Side.Bottom, physical.CenterTV.BottomBack, 141, (585, bottomCord), 0, (-408, bottomCord)),                     new CenterPhysicalSpan(Side.Bottom, physical.CenterTV.Fragmentary, 92, (-418, bottomCord), 69, (-579, bottomCord), Tier.Back),                     new SideBottomPhysicalSpan(physical.LeftTV.Back.FragmentaryStripe, 116, (-643, bottomCord), 126, (-712, bottomCord)),                     new SideBottomPhysicalSpan(physical.LeftTV.Back.BottomStripe, 0, (-723, bottomCord), 143, (-1724, bottomCord))                 );              \/\/\u041d\u0438\u0436\u043d\u0438\u0439 \u043b\u0435\u0432\u044b\u0439 \u0441\u043a\u043e\u0441 \u0421\u041d\u0418\u0417\u0423 \u0412\u0412\u0415\u0420\u0425 \\             var leftBottomBevel = new LeftBottomBevelStripe(Tier.Back, new SideBevelPhysicalSpan(Side.BevelLeftBottom, physical.LeftTV.Back.FragmentaryStripe, 115, (-1743, 335), 100, (-1821, 275)));              \/\/\u041b\u0435\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0421\u041d\u0418\u0417\u0423 \u0412\u0412\u0415\u0420\u0425 |             var left = new LeftStripe(Tier.Back, new SideLeftPhysicalSpan(physical.LeftTV.Back.FragmentaryStripe, 99, (-1829, 253), 26, (-1829, -253)));              \/\/\u041b\u0435\u0432\u044b\u0439 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0441\u043a\u043e\u0441 \u0421\u041d\u0418\u0417\u0423 \u0412\u0412\u0415\u0420\u0425 \/             var leftTopBevel = new LeftTopBevelStripe(Tier.Back, new SideBevelPhysicalSpan(Side.BevelLeftTop, physical.LeftTV.Back.FragmentaryStripe, 25, (-1819, -273), 13, (-1760, -333)));              \/\/\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0443\u0440 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0432\u043e\u0441\u044c\u043c\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432             var result = new BackRingChain                 (                     \"\u041a\u043e\u043d\u0442\u0443\u0440 \u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430\",                     top,                     rightTopBevel,                     right,                     rightBottomBevel,                     bottom,                     leftBottomBevel,                     left,                     leftTopBevel                 );             return result;         }          \/\/\u0414\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442         static WideRingChain createWide(StandardPhysicalInstallation physical)         {             \/\/\u0412\u0435\u0440\u0445\u043d\u044f\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430             var topCord = -343;             var top = new TopStripe                (                    Tier.Wide,                    new SideTopPhysicalSpan(physical.LeftTV.Wide.TopStripe, 143, (-1739, topCord), 0, (-738, topCord)),                    new SideTopPhysicalSpan(physical.LeftTV.Wide.FragmentaryStripe, 11, (-722, topCord), 0, (-645, topCord)),                    new CenterTopPhysicalSpan(physical.CenterTV.Fragmentary, 0, (-576, topCord), 21, (-428, topCord), Tier.Wide ),                    new CenterTopPhysicalSpan(physical.CenterTV.TopWide, 0, (-404, topCord), 142, (589, topCord)),                    new SideTopPhysicalSpan(physical.RightTV.Wide.FragmentaryStripe, 0, (646, topCord), 10, (723, topCord)),                    new SideTopPhysicalSpan(physical.RightTV.Wide.TopStripe, 0, (737, topCord), 143, (1738, topCord))                );              \/\/\u041f\u0440\u0430\u0432\u044b\u0439 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0441\u043a\u043e\u0441             var rightTopBevel = new RightTopBevelStripe(Tier.Wide, new SideBevelPhysicalSpan(Side.BevelRightTop, physical.RightTV.Wide.FragmentaryStripe, 11, (1761, -328), 22, (1814, -274)));              \/\/\u041f\u0440\u0430\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437             var right = new RightStripe(Tier.Wide, new SideRightPhysicalSpan(physical.RightTV.Wide.FragmentaryStripe, 23, (1824, -252), 95, (1824, 248)));              \/\/\u041f\u0440\u0430\u0432\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0441\u043a\u043e\u0441             var rightBottomBevel = new RightBottomBevelStripe(Tier.Wide, new SideBevelPhysicalSpan(Side.BevelRightBottom, physical.RightTV.Wide.FragmentaryStripe, 96, (1813, 275), 109, (1745, 329)));              \/\/\u041d\u0438\u0436\u043d\u044f\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0421\u041f\u0420\u0410\u0412\u0410 \u041d\u0410\u041b\u0415\u0412\u041e (\u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442!)             var bottomCord = 342;             var bottom = new BottomStripe                 (                     Tier.Wide,                     new SideBottomPhysicalSpan(physical.RightTV.Wide.BottomStripe, 142, (1719, bottomCord), 0, (725, bottomCord)),                     new SideBottomPhysicalSpan(physical.RightTV.Wide.FragmentaryStripe, 120, (712, bottomCord), 110, (642, bottomCord)),                     new CenterPhysicalSpan(Side.Bottom, physical.CenterTV.BottomWide, 143, (586, bottomCord), 0, (-414, bottomCord)),                     new CenterPhysicalSpan(Side.Bottom, physical.CenterTV.Fragmentary, 68, (-425, bottomCord), 46, (-579, bottomCord), Tier.Wide),                     new SideBottomPhysicalSpan(physical.LeftTV.Wide.FragmentaryStripe, 111, (-650, bottomCord), 120, (-712, bottomCord)),                     new SideBottomPhysicalSpan(physical.LeftTV.Wide.BottomStripe, 0, (-726, bottomCord), 142, (-1720, bottomCord))                 );              \/\/\u041d\u0438\u0436\u043d\u0438\u0439 \u043b\u0435\u0432\u044b\u0439 \u0441\u043a\u043e\u0441 \u0421\u041d\u0418\u0417\u0423 \u0412\u0412\u0415\u0420\u0425             var leftBottomBevel = new LeftBottomBevelStripe(Tier.Wide, new SideBevelPhysicalSpan(Side.BevelLeftBottom, physical.LeftTV.Wide.FragmentaryStripe, 110, (-1746, 328), 97, (-1813, 275)));              \/\/\u041b\u0435\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0421\u041d\u0418\u0417\u0423 \u0412\u0412\u0415\u0420\u0425             var left = new LeftStripe(Tier.Wide, new SideLeftPhysicalSpan(physical.LeftTV.Wide.FragmentaryStripe, 96, (-1824, 250), 24, (-1824, -249)));              \/\/\u041b\u0435\u0432\u044b\u0439 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0441\u043a\u043e\u0441 \u0421\u041d\u0418\u0417\u0423 \u0412\u0412\u0415\u0420\u0425             var leftTopBevel = new LeftTopBevelStripe(Tier.Wide, new SideBevelPhysicalSpan(Side.BevelLeftTop, physical.LeftTV.Wide.FragmentaryStripe, 23, (-1815, -274), 12, (-1760, -328)));              \/\/\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0443\u0440 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0432\u043e\u0441\u044c\u043c\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432             var result = new WideRingChain                 (                     \"\u041a\u043e\u043d\u0442\u0443\u0440 \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430\",                     top,                     rightTopBevel,                     right,                     rightBottomBevel,                     bottom,                     leftBottomBevel,                     left,                     leftTopBevel                 );             return result;         }          public LeftMultichain Left { get; }         public TopMultichain Top { get; }         public RightMultichain Right { get; }         public BottomMultichain Bottom { get; }          public LeftTopBevelMultichain LeftTopBevel { get; }         public RightTopBevelMultichain RightTopBevel { get; }         public LeftBottomBevelMultichain LeftBottomBevel { get; }         public RightBottomBevelMultichain RightBottomBevel { get; }          public Chain LeftBevels { get; }         public Chain RightBevels { get; }         public Chain TopBevels { get; }         public Chain BottomBevels { get; }          protected override void dispose(string callerMemberName, int callerLineNumber, string callerFilePath)         {             base.dispose(callerMemberName, callerLineNumber, callerFilePath);         }      } } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u00a0\u0432\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u0435\u0451 \u0443\u0440\u043e\u0432\u043d\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0432\u00a0\u0432\u0438\u0434\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u0444\u0442\u0430, \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u00a0\u043d\u0435\u0439 \u043a\u0430\u043a\u0438\u0435\u2011\u0442\u043e \u0446\u0432\u0435\u0442\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435\u043b\u044c\u0437\u044f. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 <em>\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c <\/em>1D\u2011\u043a\u0430\u0434\u0440\u0435, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443. \u042d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a\u00a0\u043c\u044b \u043d\u0435\u00a0\u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u00a0\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u043c 2D\u2011\u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0443\u00a0\u043a\u043e\u043c\u043f\u0430: \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0440\u0438\u0441\u0443\u0435\u043c \u0432\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c 2D\u2011\u0431\u0443\u0444\u0435\u0440\u0435 \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438, \u0430\u00a0\u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0435\u0433\u043e \u043d\u0430\u00a0\u0434\u0438\u0441\u043f\u043b\u0435\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u043e\u043f\u0438\u0441\u0430\u043d \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u043a\u0430\u0434\u0440 \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043b\u0435\u043d\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using Ambiknight; using Ambiknight.LEDFrames;  namespace Ambiknight.Kernel {     public class Frame : LEDFrame&lt;FrameSpan, StandardInstallation&gt;     {         public Frame(StandardInstallation? targetLEDInstallation = null) : base(targetLEDInstallation ?? new StandardInstallation())         {             Back = buildPack(TargetLEDInstallation.Back);             Wide = buildPack(TargetLEDInstallation.Wide);              Left = new(TargetLEDInstallation, Back.Left, Wide.Left);             Top = new(TargetLEDInstallation, Back.Top, Wide.Top);             Right = new(TargetLEDInstallation, Back.Right, Wide.Right);             Bottom = new(TargetLEDInstallation, Back.Bottom, Wide.Bottom);              LeftTopBevel = new FrameSpanPair(TargetLEDInstallation, Back.LeftTopBevel, Wide.LeftTopBevel);             RightTopBevel = new FrameSpanPair(TargetLEDInstallation, Back.RightTopBevel, Wide.RightTopBevel);             LeftBottomBevel = new FrameSpanPair(TargetLEDInstallation, Back.LeftBottomBevel, Wide.LeftBottomBevel);             RightBottomBevel = new FrameSpanPair(TargetLEDInstallation, Back.RightBottomBevel, Wide.RightBottomBevel);             Both = new FrameSpanPair(TargetLEDInstallation, new FrameSpan(this, 0, TargetLEDInstallation.Back.LEDCount), new FrameSpan(this, TargetLEDInstallation.Back.LEDCount, TargetLEDInstallation.Wide.LEDCount));              Bevels = new Bevels(RightTopBevel, RightBottomBevel, LeftBottomBevel, LeftTopBevel);              TopBevels = new TopBevelPair(TargetLEDInstallation, LeftTopBevel, RightTopBevel);             LeftBevels = new LeftBevelPair(TargetLEDInstallation, LeftTopBevel, LeftBottomBevel);             BottomBevels = new BottomBevelPair(TargetLEDInstallation, LeftBottomBevel, RightBottomBevel);             RightBevels = new RightBevelPair(TargetLEDInstallation, RightTopBevel, RightBottomBevel);              {                 (FrameSpanPair top, FrameSpanPair bottom, FrameSpanPair vertical, FrameSpanPair topBevel, FrameSpanPair bottomBevel) = getTVPairs(TV.Left);                 LeftTV = new LeftTVSpanCollection(top, bottom, vertical, topBevel, bottomBevel);             }             {                 (FrameSpanPair top, FrameSpanPair bottom, _, _, _) = getTVPairs(TV.Center);                 CenterTV = new CenterTVSpanCollection(top, bottom);             }             {                 (FrameSpanPair top, FrameSpanPair bottom, FrameSpanPair vertical, FrameSpanPair topBevel, FrameSpanPair bottomBevel) = getTVPairs(TV.Right);                 RightTV = new RightTVSpanCollection(top, bottom, vertical, topBevel, bottomBevel);             }              TVs = new ReadonlyListionary&lt;TV, TVSpanCollection&gt;(new Dictionary&lt;TV, TVSpanCollection&gt; { [TV.Left] = LeftTV, [TV.Center] = CenterTV, [TV.Right] = RightTV });             SideTVs = new ReadonlyListionary&lt;TV, SideTVSpanCollection&gt;(new Dictionary&lt;TV, SideTVSpanCollection&gt; { [TV.Left] = LeftTV, [TV.Right] = RightTV });         }           (FrameSpanPair top, FrameSpanPair bottom, FrameSpanPair? vertical, FrameSpanPair? topBevel, FrameSpanPair? bottomBevel) getTVPairs(TV tv)         {              var dictionary = new Dictionary&lt;(Side side, Tier tier), List&lt;LEDInfo&gt;&gt;();             foreach (var item in TargetLEDInstallation.InfosByTV[tv])             {                 if (!dictionary.TryGetValue((item.Side, item.Tier), out var list) || list is null)                 {                     list = new();                     dictionary[(item.Side, item.Tier)] = list;                 }                 list.Add(item);             }              FrameSpan? extractSpan(Side side, Tier tier)             {                  var key = (side, tier);                 if (!dictionary.TryGetValue(key, out var list))                     return null;                 if (dictionary.TryGetValue((side, Tier.Both), out var list2) &amp;&amp; list2?.Count &gt; 0)                     list.AddRange(list2);                  var fromIndex = list.Select(a =&gt; a.GlobalLEDIndex).Min();                 var toIndex = list.Select(a =&gt; a.GlobalLEDIndex).Max();                  for (int i = fromIndex; i &lt; toIndex; i++)                     if (list.FirstOrDefault(a =&gt; a.GlobalLEDIndex == i) == default)                         throw new Exception($\"\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u0434\u043b\u044f {side} {tier}\");                  return new FrameSpan(this, fromIndex, toIndex - fromIndex);             }             FrameSpanPair extractSpanPair(Side side)             {                 var backSpan = extractSpan(side, Tier.Back);                 var wideSpan = extractSpan(side, Tier.Wide);                 if (backSpan is null || wideSpan is null)                     if (backSpan is null &amp;&amp; wideSpan is null)                         return null;                     else                     { #if DEBUG                         throw new Exception(\"\u0422\u0430\u043a \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 &gt;:(\"); #else return null; #endif                     }  #if DEBUG                 if (Math.Abs(backSpan.LEDCount - wideSpan.LEDCount) &gt; 20)                 {                     throw new Exception(\"\u0427\u0442\u043e-\u0442\u043e \u043a\u0430\u043a \u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u0447\u0438\u0441\u043b\u043e\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u0437\u0430\u0434\u043d\u0435\u0433\u043e \u0438 \u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430\");                 } #endif                 return new FrameSpanPair(TargetLEDInstallation, backSpan, wideSpan);             }              return                 (                     extractSpanPair(Side.Top),                     extractSpanPair(Side.Bottom),                     extractSpanPair(tv == TV.Left ? Side.Left : Side.Right),                     extractSpanPair(tv == TV.Left ? Side.BevelLeftTop : Side.BevelRightTop),                     extractSpanPair(tv == TV.Left ? Side.BevelLeftBottom : Side.BevelRightBottom)                 );         }          private FrameSpan CreateSpan(LogicalStripe stripe)         {             var (from, to) = TargetLEDInstallation.GetIndexes(stripe);             return new FrameSpanPlaced(stripe, this, from, to - from);         }          private SpanConture buildPack(RingChain chain) =&gt;             new SpanConture(                 CreateSpan(chain.Top),                 CreateSpan(chain.RightTopBevel),                 CreateSpan(chain.Right),                 CreateSpan(chain.RightBottomBevel),                 CreateSpan(chain.Bottom),                 CreateSpan(chain.LeftBottomBevel),                 CreateSpan(chain.Left),                 CreateSpan(chain.LeftTopBevel)                 );          public override Frame Clone()         {             var result = new Frame(TargetLEDInstallation);             result.CopyFrom(this);             return result;         }          \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0430\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u043d\u0430 \u043b\u0435\u0432\u043e\u043c \u043a\u0440\u0430\u044e \u043b\u0435\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430 (\u0431\u043b\u0438\u0436\u043d\u0438\u0439 \u0438 \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442)         \/\/\/ &lt;\/summary&gt;         public VerticalFrameSpanPair Left { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0430\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0438\u0445 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0442\u0435\u043b\u0438\u043a\u043e\u0432 (\u0431\u043b\u0438\u0436\u043d\u0438\u0439 \u0438 \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442)         \/\/\/ &lt;\/summary&gt;         public HorisontalFrameSpanPair Top { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0430\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043c \u043a\u0440\u0430\u044e \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430 (\u0431\u043b\u0438\u0436\u043d\u0438\u0439 \u0438 \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442)         \/\/\/ &lt;\/summary&gt;         public VerticalFrameSpanPair Right { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0430\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u043d\u0430 \u043d\u0438\u0436\u043d\u0438\u0445 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0442\u0435\u043b\u0438\u043a\u043e\u0432 (\u0431\u043b\u0438\u0436\u043d\u0438\u0439 \u0438 \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442)         \/\/\/ &lt;\/summary&gt;         public HorisontalFrameSpanPair Bottom { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0430\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0441\u043a\u043e\u0441\u0430 - \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043a\u043e\u043d\u0434\u0435\u0439 \u0441\u043c\u043e\u0442\u0440\u0438\u0442, \u0431\u043b\u0438\u0436\u043d\u0438\u0439 \u0438 \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair LeftTopBevel { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0430\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0441\u043a\u043e\u0441\u0430, \u0431\u043b\u0438\u0436\u043d\u0438\u0439 \u0438 \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair RightTopBevel { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0430\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u043b\u0435\u0432\u043e\u0433\u043e \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u043a\u043e\u0441\u0430, \u0431\u043b\u0438\u0436\u043d\u0438\u0439 \u0438 \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair LeftBottomBevel { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0430\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u043a\u043e\u0441\u0430, \u0431\u043b\u0438\u0436\u043d\u0438\u0439 \u0438 \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair RightBottomBevel { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0445 \u043b\u0435\u043d\u0442 \u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 - \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0443\u043f\u043e\u0440 \u0432 \u0441\u0442\u0435\u043d\u0443 \u0441\u0432\u0435\u0442\u0438\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0437\u0430\u0434         \/\/\/ &lt;\/summary&gt;         public SpanConture Back { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0445 \u043b\u0435\u043d\u0442 \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 - \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0432\u0435\u0442\u0438\u0442 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0432 \u0441\u0442\u0435\u043d\u044b, \u0432 \u043f\u043e\u0442\u043e\u043b\u043e\u043a         \/\/\/ &lt;\/summary&gt;         public SpanConture Wide { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432\u0441\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u043c \u043b\u0435\u043d\u0442\u0430\u043c, \u043e\u0434\u043d\u0430\u043a\u043e, \u0431\u043b\u0438\u0436\u043d\u0438\u0439 \u0438 \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e-\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u0430 \u043d\u0435 \u043a\u0430\u043a \u0438\u0434\u0443\u0449\u0438\u0435 \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u043b\u0435\u043d\u0442\u044b         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Both { get; }          \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432\u0441\u0435\u043c \u0432\u043e\u0441\u044c\u043c\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u043c \u043b\u0435\u043d\u0442\u0430\u043c \u043d\u0430 \u0441\u043a\u043e\u0441\u0430\u0445 - \u0431\u043b\u0438\u0436\u043d\u0438\u0445 \u0438 \u0434\u0430\u043b\u044c\u043d\u0438\u0445         \/\/\/ &lt;\/summary&gt;         public Bevels Bevels { get; }          \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0447\u0435\u0442\u044b\u0440\u0451\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u043c \u043b\u0435\u043d\u0442\u0430\u043c \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0438\u0445 \u0441\u043a\u043e\u0441\u0430\u0445         \/\/\/ &lt;\/summary&gt;         public TopBevelPair TopBevels { get; }          \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0447\u0435\u0442\u044b\u0440\u0451\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u043c \u043b\u0435\u043d\u0442\u0430\u043c \u043d\u0430 \u043d\u0438\u0436\u043d\u0438\u0445 \u0441\u043a\u043e\u0441\u0430\u0445         \/\/\/ &lt;\/summary&gt;         public BottomBevelPair BottomBevels { get; }          \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0447\u0435\u0442\u044b\u0440\u0451\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u043c \u043b\u0435\u043d\u0442\u0430\u043c \u043d\u0430 \u043b\u0435\u0432\u044b\u0445 \u0441\u043a\u043e\u0441\u0430\u0445         \/\/\/ &lt;\/summary&gt;         public LeftBevelPair LeftBevels { get; }          \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0447\u0435\u0442\u044b\u0440\u0451\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u043c \u043b\u0435\u043d\u0442\u0430\u043c \u043d\u0430 \u043f\u0440\u0430\u0432\u044b\u0445 \u0441\u043a\u043e\u0441\u0430\u0445         \/\/\/ &lt;\/summary&gt;         public RightBevelPair RightBevels { get; }          \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043b\u0435\u043d\u0442\u0430\u043c \u043d\u0430 \u043b\u0435\u0432\u043e\u043c \u0442\u0435\u043b\u0438\u043a\u0435         \/\/\/ &lt;\/summary&gt;         public LeftTVSpanCollection LeftTV { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043b\u0435\u043d\u0442\u0430\u043c \u043d\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c \u0442\u0435\u043b\u0438\u043a\u0435         \/\/\/ &lt;\/summary&gt;         public CenterTVSpanCollection CenterTV { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043b\u0435\u043d\u0442\u0430\u043c \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043c \u0442\u0435\u043b\u0438\u043a\u0435         \/\/\/ &lt;\/summary&gt;         public RightTVSpanCollection RightTV { get; }          public ReadonlyListionary&lt;TV, TVSpanCollection&gt; TVs { get; }         public ReadonlyListionary&lt;TV, SideTVSpanCollection&gt; SideTVs { get; }          public SpanConture GetConture(int index) =&gt; index % 2 == 0 ? Back : Wide;          protected override IEnumerable&lt;FrameSpan&gt; GetSpans()         {             foreach (var item in Back)                 yield return item;             foreach (var item in Wide)                 yield return item;         }         protected override FrameSpan CreateSpan(nint startPointer, long count) =&gt; new FrameSpan(startPointer, count, this);     }     public class Bevels(FrameSpanPair RightTopBevel, FrameSpanPair RightBottomBevel, FrameSpanPair LeftBottomBevel, FrameSpanPair LeftTopBevel) :      LEDSpanCollection([.. RightTopBevel, .. RightBottomBevel, .. LeftBottomBevel, .. LeftTopBevel], false)     {         public FrameSpanPair RightTopBevel { get; } = RightTopBevel;         public FrameSpanPair RightBottomBevel { get; } = RightBottomBevel;         public FrameSpanPair LeftBottomBevel { get; } = LeftBottomBevel;         public FrameSpanPair LeftTopBevel { get; } = LeftTopBevel;     }      public abstract class BevelPair(StandardInstallation targetInstalltion, FrameSpanPair a, FrameSpanPair b) : LEDSpanCollection([.. a, .. b], false)     {         protected FrameSpanPair A { get; } = a;         protected FrameSpanPair B { get; } = b;          \/\/\/ &lt;summary&gt;         \/\/\/ \u041e\u0431\u0430 \u0441\u043a\u043e\u0441\u0430 \u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Back { get; } = new FrameSpanPair(targetInstalltion, a.Back, b.Back);         \/\/\/ &lt;summary&gt;         \/\/\/ \u041e\u0431\u0430 \u0441\u043a\u043e\u0441\u0430 \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Wide { get; } = new FrameSpanPair(targetInstalltion, a.Wide, b.Wide);     }      public class HorisontalBevelPair(StandardInstallation targetInstallation, FrameSpanPair Left, FrameSpanPair Right) : BevelPair(targetInstallation, Left, Right)     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u041e\u0431\u0430 \u043b\u0435\u0432\u044b\u0445 \u0441\u043a\u043e\u0441\u0430 - \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0438 \u0431\u043b\u0438\u0436\u043d\u0438\u0439         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Left =&gt; A;         \/\/\/ &lt;summary&gt;         \/\/\/ \u041e\u0431\u0430 \u043f\u0440\u0430\u0432\u044b\u0445 \u0441\u043a\u043e\u0441\u0430 - \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0438 \u0431\u043b\u0438\u0436\u043d\u0438\u0439         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Right =&gt; B;     }      public class VerticalBevelPair(StandardInstallation targetInstallation, FrameSpanPair Top, FrameSpanPair Bottom) : BevelPair(targetInstallation, Top, Bottom)     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u041e\u0431\u0430 \u0432\u0435\u0440\u0445\u043d\u0438\u0445 \u0441\u043a\u043e\u0441\u0430 - \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0438 \u0431\u043b\u0438\u0436\u043d\u0438\u0439         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Top =&gt; A;         \/\/\/ &lt;summary&gt;         \/\/\/ \u041e\u0431\u0430 \u043d\u0438\u0436\u043d\u0438\u0445 \u0441\u043a\u043e\u0441\u0430 - \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0438 \u0431\u043b\u0438\u0436\u043d\u0438\u0439         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Bottom =&gt; B;     }      public class TopBevelPair(StandardInstallation targetInstallation, FrameSpanPair Left, FrameSpanPair Right) : HorisontalBevelPair(targetInstallation, Left, Right) { }     public class BottomBevelPair(StandardInstallation targetInstallation, FrameSpanPair Left, FrameSpanPair Right) : HorisontalBevelPair(targetInstallation, Left, Right) { }      public class LeftBevelPair(StandardInstallation targetInstallation, FrameSpanPair Top, FrameSpanPair Bottom) : VerticalBevelPair(targetInstallation, Top, Bottom) { }     public class RightBevelPair(StandardInstallation targetInstallation, FrameSpanPair Top, FrameSpanPair Bottom) : VerticalBevelPair(targetInstallation, Top, Bottom) { }       public class TVSpanCollection(FrameSpanPair top, FrameSpanPair bottom, params FrameSpanPair[] anotherSpans) : LEDSpanCollection([.. top, .. bottom, .. anotherSpans.SelectMany(a =&gt; a)], false)     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u041f\u0430\u0440\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0435\u043d\u0442 \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Top { get; } = top;         \/\/\/ &lt;summary&gt;         \/\/\/ \u041f\u0430\u0440\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0435\u043d\u0442 \u0432 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Bottom { get; } = bottom;     }      public abstract class TVSpanCollection&lt;T&gt;(FrameSpanPair top, FrameSpanPair bottom, params FrameSpanPair[] anotherSpans) : TVSpanCollection(top, bottom, anotherSpans) where T : TVContureSpanCollection     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u044b \u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0442\u0435\u043b\u0438\u043a\u0435         \/\/\/ &lt;\/summary&gt;         public abstract T Back { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u044b \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0442\u0435\u043b\u0438\u043a\u0435         \/\/\/ &lt;\/summary&gt;         public abstract T Wide { get; }     }      public class SideTVSpanCollection(FrameSpanPair top, FrameSpanPair bottom, FrameSpanPair topBevel, FrameSpanPair vertical, FrameSpanPair bottomBevel) : TVSpanCollection(top, bottom, topBevel, vertical, bottomBevel)     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u0412\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043b\u0435\u043d\u0442\u044b-\u0441\u043a\u043e\u0441\u044b \u0431\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public LEDSpanCollection Bevels { get; } = new LEDSpanCollection([.. topBevel, .. bottomBevel], false);          \/\/\/ &lt;summary&gt;         \/\/\/ \u041f\u0430\u0440\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0435\u043d\u0442 \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Top { get; } = top;         \/\/\/ &lt;summary&gt;         \/\/\/ \u041f\u0430\u0440\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0435\u043d\u0442 \u0432 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Bottom { get; } = bottom;          \/\/\/ &lt;summary&gt;         \/\/\/ \u041f\u0430\u0440\u0430 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0435\u043d\u0442 \u0432\u0434\u043e\u043b\u044c \u0431\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Vertical { get; } = vertical;          \/\/\/ &lt;summary&gt;         \/\/\/ \u041f\u0430\u0440\u0430 \u043b\u0435\u043d\u0442 \u0441\u043a\u043e\u0441\u0430 \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u0431\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair TopBevel { get; } = topBevel;          \/\/\/ &lt;summary&gt;         \/\/\/ \u041f\u0430\u0440\u0430 \u043b\u0435\u043d\u0442 \u0441\u043a\u043e\u0441\u0430 \u043d\u0430 \u043d\u0438\u0436\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u0431\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair BottomBevel { get; } = bottomBevel;          \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u044b \u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u0431\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public SideTVContureSpanCollection Back { get; } = new SideTVContureSpanCollection(top.Back, bottom.Back, topBevel.Back, vertical.Back, bottomBevel.Back);         \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u044b \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u0431\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public SideTVContureSpanCollection Wide { get; } = new SideTVContureSpanCollection(top.Wide, bottom.Wide, topBevel.Wide, vertical.Wide, bottomBevel.Wide);     }     public abstract class SideTVSpanCollection&lt;T&gt;(FrameSpanPair top, FrameSpanPair bottom, FrameSpanPair vertical, FrameSpanPair topBevel, FrameSpanPair bottomBevel) : SideTVSpanCollection(top, bottom, vertical, topBevel, bottomBevel) where T : TVContureSpanCollection     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u044b \u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0442\u0435\u043b\u0438\u043a\u0435         \/\/\/ &lt;\/summary&gt;         public abstract new T Back { get; }         \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u044b \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0442\u0435\u043b\u0438\u043a\u0435         \/\/\/ &lt;\/summary&gt;         public abstract new T Wide { get; }     }     public class LeftTVSpanCollection(FrameSpanPair top, FrameSpanPair bottom, FrameSpanPair left, FrameSpanPair topBevel, FrameSpanPair bottomBevel) : SideTVSpanCollection&lt;LeftTVContureSpanCollection&gt;(top, bottom, left, topBevel, bottomBevel)     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u0414\u0432\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0435\u043d\u0442\u044b \u0432\u0434\u043e\u043b\u044c \u043b\u0435\u0432\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u043b\u0435\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430 - \u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Left =&gt; Vertical;         \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u044b \u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043b\u0435\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public override LeftTVContureSpanCollection Back { get; } = new LeftTVContureSpanCollection(top.Back, bottom.Back, left.Back, topBevel.Back, bottomBevel.Back);         \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u044b \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043b\u0435\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public override LeftTVContureSpanCollection Wide { get; } = new LeftTVContureSpanCollection(top.Wide, bottom.Wide, left.Wide, topBevel.Wide, bottomBevel.Wide);     }     public class RightTVSpanCollection(FrameSpanPair top, FrameSpanPair bottom, FrameSpanPair right, FrameSpanPair topBevel, FrameSpanPair bottomBevel) : SideTVSpanCollection&lt;RightTVContureSpanCollection&gt;(top, bottom, right, topBevel, bottomBevel)     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u0414\u0432\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0435\u043d\u0442\u044b \u0432\u0434\u043e\u043b\u044c \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430 - \u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpanPair Right =&gt; Vertical;         \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u044b \u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public override RightTVContureSpanCollection Back { get; } = new RightTVContureSpanCollection(top.Back, bottom.Back, right.Back, topBevel.Back, bottomBevel.Back);         \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u044b \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043b\u0435\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public override RightTVContureSpanCollection Wide { get; } = new RightTVContureSpanCollection(top.Wide, bottom.Wide, right.Wide, topBevel.Wide, bottomBevel.Wide);     }     public class CenterTVSpanCollection(FrameSpanPair top, FrameSpanPair bottom) : TVSpanCollection(top, bottom)     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u044b \u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public CenterTVContureSpanCollection Back { get; } = new CenterTVContureSpanCollection(top.Back, bottom.Back);         \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u044b \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public CenterTVContureSpanCollection Wide { get; } = new CenterTVContureSpanCollection(top.Wide, bottom.Wide);     }      public class TVContureSpanCollection(FrameSpan top, FrameSpan bottom, params FrameSpan[] anotherSpans) : LEDSpanCollection([top, bottom, .. anotherSpans], false)     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0435\u043d\u0442\u0430 \u0432\u0434\u043e\u043b\u044c \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpan Top { get; } = top;         \/\/\/ &lt;summary&gt;         \/\/\/ \u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0435\u043d\u0442\u0430 \u0432\u0434\u043e\u043b\u044c \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpan Bottom { get; } = bottom;     }     public class SideTVContureSpanCollection(FrameSpan top, FrameSpan bottom, FrameSpan vertical, FrameSpan topBevel, FrameSpan bottomBevel) : TVContureSpanCollection(top, bottom, vertical, topBevel, bottomBevel)     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u0414\u0432\u0435 \u043b\u0435\u043d\u0442\u044b \u0441\u043a\u043e\u0441\u0430 \u0443\u0433\u043b\u043e\u0432 \u0431\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public LEDSpanCollection Bevels { get; } = new LEDSpanCollection([topBevel, bottomBevel], false);          \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0441\u043a\u043e\u0441\u0430 \u0431\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpan TopBevel { get; } = top;         \/\/\/ &lt;summary&gt;         \/\/\/ \u041b\u0435\u043d\u0442\u0430 \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u043a\u043e\u0441\u0430 \u0431\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpan BottomBevel { get; } = bottom;          \/\/\/ &lt;summary&gt;         \/\/\/ \u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0435\u043d\u0442\u0430 \u0432\u0434\u043e\u043b\u044c \u043a\u0440\u0430\u044f \u0431\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpan Vertical { get; } = vertical;     }     public class LeftTVContureSpanCollection(FrameSpan top, FrameSpan bottom, FrameSpan left, FrameSpan topBevel, FrameSpan bottomBevel) : SideTVContureSpanCollection(top, bottom, left, topBevel, bottomBevel)     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0435\u043d\u0442\u0430 \u0432\u0434\u043e\u043b\u044c \u043b\u0435\u0432\u043e\u0433\u043e \u043a\u0440\u0430\u044f \u043b\u0435\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpan Left =&gt; Vertical;     }     public class RightTVContureSpanCollection(FrameSpan top, FrameSpan bottom, FrameSpan right, FrameSpan topBevel, FrameSpan bottomBevel) : SideTVContureSpanCollection(top, bottom, right, topBevel, bottomBevel)     {         \/\/\/ &lt;summary&gt;         \/\/\/ \u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0435\u043d\u0442\u0430 \u0432\u0434\u043e\u043b\u044c \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043a\u0440\u0430\u044f \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430         \/\/\/ &lt;\/summary&gt;         public FrameSpan Right =&gt; Vertical;     }     public class CenterTVContureSpanCollection(FrameSpan top, FrameSpan bottom) : TVContureSpanCollection(top, bottom)     {     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p><strong>\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0430\u0434\u0440\u00a0\u2014 <\/strong>\u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0434\u043b\u044f\u00a0\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043b\u0435\u043d\u0442. \u041e\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043d\u0430\u00a0\u0431\u0430\u0437\u0435 \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 <strong>Booffer1D&lt;float3&gt;<\/strong>. \u041f\u043e\u00a0\u0444\u0430\u043a\u0442\u0443 \u0432\u0441\u0435 \u0446\u0432\u0435\u0442\u0430 \u043b\u0435\u0436\u0430\u0442 \u0434\u0440\u0443\u0433 \u0437\u0430\u00a0\u0434\u0440\u0443\u0433\u043e\u043c \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u043a\u0443\u0441\u043a\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0430\u0434\u0440 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u00ab\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u00bb \u043a\u00a0\u043a\u0430\u043a\u043e\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043b\u0435\u043d\u0442\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f, \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043a\u043e\u043d\u0442\u0443\u0440\u0430\u043c\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0438\u043b\u0438\u00a0\u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u043e, \u0438 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a\u00a0\u0440\u0430\u0437\u043d\u044b\u043c \u043a\u0443\u0441\u043a\u0430\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cs\">\/\/\u041e\u0431\u0430 \u043a\u043e\u043d\u0442\u0443\u0440\u0430 \u0437\u0435\u043b\u0451\u043d\u044b\u0435 frame.Fill((0.1f, 0.8f, 0.2f));  \/\/\u0417\u0430\u043b\u0438\u0442\u044c \u043b\u0435\u0432\u044b\u0439 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0441\u043a\u043e\u0441 \u0437\u0430\u0434\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u043c frame.LeftTop.Back.Fill(float3.Orange);  \/\/\u041f\u0440\u0430\u0432\u044b\u0435 \u043b\u0435\u043d\u0442\u044b (\u0438 \u0437\u0430\u0434\u043d\u044f\u044f, \u0438 \u0434\u0430\u043b\u044c\u043d\u044f\u044f) \u0437\u0430\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043e\u043c frame.Right.Gradient(float3.Red, float3.Blue);  \/\/\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 100 \u043d\u043e\u043c\u0435\u0440\u0430 \u0434\u0438\u043e\u0434\u044b \u0432\u0435\u0440\u0445\u043d\u0438\u0445 \u0433\u0440\u0430\u043d\u0435\u0439 \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u044f\u0440\u0447\u0435 \u043d\u0430 20% frame.Top[100\u2026].Mul(1.2f);  \/\/\u0420\u0443\u0447\u043a\u0430\u043c\u0438 \u0440\u0438\u0441\u0443\u0435\u043c \u0432\u043e\u043b\u043d\u0443 \u043d\u0430 \u043a\u043e\u043d\u0442\u0443\u0440\u0435 \u0437\u0430\u0434\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 for (int i = 0; i &lt; frame.Back.LEDCount; i++) frame.Back[i] = float3.Gold * Pepe.Sin(i * 0.01f + phase) * 0.5f + 0.5f;<\/code><\/pre>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0432\u044f\u0437\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u043d\u0430\u00a0\u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u043d\u0430\u00a0\u043d\u0435\u0433\u043e \u0441\u0435\u043d\u0441\u043e\u0440 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e\u00a0\u0441\u0442\u0435\u043d\u044b:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/755\/cc8\/7c0\/755cc87c0f539a056a1a49ba65f50700.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/755\/cc8\/7c0\/755cc87c0f539a056a1a49ba65f50700.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/755\/cc8\/7c0\/755cc87c0f539a056a1a49ba65f50700.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0438\u0448\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cs\">public void Process(Frame frame) {    \/\/\u041f\u0440\u0430\u0432\u044b\u0439 \u0442\u0435\u043b\u0438\u043a - \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0438 \u043d\u0438\u0436\u043d\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b    foreach (var strip in frame.RightTV.Top)         processSpan(strip);    foreach (var strip in frame.RightTV.Bottom)        processSpan(strip);     \/\/\u041b\u0435\u0432\u044b\u0439 \u0442\u0435\u043b\u0438\u043a - \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0438 \u043d\u0438\u0436\u043d\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b    foreach (var strip in frame.LeftTV.Top)        processSpan(strip);    foreach (var strip in frame.LeftTV.Bottom)        processSpan(strip);     \/\/\u0411\u043e\u043a\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438 \u0447\u0438\u0441\u0442\u0438\u043c    frame.RightTV.Right.Clear();    frame.LeftTV.Left.Clear(); }  private void processSpan(FrameSpan strip) {    \/\/\u0421\u0442\u0435\u043f\u0435\u043d\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043e\u0442 0 \u0434\u043e 1    var openLevel = (double)(sensor.DistanceMeters - MinDistance) \/ (MaxDistance - MinDistance);    openLevel = Pepe.Clamp(openLevel, 0, 1); \/\/\u041f\u043e\u0434\u0440\u0435\u0437\u0430\u0435\u043c \u0432\u044b\u0445\u043e\u0434 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b    openLevel = Pepe.Pow(openLevel, Unlineary); \/\/\u0429\u0435\u043f\u043e\u0442\u043a\u0430 \u043d\u0435\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0441\u0442\u0438    var index = (int)(openLevel * strip.LEDCount); \/\/\u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u0438\u043e\u0434\u0430 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0451     strip[index..^1].Clear(); \/\/\u0421 \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0442\u0443\u0448\u0438\u043c \u0434\u0438\u043e\u0434\u044b     if (index &gt; 0)        strip[index] *= KonchikLightness; \/\/\u0421\u0432\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0447\u0438\u043a\u0430 \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u0435\u043c } <\/code><\/pre>\n<p>\u0414\u043b\u044f <strong>\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0438\u043e\u0434\u0430 <\/strong>\u044d\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0442\u043e\u043c, \u043a\u00a0\u043a\u0430\u043a\u043e\u043c\u0443 \u0411\u041f \u043e\u043d \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d, \u0433\u0434\u0435 \u043e\u043d \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f (\u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u0438\u043e\u0434\u0430 \u0432\u00a0\u043c\u0438\u043b\u043b\u0438\u043c\u0435\u0442\u0440\u0430\u0445 \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438\u00a0\u2014 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u00a0\u0446\u0435\u043d\u0442\u0440\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0442\u0435\u043b\u0438\u043a\u0430), \u043a\u00a0\u043a\u0430\u043a\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043b\u0435\u043d\u0442\u0435 \u043e\u043d \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0438 \u043a\u0430\u043a\u043e\u0439 \u0443\u00a0\u043d\u0435\u0433\u043e \u043d\u043e\u043c\u0435\u0440, \u043a\u00a0\u043a\u0430\u043a\u043e\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043b\u0435\u043d\u0442\u0435 \u0438 \u043a\u0430\u043a\u043e\u0439 \u0432\u00a0\u043d\u0435\u0439 \u0443\u00a0\u043d\u0435\u0433\u043e \u043d\u043e\u043c\u0435\u0440, \u043a\u00a0\u043a\u0430\u043a\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0443\u0440\u0443 \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u00a0\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044e <strong>float3\u00a0<\/strong>\u0432 <strong>byte3\u00a0<\/strong>\u0438 HDR.<\/p>\n<p><a class=\"anchor\" name=\"%D0%9C%D0%B8%D0%BB%D0%BB%D0%B8%D0%B0%D1%80%D0%B4%D0%A6%D0%B2%D0%B5%D1%82%D0%BE%D0%B2\" id=\"\u041c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u0426\u0432\u0435\u0442\u043e\u0432\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434 \u0446\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u043b\u0435\u043d\u0442\u0430\u0445<\/h2>\n<p>\u0426\u0432\u0435\u0442 \u0434\u043b\u044f\u00a0\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0438\u043e\u0434\u043e\u0432 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u00a0\u0432\u0438\u0434\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 <strong>float3\u00a0<\/strong>\u2014 \u0432\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043a\u0440\u0430\u0441\u043d\u044b\u0439, \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u0438 \u0441\u0438\u043d\u0438\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442 <strong>0,0<\/strong>\u00a0\u0434\u043e <strong>1,0<\/strong>\u00a0\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u0438\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u043c \u0432\u0441\u0451 \u043d\u0435\u00a0\u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f: \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c <strong>1,0<\/strong>\u00a0\u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0432\u0435\u0440\u0445\u044a\u044f\u0440\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0438 \u0434\u0430\u0436\u0435\u00a0\u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 <strong>0,0\u00a0<\/strong>\u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u043c\u0435\u0442\u044c <strong>\u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u044f\u0440\u043a\u043e\u0441\u0442\u044c<\/strong>. \u041d\u043e\u00a0\u0435\u0441\u043b\u0438 \u0447\u0451\u0440\u043d\u044b\u0439 \u0441\u0432\u0435\u0442\u00a0\u2014 \u0448\u0442\u0443\u043a\u0430 \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f, \u0438, \u043f\u043e\u2011\u043c\u043e\u0435\u043c\u0443, \u043a\u0440\u043e\u043c\u0435 \u043c\u0435\u043d\u044f \u0441\u00a0\u043d\u0438\u043c \u043d\u0438\u043a\u0442\u043e \u043e\u0441\u043e\u0431\u043e \u043d\u0435\u00a0\u0438\u0433\u0440\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044f\u0440\u0447\u0435 <strong>1,0<\/strong>\u00a0\u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u043e\u0431\u044b\u0434\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f\u00a0<strong>HDR <\/strong>\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/406\/a1f\/e24\/406a1fe248e491639aff1c11811d9111.webp\" alt=\"\" title=\"\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/406\/a1f\/e24\/406a1fe248e491639aff1c11811d9111.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/406\/a1f\/e24\/406a1fe248e491639aff1c11811d9111.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0423\u00a0\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445, \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0434\u0438\u043e\u0434\u043e\u0432 <strong>WS2812b<\/strong>, \u043a\u0440\u0430\u0441\u043d\u044b\u0439, \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u0438 \u0441\u0438\u043d\u0438\u0439 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u0442\u0443\u043f\u0435\u043d\u0447\u0430\u0442\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043e\u0442 <strong>0\u00a0<\/strong>\u0434\u043e <strong>255<\/strong>. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0447\u0451\u0440\u043d\u044b\u0445 \u043b\u0430\u043c\u043f \u0438 HDR\u043e\u0432. \u0414\u043b\u044f\u00a0\u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0438\u0445 \u0431\u043b\u0438\u043a\u043e\u0432 \u043d\u0430\u0434\u043e \u043a\u0430\u043a\u2011\u0442\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u044b\u0433\u0430\u0442\u044c <strong>\u0432\u044b\u0448\u0435 255<\/strong>, \u0430\u00a0\u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u0440\u0435\u0437\u0430\u0442\u044c \u0442\u0435\u043d\u0438\u00a0\u2014 \u0443\u043c\u0435\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 <strong>0<\/strong>\u00a0\u0438 <strong>1<\/strong>.<\/p>\n<p>\u041a\u0430\u043a\u00a0\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0443\u044e \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c? \u0410\u00a0\u0443\u00a0\u043d\u0430\u0441 \u043c\u043d\u043e\u0433\u043e \u0434\u0438\u043e\u0434\u043e\u0432. \u041f\u0443\u0441\u0442\u044c \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443.<\/p>\n<p>\u0412\u043e\u0442 \u0443\u00a0\u043d\u0430\u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0440\u0438\u0441\u0443\u043d\u043e\u043a \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 <strong>float3\u00a0RGB \u043e\u0442 0.0\u00a0\u0434\u043e 1.0\u00a0\u0438 \u0431\u043e\u043b\u044c\u0448\u0435<\/strong>.<\/p>\n<p>\u0412\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u0443\u0441\u0442\u044c \u0432\u0441\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 <strong>\u044f\u0440\u0447\u0435 1\u00a0\u0441\u043a\u0438\u0434\u044b\u0432\u0430\u044e\u0442 \u0441\u0432\u043e\u044e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u0443\u044e \u044d\u043d\u0435\u0440\u0433\u0438\u044e \u043d\u0430\u00a0\u0441\u043e\u0441\u0435\u0434\u0435\u0439<\/strong>. \u0418\u0437\u0431\u044b\u0442\u043e\u043a \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043f\u043e\u043f\u043e\u043b\u0430\u043c, \u0438 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043a\u0438 \u0440\u0430\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u0441\u0435\u0434\u044f\u043c.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/aa2\/930\/a8e\/aa2930a8eae8f8deca5e9e85f875891d.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/aa2\/930\/a8e\/aa2930a8eae8f8deca5e9e85f875891d.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/aa2\/930\/a8e\/aa2930a8eae8f8deca5e9e85f875891d.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u00a0\u2014 \u0441\u0432\u0435\u0442\u043b\u044f\u0447\u043a\u0438 \u0440\u0430\u0441\u0442\u0435\u043a\u0443\u0442\u0441\u044f \u0432\u00a0\u043f\u044f\u0442\u043d\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0433\u043e\u0440\u0438\u0442 \u043d\u0430 <strong>1000%<\/strong>, \u043d\u0430\u00a0\u0434\u0435\u043b\u0435 \u0432\u00a0\u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043b\u0435\u043d\u0442\u044b \u0437\u0430\u0436\u0438\u0433\u0430\u0435\u0442\u0441\u044f <strong>\u043f\u044f\u0442\u043d\u043e \u0432 10\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432<\/strong>. \u0414\u0438\u043e\u0434\u044b \u0441\u0432\u0435\u0442\u044f\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438, \u0440\u0430\u0437\u043c\u044b\u0442\u044b\u043c\u0438 \u043f\u044f\u0442\u043d\u0430\u043c\u0438, \u0438 \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u0435 10\u00a0\u0434\u0438\u043e\u0434\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u043e 1\u00a0\u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u044f\u0440\u043a\u043e\u0441\u0442\u044c. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u0435\u0440\u0435\u0433\u0438\u0431\u0430\u0442\u044c \u043f\u0430\u043b\u043a\u0443 \u043d\u0435\u00a0\u0441\u0442\u043e\u0438\u0442\u00a0\u2014 30\u00a0\u0434\u0438\u043e\u0434\u043e\u0432 \u0443\u0436\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a\u00a0\u043f\u043e\u043b\u043e\u0441\u043a\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043d\u0435\u00a0\u0443\u0441\u043f\u0435\u043b\u043e \u0440\u0430\u0441\u0441\u043e\u0441\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u00a0N \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u0441\u0451 \u0442\u0430\u043a\u0438 \u0442\u0443\u043f\u043e \u043e\u0431\u0440\u0435\u0437\u0430\u0435\u0442\u0441\u044f. \u041d\u043e\u00a0\u0434\u043b\u044f\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/757\/a23\/eea\/757a23eea722ae7dab4805cbbe24a40d.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/757\/a23\/eea\/757a23eea722ae7dab4805cbbe24a40d.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/757\/a23\/eea\/757a23eea722ae7dab4805cbbe24a40d.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u043e\u2011\u0432\u0442\u043e\u0440\u044b\u0445, \u043f\u0443\u0441\u0442\u044c \u0432\u0441\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0438\u0448\u043a\u043e\u043c <strong>\u043c\u0430\u043b\u044b<\/strong>, \u0447\u0442\u043e\u0431\u044b \u0445\u043e\u0442\u044c \u0447\u0443\u0442\u044c\u2011\u0447\u0443\u0442\u044c \u0437\u0430\u0436\u0435\u0447\u044c \u0434\u0438\u043e\u0434, <strong>\u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439<\/strong> \u0438 \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e <strong>\u043e\u0434\u0438\u043d \u043c\u0435\u0441\u0442\u043d\u044b\u0439 \u0434\u0438\u043e\u0434 \u0432\u044b\u0434\u0430\u0434\u0443\u0442 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/strong>, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0437\u0430\u0436\u0435\u0447\u044c.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bbe\/897\/565\/bbe89756519462b9a41fd8a6f495231f.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/bbe\/897\/565\/bbe89756519462b9a41fd8a6f495231f.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bbe\/897\/565\/bbe89756519462b9a41fd8a6f495231f.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u00ab\u0432\u0435\u0442\u0440\u0430\u00bb, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0430\u0431\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u00ab\u0441\u0434\u0443\u0432\u0430\u0435\u0442\u0441\u044f\u00bb \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044e, \u043f\u043e\u043a\u0430 \u044d\u0442\u043e\u0442 \u0441\u043d\u0435\u0436\u043d\u044b\u0439 \u043a\u043e\u043c \u043d\u0435\u00a0\u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0451\u0442\u0441\u044f \u0434\u043e\u00a0\u0441\u0443\u043c\u043c\u044b, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0431\u0438\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0438 \u0434\u0438\u043e\u0434 \u0432\u0441\u043f\u044b\u0445\u043d\u0443\u043b. \u0422\u043e\u0433\u0434\u0430 \u0441\u0443\u043c\u043c\u0430 \u043e\u0441\u0435\u0434\u0430\u0435\u0442 \u043d\u0430\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435, \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f. \u0412\u00a0\u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442\u00a0\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0438\u0437\u0435\u0440\u0438\u043d\u0433\u0430, \u044d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043e\u0442 <strong>0.0<\/strong>\u00a0\u0434\u043e <strong>1\/255<\/strong>, \u043d\u0435\u00a0\u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/770\/cf3\/ed9\/770cf3ed95ea009d841770d0bbcb6ef1.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/770\/cf3\/ed9\/770cf3ed95ea009d841770d0bbcb6ef1.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/770\/cf3\/ed9\/770cf3ed95ea009d841770d0bbcb6ef1.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u0441\u0451 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u2011\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 <strong>RGB<\/strong>. \u0414\u0438\u043e\u0434\u044b \u0441\u0442\u043e\u044f\u0442 \u0440\u044f\u0434\u043e\u043c, \u0441\u0432\u0435\u0442 \u0438\u0445 \u0440\u0430\u0437\u043c\u044b\u0442\u044b\u0439 \u0438 \u0441\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00a0\u2014 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u043e\u0447\u043d\u043e \u043a\u0430\u043a\u00a0\u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0432 <strong>0.01%<\/strong>, \u0438 \u0432 <strong>1000%<\/strong>.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0430 \u043f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0430 <strong>\u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442 <\/strong>\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <strong>\u043d\u0430 255<\/strong> (\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d <strong>..0..1..<\/strong>\u00a0\u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 <strong>0..255<\/strong>) \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0432 <strong>byte3<\/strong>\u00a0\u2014 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430\u00a0<strong>\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440<\/strong>.<\/p>\n<p><strong>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0438 SDR \u043b\u0435\u043d\u0442\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 HDR :3<\/strong><\/p>\n<p><a class=\"anchor\" name=\"%D0%91%D1%83%D0%BB%D0%BE%D1%87%D0%BA%D0%B8\" id=\"\u0411\u0443\u043b\u043e\u0447\u043a\u0438\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0443\u043b\u043e\u0447\u043a\u0438 \u0438 \u0430\u043c\u043e\u0440\u0444\u043d\u044b\u0439 \u0441\u043e\u0444\u0442<\/h2>\n<p>\u042d\u0442\u043e \u043d\u0435\u00a0\u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u043e\u0439 \u0441\u043e\u0444\u0442, \u0433\u0434\u0435 <em>\u00ab\u043f\u0435\u0445\u043e\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430\u00bb<\/em> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443. \u041f\u043e\u00a0\u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0435 \u041e\u041e\u041f \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043b\u0430\u0441\u0441\u044b \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u0442\u0435\u043c \u0444\u0430\u043a\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u043e\u0444\u0442\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e \u0441\u00a0\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c\u0438 \u044d\u0442\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9b0\/56b\/faa\/9b056bfaa2f348e6bb49ce1e159ba9a1.webp\" alt=\"\" title=\"\" width=\"3188\" height=\"2691\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/9b0\/56b\/faa\/9b056bfaa2f348e6bb49ce1e159ba9a1.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9b0\/56b\/faa\/9b056bfaa2f348e6bb49ce1e159ba9a1.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u00a0\u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u043d\u0435\u00a0\u0447\u0435\u0440\u0435\u0437 \u041e\u041e\u041f, \u0430\u00a0\u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0443, \u0438\u0434\u0435\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0443\u00a0\u043c\u0435\u043d\u044f \u0434\u0430\u0432\u043d\u043e. \u041c\u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u043d\u0435\u044f\u0441\u043d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0430 \u0443\u0434\u043e\u0431\u043e\u0432\u0430\u0440\u0438\u043c\u0430 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430 \u043d\u0430\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u042d\u0444\u0444\u0435\u043a\u0442\u044b \u0442\u0443\u0442 \u043d\u0435\u00a0\u043a\u043b\u0430\u0441\u0441\u044b, \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u043d\u0435\u00a0\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<\/p>\n<p><strong>\u042d\u0444\u0444\u0435\u043a\u0442\u044b\u00a0\u2014 \u044d\u0442\u043e \u0431\u0443\u043b\u043e\u0447\u043a\u0438.<\/strong><\/p>\n<p><strong><u>\u0411\u0443\u043b\u043e\u0447\u043a\u0430<\/u><\/strong>\u00a0\u2014 \u044d\u0442\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u043e\u0442\u043e\u0436\u0434\u0435\u0441\u0442\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u043a\u043b\u0430\u0441\u0441, \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0412\u0441\u0451 \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b4d\/cb0\/e8a\/b4dcb0e8abdd295c9fdf7d214a5a18b4.webp\" alt=\"\" title=\"\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b4d\/cb0\/e8a\/b4dcb0e8abdd295c9fdf7d214a5a18b4.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b4d\/cb0\/e8a\/b4dcb0e8abdd295c9fdf7d214a5a18b4.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0434\u00a0\u2014 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u00a0\u2014 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0434. \u0425\u0438\u043c\u0435\u0440\u0430 \u0438\u0437\u00a0\u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/059\/8ec\/639\/0598ec6398e0f5b92e0f5086de2d3a2c.png\" width=\"780\" height=\"203\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/059\/8ec\/639\/0598ec6398e0f5b92e0f5086de2d3a2c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/059\/8ec\/639\/0598ec6398e0f5b92e0f5086de2d3a2c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 <strong>C#<\/strong> \u044f \u043f\u043e\u043a\u0430 \u0440\u0435\u0448\u0438\u043b \u043d\u0435\u00a0\u0442\u0440\u043e\u0433\u0430\u0442\u044c: \u0431\u0443\u043b\u043a\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a <strong>public class<\/strong>, \u043d\u043e\u00a0\u043f\u043e\u00a0\u0444\u0430\u043a\u0442\u0443 \u044d\u0442\u043e \u043d\u0435\u00a0\u043a\u043b\u0430\u0441\u0441, \u0430\u00a0\u0431\u0443\u043b\u043a\u0430. <strong>GUI <\/strong>\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u00a0\u043c\u0435\u0440\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430. \u0412\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0441\u0451, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0435\u00a0\u043b\u0438\u0448\u0435\u043d\u043e \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0435\u0439, \u0438\u0431\u043e \u0436\u0438\u0437\u043d\u044c <strong>C#<\/strong> \u043a\u00a0\u0442\u0430\u043a\u043e\u043c\u0443 \u043d\u0435\u00a0\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0430, \u043d\u043e\u00a0\u044d\u0442\u043e \u0437\u0430\u043a\u043e\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u00a0\u2014 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u00a0\u0436\u0435. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5b5\/9e6\/c97\/5b59e6c977d1fcadc5c828470ddc5ea4.png\" width=\"780\" height=\"269\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5b5\/9e6\/c97\/5b59e6c977d1fcadc5c828470ddc5ea4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5b5\/9e6\/c97\/5b59e6c977d1fcadc5c828470ddc5ea4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0422\u0435\u043a\u0443\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432\u00a0\u043a\u043e\u0434\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f <strong>public<\/strong> \u043f\u043e\u043b\u0435\u0439 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432. \u0415\u0441\u043b\u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0432\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435\u00a0\u2014 \u043e\u043d\u0430 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u00a0\u043a\u043e\u0434\u0435, \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u041f\u043e\u043a\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0435 \u0442\u0438\u043f\u044b, <strong>3D<\/strong> \u0438 <strong>4D<\/strong> \u0432\u0435\u043a\u0442\u043e\u0440\u044b (\u043e\u043d\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0446\u0432\u0435\u0442\u043e\u043c), \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 <strong>bool<\/strong>, <strong>\u0442\u0435\u043a\u0441\u0442 <\/strong>\u0438 <strong>\u0435\u043d\u0443\u043c\u044b <\/strong>(\u0434\u043b\u044f \u043d\u0438\u0445 \u0433\u0435\u043d\u0435\u0440\u0438\u0442\u0441\u044f \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a).<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\/\u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u043e\u043b\u0435\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u00a0\u043a\u043e\u0434\u0435\u00a0\u2014 \u043e\u043d\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f\/\u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442 \u0432\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435. \u0414\u043b\u044f\u00a0\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0431\u0435\u0437\u00a0\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u0438, \u043f\u043e\u00a0\u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0447\u043b\u0435\u043d\u044b \u0432\u00a0\u0431\u0443\u043b\u043a\u0430\u0445 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435\u00a0\u0438\u043c\u0435\u044e\u0442, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0445 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c\u0438\u00a0\u2014 \u0431\u0443\u043b\u043a\u0438 \u043f\u043e\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u044b \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0432\u00a0\u043e\u0434\u0438\u043d\u043e\u0447\u0435\u0441\u0442\u0432\u0435.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/195\/056\/311\/19505631171f4541cc7978c642f8cf07.png\" width=\"780\" height=\"247\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/195\/056\/311\/19505631171f4541cc7978c642f8cf07.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/195\/056\/311\/19505631171f4541cc7978c642f8cf07.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430\u043a\u043e\u0441\u044f\u0447\u0438\u0442\u044c\u00a0\u2014 \u0431\u0443\u043b\u043a\u0430 \u0441\u043c\u0443\u0442\u0438\u0442\u0441\u044f \u0438 \u043f\u043e\u043a\u0440\u0430\u0441\u043d\u0435\u0435\u0442. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043e\u043d\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u00a0\u0441\u0447\u0451\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0443\u0434\u0430\u0447\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430. \u0412\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043a\u0430 \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ac1\/bb6\/ebf\/ac1bb6ebfc937fa5d72373a69e1cb10b.png\" width=\"1380\" height=\"720\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ac1\/bb6\/ebf\/ac1bb6ebfc937fa5d72373a69e1cb10b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ac1\/bb6\/ebf\/ac1bb6ebfc937fa5d72373a69e1cb10b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438, \u043a\u043e\u0434 \u0431\u0443\u043b\u043e\u0447\u043a\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u043d\u0435\u0439 \u0438 \u0435\u0451 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u0412\u0441\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0432\u00a0\u0441\u043e\u0444\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u00a0\u043a\u0430\u043d\u0430\u043b\u044b\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u00a0\u043a\u043e\u0434\u043e\u043c \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c.cs, \u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0432\u00a0\u043f\u0430\u043f\u043a\u0435 Generics. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442, \u0441\u043e\u0444\u0442 \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0451\u0442 \u043a\u043e\u0434 \u0438\u0437\u00a0\u0444\u0430\u0439\u043b\u0430, \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u0443\u044e \u0431\u0443\u043b\u043a\u0443 \u0438 \u043f\u0438\u0445\u0430\u0435\u0442 \u0432\u00a0\u043d\u0435\u0451 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434. <\/p>\n<p>\u041f\u0440\u0438\u00a0\u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u041f\u041e\u00a0\u0432\u0441\u0435 \u043a\u0430\u043d\u0430\u043b\u044b\u2011\u044d\u0444\u0444\u0435\u043a\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a\u00a0\u043f\u0430\u043f\u043a\u0438 \u0441\u00a0\u0444\u0430\u0439\u043b\u0430\u043c\u0438.cs, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c\u0438 \u043a\u043e\u0434 \u0431\u0443\u043b\u043e\u043a. \u041f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0438\u0437\u00a0\u0444\u0430\u0439\u043b\u043e\u0432 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u0438 \u0431\u0443\u043b\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0441\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c\u00a0\u2014 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u0443\u043b\u043a\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432\u00a0\u043a\u043e\u0434\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0435\u0439 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432.<\/p>\n<p>\u041e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442\u00a0\u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u00a0\u2014 \u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043a\u043e\u043f\u0438\u0439. \u0423\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0438\u043c\u044f, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, <strong>\u043a\u043e\u0434 \u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 <\/strong>\u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u043c\u0438, \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0432\u0441\u0451. \u042d\u0442\u043e \u0432\u00a0\u043a\u043e\u0440\u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u00a0\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0441\u00a0\u041e\u041e\u041f, \u0433\u0434\u0435 \u0434\u0432\u0430 \u0442\u0430\u043a\u0438\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u0434\u0432\u0443\u043c\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e\u00a0\u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a3c\/d6b\/c5c\/a3cd6bc5cd51896ad67b191ab0a864ec.png\" width=\"780\" height=\"293\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a3c\/d6b\/c5c\/a3cd6bc5cd51896ad67b191ab0a864ec.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a3c\/d6b\/c5c\/a3cd6bc5cd51896ad67b191ab0a864ec.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0423\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0443\u043b\u043e\u0447\u043a\u0438 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0451 <strong>\u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f<\/strong>, \u043f\u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0430\u00a0\u043d\u0435\u0451 \u043c\u043e\u0433\u0443\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0441\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u043f\u0440\u044f\u043c\u043e \u0432\u00a0\u043a\u043e\u0434\u0435\u00a0\u2014 \u0442\u0430\u043a \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0432\u044f\u0437\u0438 \u0432\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0421\u0440\u0435\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u043b\u043e\u043a \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u043d\u0430\u00a0\u0431\u044b\u043b\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438, \u0438 \u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f, \u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437\u00a0\u0431\u0443\u043b\u043e\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u043b\u043a\u0443, \u043d\u0430\u00a0\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0433\u0434\u0435\u2011\u0442\u043e \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u0443\u043b\u043a\u0438, \u0442\u043e \u0432\u00a0\u0438\u0445 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043e\u00a0\u2014 <strong>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433<\/strong>.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cca\/ac9\/273\/ccaac92738e3870147c9df53a98019ba.png\" width=\"780\" height=\"500\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/cca\/ac9\/273\/ccaac92738e3870147c9df53a98019ba.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cca\/ac9\/273\/ccaac92738e3870147c9df53a98019ba.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u00a0\u0431\u0443\u043b\u043e\u0447\u0435\u043a \u043f\u043e\u043a\u0430 \u043d\u0435\u0442, \u043d\u043e\u00a0\u0435\u0441\u0442\u044c \u0438\u0434\u0435\u0438 \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u00a0\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<ul>\n<li>\n<p>\u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u043b\u043a\u0438 \u043e\u0442\u00a0\u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0435\u00a0\u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u00a0\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u043e\u0442\u00a0\u043a\u043b\u0430\u0441\u0441\u0430<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u043b\u043a\u0438 \u043e\u0442\u00a0\u0431\u0443\u043b\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430\u00a0References \u0432 3Ds Max<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u043d\u0430 <strong>C#<\/strong> \u0438 <strong>Roslyn<\/strong>. \u0421\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441\u00a0\u0436\u0438\u0440\u043d\u044e\u0449\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u043f\u043e\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u00a0\u043d\u0435\u0436\u0435\u043b\u0430\u043d\u0438\u0435 <strong>Roslyn <\/strong>\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u044d\u0448 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a\u00a0\u0441\u0443\u0440\u043e\u0432\u043e\u043c\u0443 \u0440\u0430\u0441\u0445\u043e\u0434\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u041c\u043d\u0435\u00a0\u043b\u0438\u0447\u043d\u043e \u044d\u0442\u043e \u043d\u0435\u00a0\u043c\u0435\u0448\u0430\u0435\u0442, \u043d\u043e\u00a0\u043d\u0430\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0440\u044f\u0434\u043e\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u0430\u0445 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u0447\u043d\u043e \u043d\u0435\u00a0\u0441\u0442\u043e\u0438\u0442. \u0420\u0435\u0448\u0435\u043d\u0438\u044f \u044f \u0432\u0438\u0436\u0443 \u0434\u0432\u0430:<\/p>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u044c \u0431\u0443\u043b\u043a\u0438 \u043d\u0430\u00a0\u043f\u0438\u0442\u043e\u043d\u043e\u2011\u0434\u0436\u0430\u0432\u0430\u0441\u043a\u0440\u0438\u0442\u043f\u044b<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 <strong>Roslyn <\/strong>\u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043a\u0430 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u044e, \u043d\u043e\u00a0\u0441\u043a\u043b\u043e\u043d\u044f\u044e\u0441\u044c \u043a\u00a0\u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0443. \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u044f\u0437\u044b\u043a \u0434\u043b\u044f\u00a0\u0431\u0443\u043b\u043e\u043a\u00a0\u2014 \u043d\u0435\u00a0\u0441\u043e\u0432\u0441\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440. \u0425\u043e\u0442\u044f \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435\u2026<\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<h3>\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0431\u0443\u043b\u043e\u0447\u0435\u043a<\/h3>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u0430\u044f \u0438 \u043d\u0430\u0444\u0430\u0440\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0441\u044f\u043a\u0438\u043c\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u2011\u0444\u043e\u043d\u043e\u0432\u044b\u043c\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0448\u0430\u043b\u043e\u0432\u043b\u0438\u0432\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441\u00a0\u0431\u0443\u043b\u043a\u0430\u043c\u0438 \u043d\u0435\u00a0\u0442\u043e\u0440\u043c\u043e\u0437\u0438\u043b\u0438 \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 GUI.<\/p>\n<p><strong>\u0411\u0443\u043b\u043e\u0447\u043a\u0438 <\/strong>\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 <strong><u>\u041c\u0438\u0440\u0430<\/u><\/strong> \u0438 \u0438\u043c\u0435\u044e\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430, \u043f\u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433 \u043a\u00a0\u0434\u0440\u0443\u0433\u0443 \u0438\u0437\u00a0\u043a\u043e\u0434\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0432\u044f\u0437\u0438 \u0432\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0430\u00a0\u0431\u0443\u043b\u043e\u0447\u043a\u0430\u0445.<\/p>\n<p>\u0421\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u0431\u0443\u043b\u043e\u0447\u043a\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u0430\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0441\u00a0\u2014 <strong>\u043f\u0435\u0447\u043a\u0443<\/strong>. \u0412\u00a0\u043d\u0435\u0439 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430\u00a0\u0432\u0441\u0435 \u0431\u0443\u043b\u043a\u0438 \u043c\u0438\u0440\u0430. \u041f\u0435\u0447\u043a\u0430 \u0442\u043e\u0436\u0435 \u0436\u0438\u0432\u0451\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0438\u0440\u0430 \u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u043b\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u043b\u0438\u00a0\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u044e\u0442.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/53b\/780\/de1\/53b780de13cc3a1a68c4970d54089055.webp\" width=\"1638\" height=\"1262\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/53b\/780\/de1\/53b780de13cc3a1a68c4970d54089055.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/53b\/780\/de1\/53b780de13cc3a1a68c4970d54089055.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043e\u0431\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043c\u0438\u0440\u0430 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432\u00a0\u0442\u0435\u043d\u0438\u00a0\u2014 <strong>\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0437\u0430\u0434\u0430\u0447<\/strong>. \u041e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430\u00a0\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u0443\u044e \u0438\u043b\u0438\u00a0\u043f\u043e\u043b\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0431\u0443\u043b\u043e\u043a \u0438 \u043f\u0435\u0447\u043a\u0438, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441\u0431\u043e\u0440\u043e\u043a, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u00a0\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0431\u0443\u043b\u043e\u043a, \u0435\u0441\u043b\u0438 \u0438\u0445 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u0432\u00a0\u043a\u043e\u0434\u0435.<\/p>\n<p><strong>\u0411\u0443\u043b\u043e\u0447\u043a\u0430 <\/strong>\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0431\u044f <strong>\u043d\u0430\u0447\u0438\u043d\u043a\u0443 <\/strong>\u0438 \u043e\u0431\u0432\u0435\u0441, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u00a0\u043d\u0435\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u043d\u0430\u0440\u0443\u0436\u0438\u00a0\u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b, \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a\u00a0\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u0438 \u043f\u043e\u043b\u044f\u043c, \u0447\u0438\u0442\u0430\u0442\u044c\/\u043c\u0435\u043d\u044f\u0442\u044c \u0435\u0451 \u043a\u043e\u0434. \u0412\u0441\u0451 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0431\u043e\u043a\u0441\u0438\u043d\u0433\u043e\u0432.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0443\u043b\u043e\u0447\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 (<strong>Assembly<\/strong>). \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443, \u043f\u0440\u0438\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0439 \u0431\u0443\u043b\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0451\u00a0\u2014 \u0431\u0443\u043b\u043a\u0438\u00a0\u2014 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0443\u043b\u043a\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u00a0\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0430\u00a0\u0431\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0\u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435 \u0431\u0443\u043b\u043a\u0438 \u043c\u0438\u0440\u0430.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/259\/b1e\/665\/259b1e665f203467a177eb425bf96b14.webp\" width=\"3840\" height=\"4126\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/259\/b1e\/665\/259b1e665f203467a177eb425bf96b14.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/259\/b1e\/665\/259b1e665f203467a177eb425bf96b14.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u041d\u0430\u0447\u0438\u043d\u043a\u0430 <\/strong>\u0431\u0443\u043b\u043a\u0438 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u00a0\u0441\u0435\u0431\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 <strong>\u043a\u043e\u0434<\/strong>, \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u0443\u044e C# <strong>\u0441\u0431\u043e\u0440\u043a\u0443<\/strong>, <strong>\u043a\u043b\u0430\u0441\u0441 <\/strong>\u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0435\u00a0\u2014 \u0441\u0430\u043c <strong>\u043e\u0431\u044a\u0435\u043a\u0442. <\/strong>\u042d\u0442\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0442\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u043a\u043e\u0434\u0435 \u0431\u0443\u043b\u043a\u0438.<\/p>\n<pre><code class=\"cs\">public class \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442 { public float3 WideBegin = float3.RoyalBlue; public float3 WideEnd = new float3(0.95294f, 0.28627f, 0.07059f);    public float3 BackBegin = float3.OrangeRed; public float3 BackEnd = float3.LimeGreen;  public void Process(Frame frame) { frame.Wide.Gradient(WideBegin, WideEnd); frame.Back.Gradient(BackBegin, BackEnd); } }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u00a0\u043a\u043e\u0434\u0435 \u0431\u0443\u043b\u043a\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0442\u043e \u0438\u0449\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0439, \u0443\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <strong>[MainObject],<\/strong> \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0435\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u0442, \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441.<\/p>\n<p><strong>\u0427\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e\u043b\u0435\u0439 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0431\u0443\u043b\u043a\u0438<\/strong>, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 <strong>\u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <\/strong>\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043d\u0435\u00a0\u0447\u0435\u0440\u0435\u0437 Reflection, \u043a\u0430\u043a\u00a0\u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u0430\u00a0\u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0439 <strong>Bulkaflection<\/strong>.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0442\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <strong>Reflection<\/strong>, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043a\u0430\u043f\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u00a0\u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u043f\u043e\u043b\u0435\u0439 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0431\u043e\u043a\u0441\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u00a0<strong>object\u00a0<\/strong>\u2014 \u0430\u00a0\u044d\u0442\u043e \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0432\u00a0\u043a\u0443\u0447\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0441\u0442\u0430\u0440\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0431\u0435\u0433\u0430\u0435\u043c. \u0414\u0430, \u0432\u00a0\u043d\u043e\u0432\u044b\u0445 <strong>.NET<\/strong> \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u044d\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e\u00a0\u043e\u043d\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u0443\u0437\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cc2\/971\/2eb\/cc29712eb21baa2a78be679aad429307.webp\" width=\"1560\" height=\"878\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/cc2\/971\/2eb\/cc29712eb21baa2a78be679aad429307.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cc2\/971\/2eb\/cc29712eb21baa2a78be679aad429307.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0426\u0435\u043b\u044c <strong>Bulkaflection<\/strong>\u00a0\u2014 \u043f\u043e\u2011\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0443 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043e\u043d\u043e<strong> <\/strong>\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 <strong>Expression <\/strong>\u0434\u043b\u044f\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0447\u043b\u0435\u043d\u0443 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e. \u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0435 \u044d\u0442\u0438\u043c expression\u0430\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, <strong>\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u00a0\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0439 pepector<\/strong>, \u0430 <strong>\u043d\u0435\u00a0\u0431\u043e\u043a\u0441\u044f\u0442\u0441\u044f<\/strong> \u0432\u00a0\u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0439 object, \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 Reflection. \u041d\u0430\u043f\u043e\u043c\u043d\u044e\u00a0\u2014 \u0432 <strong>pepector<\/strong> \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0441\u0443\u043d\u0443\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0441\u043a\u0430\u043b\u044f\u0440 \u0438\u043b\u0438\u00a0\u0432\u0435\u043a\u0442\u043e\u0440. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438\u043c \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0437\u0431\u0435\u0433\u0430\u043d\u0438\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u0432\u00a0\u043a\u0443\u0447\u0435.<\/p>\n<p>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 expression\u044b \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u044b. \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <strong>Funchacho<\/strong>. \u041f\u0440\u0438\u00a0\u043f\u0435\u0440\u0432\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a\u00a0\u0442\u043e\u043c\u0443 \u0438\u043b\u0438\u00a0\u0438\u043d\u043e\u043c\u0443 \u0447\u043b\u0435\u043d\u0443 \u0431\u0443\u043b\u043a\u0438 \u043e\u043d\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c, \u043c\u043e\u0436\u043d\u043e\u00a0\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0451 \u0447\u0435\u0440\u0435\u0437 <strong>Expression <\/strong>\u0441 <strong>pepector<\/strong>\u043e\u043c, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442\u00a0\u2014 \u0442\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <strong>Reflection<\/strong>. \u041f\u043e\u00a0\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u043d \u043e\u0441\u043e\u0431\u043e \u043d\u0435\u00a0\u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u00a0\u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438 \u0432.NET, \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e\u00a0\u043a\u043e\u0433\u0434\u0430 \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u043b \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0430.NET Framework \u0434\u043b\u044f\u00a0\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u042f\u041f\u00a0\u2014 \u0442\u0430\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0430\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043d\u0430\u00a0\u043f\u043e\u0440\u044f\u0434\u043e\u043a.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0432 <strong>\u043d\u0430\u0447\u0438\u043d\u043a\u0435 \u0431\u0443\u043b\u043a\u0438 <\/strong>\u0441\u0442\u043e\u044f\u0442 \u043c\u043e\u0434\u0443\u043b\u0438, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435\u043c <strong>\u043e\u0431\u044a\u0435\u043a\u0442\u0430 <\/strong>\u0438 <strong>\u043a\u043e\u0434\u0430<\/strong>, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u0441\u00a0\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u043c \u0437\u0430\u0434\u0430\u0447 \u043c\u0438\u0440\u0430.<\/p>\n<p>\u042d\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044e\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0438 \u043f\u043e\u043b\u0435\u0439 <strong>\u043e\u0431\u044a\u0435\u043a\u0442\u0430 <\/strong>\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442 \u043a\u043e\u0434 \u0431\u0443\u043b\u043a\u0438, \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u0432\u00a0\u043d\u0451\u043c \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0432 <strong>\u043a\u043e\u0434\u0435 <\/strong>\u0431\u0443\u043b\u043a\u0438 \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <strong>\u0441\u0432\u043e\u0439\u0441\u0442\u0432 <\/strong>\u0438 <strong>\u043f\u043e\u043b\u0435\u0439 <\/strong>\u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432\u00a0\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0431\u0443\u043b\u043e\u0447\u043a\u0438 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435.<\/p>\n<p>\u0412\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445, \u043e\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0441\u0435\u043a\u0430\u0435\u0442 \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u0432\u00a0\u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\/\u043f\u043e\u043b\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f\u00a0\u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437, \u0430\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<p>\u0412\u043e\u2011\u0432\u0442\u043e\u0440\u044b\u0445, \u0432\u0441\u0451 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u2011\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u0443\u043b\u043a\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043e\u0437\u043d\u044f \u0441\u00a0\u043a\u043e\u0434\u043e\u043c \u0438 \u043f\u043b\u044f\u0441\u043a\u0438 \u0441\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7e8\/143\/e09\/7e8143e099a3dfd574e86e20f3e8f7b6.png\" width=\"1560\" height=\"1232\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7e8\/143\/e09\/7e8143e099a3dfd574e86e20f3e8f7b6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7e8\/143\/e09\/7e8143e099a3dfd574e86e20f3e8f7b6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0431\u0443\u043b\u043e\u0447\u043a\u0435 \u0437\u0430\u0434\u0430\u044e\u0442 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434, \u043e\u043d\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c.<\/p>\n<p>\u0412\u00a0\u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c, <strong>\u043d\u0430\u0447\u0438\u043d\u043a\u0430 <\/strong>\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 <strong>\u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <\/strong>\u2014 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u043b\u043a\u0443, \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451. \u041f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0443\u043b\u0435\u0442\u0430\u0435\u0442 \u0431\u0443\u043b\u043e\u0447\u043a\u043e\u0432\u043e\u043c\u0443 <strong>\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u0437\u0430\u0434\u0430\u0447, <\/strong>\u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432\u00a0\u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0431\u0443\u043b\u043a\u0438 \u0438 \u043c\u0438\u0440\u0430, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0443 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c\u0443 <strong>\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044e \u0437\u0430\u0434\u0430\u0447<\/strong> \u043c\u0438\u0440\u0430.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0438 \u0432\u00a0\u043d\u0451\u043c \u043a\u043e\u043f\u044f\u0442\u0441\u044f \u0432\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u041a\u0430\u043a\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0438 \u0442\u0430\u043c \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u043d\u043e\u0432\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u0434\u043e\u00a0\u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u043d\u0435\u00a0\u043a\u043e\u043d\u0447\u0430\u0442\u0441\u044f, \u0437\u0430\u0442\u0435\u043c\u00a0\u2014 \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u0441\u044b\u043f\u0430\u0435\u0442.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/095\/1f4\/88e\/0951f488e7c8f1863357354ee90235da.webp\" width=\"2560\" height=\"3149\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/095\/1f4\/88e\/0951f488e7c8f1863357354ee90235da.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/095\/1f4\/88e\/0951f488e7c8f1863357354ee90235da.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0411\u044b\u0432\u0430\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0442\u0438\u043f\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435 \u0431\u0443\u043b\u043a\u0438 \u0438 \u043f\u0435\u0447\u043a\u0443<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0447\u043a\u0443<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u043b\u043a\u0443 \u0441\u00a0\u043d\u043e\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\/\u043f\u043e\u043b\u0435\u0439<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0430\u043a\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0438, \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0438\u0449\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435\u0433\u043e. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u043e\u0439 \u043d\u0435\u0442, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f <strong>\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/strong>. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c\u00a0\u2014 <strong>\u0446\u0438\u043a\u043b \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e<\/strong>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<p>\u042d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u0443\u043b\u043a\u0430\u043c\u0438 \u0438\/\u0438\u043b\u0438 \u0441\u00a0\u043f\u0435\u0447\u043a\u043e\u0439.<\/p>\n<p>\u0412\u00a0\u043d\u0451\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430\u00a0\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u0435\u0447\u043a\u0438. \u0415\u0441\u043b\u0438 \u043e\u043d\u0430 \u0435\u0441\u0442\u044c\u00a0\u2014 \u043f\u0435\u0447\u043a\u0430 \u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u0447\u0438<strong> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\/\u043f\u043e\u043b\u0435\u0439<\/strong> \u0438 <strong>\u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0439 <\/strong>\u0431\u0443\u043b\u043e\u043a. \u0418\u0449\u0443\u0442\u0441\u044f \u0432\u0441\u0435 \u0431\u0443\u043b\u043a\u0438, \u043f\u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0435\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438. \u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e \u0431\u0443\u043b\u043a\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u0447, \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f.<\/p>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0438\u043c\u0435\u0435\u0442 \u0442\u0440\u0438 \u044d\u0442\u0430\u043f\u0430 (\u043d\u0430\u0447\u0430\u043b\u043e, \u0442\u0435\u043b\u043e, \u043a\u043e\u043d\u0435\u0446). \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f \u0432\u0441\u0435\u0445 \u0437\u0430\u0434\u0430\u0447, \u0434\u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u0430\u043f, \u043f\u043e\u0442\u043e\u043c \u0442\u0440\u0435\u0442\u0438\u0439. \u0422\u043e \u0435\u0441\u0442\u044c, \u044d\u0442\u0430\u043f\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u043d\u043e\u00a0\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0441\u0435 \u0442\u0440\u0438 \u044d\u0442\u0430\u043f\u0430.<\/p>\n<ol>\n<li>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u0437\u00a0\u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0431\u0443\u043b\u043a\u0438. \u042d\u0442\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442<\/p>\n<\/li>\n<li>\n<p>\u0412\u00a0\u0431\u0443\u043b\u043a\u0435 \u0441\u0442\u0430\u0440\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043e\u0447\u0435\u043d\u044c\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043d\u043e\u0432\u044b\u0439<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0430\u0440\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u00a0\u043d\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f<\/p>\n<\/li>\n<\/ol>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\/\u043f\u043e\u043b\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u044d\u0442\u0430\u043f\u00a0\u2014 \u0442\u0443\u043f\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u00a0\u0441\u043f\u0438\u0441\u043a\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u00a0\u043d\u0435\u0451 \u0435\u0441\u0442\u044c, \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0432\u00a0\u0431\u0443\u043b\u043a\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043f\u043e\u00a0\u044d\u0442\u0438\u043c \u043d\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u043e, \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0430\u043c\u0430 \u043d\u0430\u0447\u0438\u043d\u043a\u0430 \u0431\u0443\u043b\u043a\u0438.<\/p>\n<p>\u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e\u00a0\u0434\u043b\u044f\u00a0\u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0437\u00a0\u043a\u043e\u0434\u0430 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0432\u0441\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0441\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u0430\u043c\u0438, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438. \u041f\u0440\u0438\u0447\u0451\u043c \u043f\u0430\u0440\u0441\u0435\u0440 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u0430\u043a\u00a0\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\/\u043a\u043e\u0440\u0442\u0435\u0436, \u0442\u0430\u043a \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u043e \u0435\u0441\u0442\u044c, \u043e\u043d, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0439\u043c\u0451\u0442 \u0438 <strong>new float3(1, 0, 0)<\/strong>, \u0438 <strong>float3.Red<\/strong><\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0435\u0447\u043a\u0438\u00a0\u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u0431\u0443\u043b\u043a\u0438:<\/p>\n<pre><code class=\"cs\">class \u0411\u0443\u043b\u043a\u04301 { \u2026 } class \u0411\u0443\u043b\u043a\u04302 { \u2026 }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u043f\u0435\u0447\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"cs\">public static class __bakery {   public static dynamic \u0411\u0443\u043b\u043a\u04301 { get; private set;}   public static dynamic \u0411\u0443\u043b\u043a\u04302 { get; private set;} } <\/code><\/pre>\n<p>\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0432\u00a0\u043f\u0435\u0447\u043a\u0443 \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0438\u0445\u0430\u043d\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u043e\u043b\u044f, \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u0412\u00a0\u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430\u00a0\u043c\u0438\u043a\u0448\u0435\u0440, \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044e, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u043e\u0438\u0434\u043e\u0432 (<strong>LEDCount<\/strong>) \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0448\u0442\u0443\u043a\u0438\u00a0\u2014 \u0432\u0441\u0451 \u0434\u043b\u044f\u00a0\u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u043a \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432\u00a0\u043a\u043e\u0434 \u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0443\u043b\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u044f\u0432\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e:<br \/><strong>using static __bakery<\/strong>;<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0435\u0447\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0438 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 <strong>dynamic\u2011\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443<\/strong> \u0447\u0435\u0440\u0435\u0437 <strong>Reflection <\/strong>\u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0431\u0443\u043b\u043e\u0447\u0435\u043a.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043a\u00a0\u0431\u0443\u043b\u043a\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u00a0\u0438\u043c\u0435\u043d\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u00a0\u0411\u0443\u043b\u043a\u04301\u00a0\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<pre><code class=\"cs\">\u0411\u0443\u043b\u043a\u04302.\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e = \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435;<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435\u0433\u043e<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043c\u0438\u0440\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0431\u0443\u043b\u043a\u0430 \u0438\u043b\u0438\u00a0\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0430 \u043a\u0430\u043a\u0430\u044f\u2011\u0442\u043e \u0438\u0437\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445. \u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e\u00a0\u043f\u0440\u0438\u00a0\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0431\u0443\u043b\u043a\u0438 \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u00a0\u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u00a0\u0441\u043f\u0438\u0441\u043a\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0445\u043e\u0442\u044f\u00a0\u0431\u044b \u043e\u0434\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u0442\u043e \u0432\u0441\u0451 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0445\u0438\u0442\u0440\u0435\u0435. \u0412\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445, \u0438\u0437\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043c\u0438\u0440\u0430 (\u043e\u0434\u043d\u0430 \u0438\u043b\u0438\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c). \u041e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0431\u0443\u043b\u043e\u043a.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0443\u043f\u043e \u0432\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0432\u043e\u0440\u043e\u0445\u0430 \u043d\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u0422\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0430\u044f \u0433\u043e\u0440\u0443 \u0437\u0430\u0434\u0430\u0447 \u0438 \u0438\u0441\u0447\u0435\u0437\u0430\u044e\u0449\u0430\u044f \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e. \u0414\u0435\u043b\u0430\u0435\u0442 \u043e\u043d\u0430 \u044d\u0442\u043e \u0442\u0430\u043a.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u0442\u0435\u0439\u0442 \u043c\u0430\u0448\u0438\u043d\u0430, \u0445\u0440\u0430\u043d\u044f\u0449\u0430\u044f \u0432\u00a0\u0441\u0435\u0431\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0443\u00a0\u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0431\u0443\u043b\u043e\u043a, \u0432\u00a0\u043d\u0435\u0451 \u0437\u0430\u043f\u0435\u0447\u0435\u0442\u043b\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0431\u0443\u043b\u043e\u043a. \u0417\u0430\u0442\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438 \u043d\u0430\u00a0\u0435\u0451 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u00a0\u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0431\u0443\u043b\u043a\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u00a0\u043a\u0430\u043a\u0430\u044f\u2011\u0442\u043e \u0431\u0443\u043b\u043a\u0430 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0430, \u0442\u043e \u043f\u043e\u00a0\u043a\u043e\u0434\u0443 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0443\u043b\u043e\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430\u00a0\u044d\u0442\u0443 \u0431\u0443\u043b\u043a\u0443. \u0415\u0441\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u0432\u00a0\u043a\u043e\u0434\u0435, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u044d\u0442\u0430 \u0441\u0441\u044b\u043b\u043a\u0430, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0\u043d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f, \u0438 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0432\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0432\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u0442\u0435\u0439\u0442\u2011\u043c\u0430\u0448\u0438\u043d\u044b \u043a\u0430\u043a\u00a0\u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0439. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u043b\u043a\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430\u00a0\u043d\u0435\u0451 \u0432\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0443\u043b\u043a\u0430\u0445.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u043f\u043e\u00a0\u0432\u0441\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0430\u043c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0435\u0439\u0442\u2011\u043c\u0430\u0448\u0438\u043d\u0443, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0446\u0435\u043b\u0435\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0431\u0443\u043b\u043e\u043a. \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0447\u043a\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u041f\u0435\u0440\u0432\u0430\u044f\u00a0\u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u00a0\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0435\u0447\u043a\u0438. \u0418 \u0434\u0430\u043b\u0435\u0435 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0443\u043b\u043a\u0438 \u043f\u043e\u00a0\u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u00a0\u0441\u0442\u0435\u0439\u0442\u2011\u043c\u0430\u0448\u0438\u043d\u0435.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0438\u0437\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 (\u043d\u0435 \u0432\u0441\u0435, \u0430\u00a0\u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0435\u0439\u0442\u2011\u043c\u0430\u0448\u0438\u043d\u043e\u0439\u00a0\u2014 \u0432\u0434\u0440\u0443\u0433 \u0442\u0430\u043c \u0443\u0436\u0435 \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c), \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0435, \u0447\u0442\u043e\u00a0\u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e\u00a0\u0441\u043e\u0437\u0434\u0430\u043b\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0437\u0430\u0434\u0430\u0447 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u00a0\u043d\u043e\u0432\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0446\u0438\u043a\u043b\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<\/div>\n<\/details>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<h3>\u0411\u0443\u043b\u043e\u0447\u043d\u044b\u0439 \u0438\u0442\u043e\u0433<\/h3>\n<p>\u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0442\u0430\u043a\u043e\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435\u00a0\u2014 \u043e\u0442\u00a0\u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u041e\u041e\u041f \u043a\u00a0\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u0431\u0443\u043b\u043e\u0447\u043a\u0435\u00a0\u2014 \u0438\u043c\u0435\u0435\u0442 \u0438 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u041e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0432\u043e\u0440\u043e\u0442\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u0448\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u0443\u044e \u043f\u0430\u0443\u0442\u0438\u043d\u0443. \u0410\u00a0\u0432\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0431\u043e\u0439 \u0448\u0430\u0433 \u0432\u00a0\u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0447\u0440\u0435\u0432\u0430\u0442 \u043e\u0442\u0441\u0442\u0440\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u043e\u0433\u0438. \u0421\u00a0\u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0431\u0443\u043b\u043e\u0447\u043a\u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f\u00a0\u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0438 \u043a\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u043c\u0441\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0438 \u0432\u0441\u044f\u043a\u0438\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043c\u00a0\u2014 \u043e\u043d\u0438 \u043e\u0447\u0435\u043d\u044c \u0433\u0438\u0431\u043a\u0438\u0435.<\/p>\n<p>\u042f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e\u00a0\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0442\u044c \u0431\u0443\u043b\u043e\u0447\u043a\u0438 \u0441\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u043a\u0430\u043a\u00a0\u0431\u044b \u0432\u00a0\u0434\u0432\u0430 \u0441\u043b\u043e\u044f: \u0441\u043d\u0438\u0437\u0443 \u0441\u043b\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u00a0\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u0441\u0442\u0440\u043e\u0439\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439\u00a0\u2014 \u043e\u043d \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043d\u043e\u00a0\u0441\u0442\u0440\u043e\u0435\u043d \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0430\u00a0\u0441\u0432\u0435\u0440\u0445\u0443 \u0433\u043b\u0430\u0437\u0443\u0440\u044c \u0438\u0437\u00a0\u0431\u0443\u043b\u043e\u0447\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f, \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u0432\u0441\u0435\u043c\u0438 \u044d\u0442\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/552\/089\/e87\/552089e8748ba62c8a10c8955dc54c97.webp\" width=\"2967\" height=\"782\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/552\/089\/e87\/552089e8748ba62c8a10c8955dc54c97.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/552\/089\/e87\/552089e8748ba62c8a10c8955dc54c97.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0415\u0441\u0442\u044c \u043c\u044b\u0441\u043b\u044c, \u0447\u0442\u043e\u00a0\u0442\u0430\u043a\u0430\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f\u00a0\u2014 \u0431\u0443\u043b\u043e\u0447\u043a\u0438 + \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b\u00a0\u2014 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f <strong>\u0430\u043c\u043e\u0440\u0444\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c <\/strong>\u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438, \u043f\u0440\u044f\u043c\u043e \u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438, \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0451 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044f\u0441\u044c \u043f\u043e\u0434\u00a0\u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>\u0420\u0443\u043b\u0438\u0442\u044c \u044d\u0442\u0438\u043c, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0431\u0443\u0434\u0435\u0442 \u0418\u0418.<\/p>\n<p>\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0430\u0434 \u0431\u0443\u043b\u043e\u0447\u043a\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0435\u0442\u0438\u0439 \u0441\u043b\u043e\u0439\u00a0\u2014 \u0441\u0435\u0442\u044c \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u044d\u0442\u0438\u0445 \u0431\u0443\u043b\u043e\u0447\u0435\u043a, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u044d\u0442\u0430 \u0432\u0441\u044f \u0436\u0438\u0432\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0430\u044f\u0441\u044f \u043c\u0435\u0442\u0430\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u00a0\u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441\u00a0\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0440\u0435\u0448\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438. \u041d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u00a0\u0432\u0435\u0440\u0441\u0438\u0438 \u041f\u041e, \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u00a0\u041e\u0421 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0435\u0434\u0438\u043d\u043e\u0439 \u0432\u044f\u0437\u043a\u043e\u0439 \u043f\u0430\u0443\u0442\u0438\u043d\u0438\u0441\u0442\u043e\u0439 \u0448\u0442\u0443\u043a\u043e\u0439. \u041a\u0430\u043a\u00a0\u0436\u0438\u0434\u043a\u0438\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u00a0\u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u00a0\u0434\u0435\u0442\u0430\u043b\u0435\u0439. \u0421\u043e\u0444\u0442 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u043a\u00a0\u0431\u0443\u0434\u0442\u043e\u00a0\u0431\u044b \u0447\u0438\u0442\u0430\u0442\u044c \u043c\u044b\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u0442\u043e, \u0447\u0442\u043e\u00a0\u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/24f\/d27\/530\/24fd275306499a11dff2e7758c625523.webp\" width=\"780\" height=\"366\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/24f\/d27\/530\/24fd275306499a11dff2e7758c625523.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/24f\/d27\/530\/24fd275306499a11dff2e7758c625523.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b\u2011\u043c\u044b\u0448\u043a\u0438\u2011\u044d\u043a\u0440\u0430\u043d\u044b, \u043d\u043e\u00a0\u0438 \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0435 \u043c\u043e\u0437\u0433\u043e\u0447\u0438\u043f\u044b, VR\u2011\u043b\u0438\u043d\u0437\u044b, \u0444\u0435\u043c\u0442\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0435 \u044d\u043d\u0446\u0438\u0444\u0430\u043b\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u043e\u043c\u043e\u0433\u0440\u0430\u0444\u044b \u0441\u0432\u0435\u0440\u0445\u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043d\u0438\u0448\u0442\u044f\u043a\u0438 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e.<\/p>\n<p>\u041f\u043e\u043a\u0430 \u0418\u0418 \u043d\u0430\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u00a0\u0431\u0443\u043b\u043a\u0438 \u044f \u043d\u0435\u00a0\u0441\u0442\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0440\u043e\u043a\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u0435\u043d\u0435\u0435 \u043d\u0435\u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u043c\u0438 \ud83d\ude42<\/p>\n<p>\u0414\u0430\u00a0\u0438 \u043f\u0435\u0440\u0432\u0430\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0443\u043b\u043e\u043a, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435\u00a0\u043b\u0438\u0448\u0435\u043d\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432. \u041d\u043e\u00a0\u0434\u0430\u0436\u0435 \u0432\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0431\u0443\u043b\u043a\u0438 \u0443\u0436\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u0436\u0438\u0437\u043d\u0435\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u00a0\u2014 \u043f\u043e\u00a0\u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0444\u0442\u0435.<\/p>\n<p><a class=\"anchor\" name=\"%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9%D0%A1%D1%82%D0%BE%D0%BB\" id=\"\u0420\u0430\u0431\u043e\u0447\u0438\u0439\u0421\u0442\u043e\u043b\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430<\/h2>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u0448\u0442\u0443\u043a\u0438\u00a0\u2014 \u0433\u0430\u0440\u043d\u0438\u0440 \u043a\u00a0\u0433\u043b\u0430\u0432\u043d\u043e\u043c\u0443: <strong>\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430<\/strong>, \u0434\u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u0434\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0438 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f \u043b\u0435\u043d\u0442.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0f6\/df7\/8d2\/0f6df78d2ca01fb1a9e292791c1aa9b7.webp\" width=\"11520\" height=\"2160\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0f6\/df7\/8d2\/0f6df78d2ca01fb1a9e292791c1aa9b7.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0f6\/df7\/8d2\/0f6df78d2ca01fb1a9e292791c1aa9b7.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><a href=\"https:\/\/raw.githubusercontent.com\/VBDUnit\/images_and_code_store\/refs\/heads\/main\/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9%20%D1%81%D1%82%D0%BE%D0%BB.webp\" rel=\"noopener noreferrer nofollow\">\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043a\u0440\u0438\u043d \u0432\u00a0\u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443<\/a><\/p>\n<p>\u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0438\u0433\u0440\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0435 \u0440\u0432\u0451\u0442 \u0434\u043d\u043e \u043e\u0442\u00a0\u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 24-\u043c\u0435\u0433\u0430\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u044b\u043c <strong>10-\u0431\u0438\u0442\u043d\u044b\u043c \u044d\u043a\u0440\u0430\u043d\u043e\u043c<\/strong>. \u0418 \u0442\u0443\u0442 \u0432\u0440\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043c\u044b, \u0432\u044b\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0432\u043e\u0451 \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0435\u0435 \u0445\u043e\u0437\u044f\u0439\u0441\u0442\u0432\u043e \u043d\u0430\u00a0\u0441\u0442\u043e\u043b \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/972\/1d3\/3ab\/9721d33ab1e1fbba6ca4498f4481ba56.png\" width=\"780\" height=\"65\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/972\/1d3\/3ab\/9721d33ab1e1fbba6ca4498f4481ba56.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/972\/1d3\/3ab\/9721d33ab1e1fbba6ca4498f4481ba56.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0444\u0442 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u043e\u043d \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0435\u0451 \u043e\u0442\u043a\u0443\u0434\u0430-\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c.<\/p>\n<p><strong>HDR <\/strong>\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u0432\u00a0\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 <strong>12\u041a<\/strong> \u0432\u0435\u0441\u0438\u0442 \u043e\u043a\u043e\u043b\u043e <strong>200\u00a0\u041c\u0431<\/strong> \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f <strong>120\u00a0\u0440\u0430\u0437 \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443<\/strong>. \u0420\u0438\u0441\u0443\u0435\u0442 \u0435\u0451 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 <strong>Windows DWM<\/strong> (\u0432 \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b, \u043d\u043e\u00a0\u043d\u0435\u00a0\u0441\u0443\u0442\u044c), \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043e\u043d\u0430 \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u043a\u0430\u043a\u0438\u043c\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u043d\u0430\u00a0<strong>C# <\/strong>\u0438\u043b\u0438\u00a0<strong>C++<\/strong>, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 <strong>\u043f\u0435\u0440\u0435\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0435\u0451 \u0432\u00a0\u041e\u0417\u0423<\/strong> \u0447\u0435\u0440\u0435\u0437 \u043a\u0443\u0447\u0443 \u0448\u0438\u043d. \u0422\u0430\u043a\u043e\u0435 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442 \u0432\u0441\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0\u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432\u00a0\u0438\u0433\u0440\u0435.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/81c\/3d6\/54c\/81c3d654cfd4d75778f5de0850a4a352.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/81c\/3d6\/54c\/81c3d654cfd4d75778f5de0850a4a352.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/81c\/3d6\/54c\/81c3d654cfd4d75778f5de0850a4a352.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0443\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 <strong>Windows GDI<\/strong>\u00a0\u2014 \u0430\u00a0\u043e\u043d \u043a\u0430\u043a\u00a0\u0440\u0430\u0437 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0432\u00a0\u041e\u0417\u0423\u00a0\u2014 <em>\u0440\u0435\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u00a0\u0441\u0442\u043e\u0438\u0442<\/em>. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0451 \u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u044e \u0438\u0437 <strong>HDR <\/strong>\u0432 <strong>SDR<\/strong>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <strong>GDI <\/strong>\u2014 \u044d\u0442\u043e 8-\u0431\u0438\u0442\u043d\u0430\u044f \u0441\u0442\u0430\u0440\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u0438 \u043f\u0440\u043e <strong>HDR <\/strong>\u043e\u043d\u0430 \u043d\u0435\u00a0\u0437\u043d\u0430\u0435\u0442.<\/p>\n<p>\u041d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u043e\u0431\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f: <strong>DirectX OutputDuplication<\/strong>. \u042d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u0434\u0430\u0451\u0442 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u00a0\u0441\u0432\u0435\u0436\u0435\u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u043f\u0440\u044f\u043c\u043e \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u0431\u0435\u0437\u00a0\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u00a0\u041e\u0417\u0423. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0435, \u0447\u0442\u043e\u00a0\u044d\u0442\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430\u00a0\u2014 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u043d\u0435\u0439 \u043a\u0430\u043a\u00a0\u0441\u00a0\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439 \u043d\u0435\u00a0\u0432\u044b\u0445\u043e\u0434\u044f \u0438\u0437\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b. \u0422\u043e, \u0447\u0442\u043e\u00a0\u043d\u0430\u0434\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 OutputDuplication<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u0443\u0431\u0440\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0445\u043b\u0430\u043c\u0438\u0442\u044c \u043a\u043e\u0434 \/\/\u0418\u0420\u041b \u0435\u0451 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u0434\u0435\u043b\u0430\u0442\u044c - DirectX \u043e\u0447\u0435\u043d\u044c \u043a\u0430\u043f\u0440\u0438\u0437\u043d\u0430\u044f \u043f\u0430\u043a\u043e\u0441\u0442\u044c ComPtr&lt;ID3D11Device&gt;           d3dDevice; ComPtr&lt;ID3D11DeviceContext&gt;    d3dContext; ComPtr&lt;IDXGIDevice&gt;        dxgiDevice; ComPtr&lt;IDXGIAdapter&gt;       dxgiAdapter; ComPtr&lt;IDXGIOutput&gt;        dxgiOutput; ComPtr&lt;IDXGIOutput1&gt;       dxgiOutput1; ComPtr&lt;IDXGIOutputDuplication&gt; deskDupl; D3D_FEATURE_LEVEL featureLevels[] = { D3D_FEATURE_LEVEL_11_0 };  \/\/\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e D3D11CreateDevice(nullptr,D3D_DRIVER_TYPE_HARDWARE,nullptr,0,featureLevels, _countof(featureLevels),D3D11_SDK_VERSION,&amp;d3dDevice,nullptr,&amp;d3dContext);  d3dDevice.As(&amp;dxgiDevice); dxgiDevice-&gt;GetAdapter(&amp;dxgiAdapter);  \/\/\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 Output (\u043c\u043e\u043d\u0438\u0442\u043e\u0440) dxgiAdapter-&gt;EnumOutputs(0, &amp;dxgiOutput); dxgiOutput.As(&amp;dxgiOutput1);  \/\/\u0414\u043e\u043a\u0430\u043f\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 dxgiOutput1-&gt;DuplicateOutput(d3dDevice.Get(), &amp;deskDupl);  for (int frame = 0; frame &lt; 100; frame++) {     DXGI_OUTDUPL_FRAME_INFO frameInfo;     ComPtr&lt;IDXGIResource&gt;       desktopResource;     ComPtr&lt;ID3D11Texture2D&gt;     desktopImage;      auto hr = deskDupl-&gt;AcquireNextFrame(1000, &amp;frameInfo, &amp;desktopResource);     if (hr == DXGI_ERROR_WAIT_TIMEOUT)         continue; \/\/\u041f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043d\u043e\u0432\u0430      if (FAILED(hr))     {         std::cerr &lt;&lt; \"\u041e\u043d\u043e \u043e\u043f\u044f\u0442\u044c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0433\u043e \u043a\u043e\u0444\u0435\\n\";         break;     }     desktopResource.As(&amp;desktopImage)     \/\/\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c desktopImage     \/\/\u042d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u0430\u044f (\u043f\u043e\u0447\u0442\u0438) \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0432\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430     \/\/\u0412 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430\u0448\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430     \/\/\u041c\u043e\u0436\u043d\u043e \u0435\u0451 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439     \/\/\u0410 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u041e\u0417\u0423 }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041d\u043e\u00a0\u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041e\u0431\u044b\u0447\u043d\u044b\u0439 <strong>OutputDuplication, <\/strong>\u043a\u0430\u043a\u00a0\u0438 <strong>GDI, <\/strong>\u043d\u0435\u00a0\u0443\u043c\u0435\u0435\u0442 \u0432 <strong>HDR<\/strong>. \u041f\u0440\u0438\u00a0\u0437\u0430\u0445\u0432\u0430\u0442\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u0441\u00a0\u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c HDR \u043e\u043d \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0438\u0437 <strong>HDR <\/strong>\u0432 <strong>SDR<\/strong>. \u0418 \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b, \u0438 \u043f\u0435\u0440\u0435\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043c\u044b \u0438\u0437\u0431\u0435\u0436\u0438\u043c, \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0451\u043c\u043a\u043e\u0439 \u0438 \u043f\u043e\u043c\u0435\u0448\u0430\u0435\u0442 \u0438\u0433\u0440\u0430\u043c.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 <strong>OutputDuplication \u0432\u0435\u0440\u0441\u0438\u0438 6\u00a0<\/strong>\u0438\u0437\u00a0\u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 Windows. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 HDR\u2011\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u0431\u0435\u0437\u00a0\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438, \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044f \u0435\u0451 \u0432\u00a0\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c <strong>16-\u0431\u0438\u0442\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435<\/strong>.<\/p>\n<p>\u0414\u0430\u2011\u0434\u0430\u00a0\u2014 \u043d\u0430\u00a0\u0442\u0435\u043b\u0438\u043a\u0435 \u043e\u043d\u0430 <strong>10-\u0431\u0438\u0442\u043d\u0430\u044f<\/strong>, \u043d\u043e\u00a0\u0432\u00a0\u043c\u043e\u0437\u0433\u0430\u0445 \u041e\u0421 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043a\u0430\u043a <strong>16-\u0431\u0438\u0442\u043d\u0430\u044f<\/strong> (\u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u043d\u0430\u043b RGB\u00a0\u2014 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <em>\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u043e\u0439<\/em> \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438). <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ebd\/d43\/670\/ebdd436709cfdb0a3488ff6c7fd1f5b5.webp\" width=\"1560\" height=\"292\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ebd\/d43\/670\/ebdd436709cfdb0a3488ff6c7fd1f5b5.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ebd\/d43\/670\/ebdd436709cfdb0a3488ff6c7fd1f5b5.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0443 OD6 \u043a\u0440\u0443\u0442\u0443\u044e \u0444\u0438\u0447\u0443: \u043e\u043d \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u0440\u0438\u00a0\u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u00a0\u0440\u0430\u0431\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u043e\u043b\u0443 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443. \u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u0441\u0442\u0440\u0430\u0434\u0430\u0439.<\/p>\n<p>\u042f \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e \u0432\u043e\u0435\u0432\u0430\u043b \u0441\u00a0\u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c, \u0434\u0430\u0436\u0435 \u043d\u0435\u00a0\u0437\u043d\u0430\u044e, \u043a\u0430\u043a\u00a0\u043e\u043d\u043e \u043d\u0435\u00a0\u043f\u0440\u0438\u0448\u043b\u043e \u043c\u043d\u0435 \u0432\u00a0\u0433\u043e\u043b\u043e\u0432\u0443 \u0441\u0440\u0430\u0437\u0443. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u00a0\u0441\u043e\u0444\u0442\u0435, \u0432\u00a0\u0441\u0430\u043c\u043e\u043c\u2011\u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435, \u0432\u00a0\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 App \u0443\u00a0\u043c\u0435\u043d\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f C++\u043d\u043e\u0435<\/p>\n<pre><code class=\"cpp\">SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);<\/code><\/pre>\n<p>\u0427\u0442\u043e\u00a0\u044d\u0442\u043e? \u0410\u00a0\u043e\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 Windows, \u0447\u0442\u043e\u00a0\u043c\u043e\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u00a0\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430\u043c\u0438, \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438 \u0440\u0430\u0437\u043d\u0443\u044e \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439.<\/p>\n<p>\u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043c\u043d\u0435 \u0441\u00a0\u043e\u0434\u043d\u0438\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u043c (\u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u00a0\u2014 \u0441\u00a0\u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u041e\u0421 \u044d\u0442\u0438 \u0442\u0440\u0438 <u>\u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445<\/u> \u0442\u0435\u043b\u0438\u043a\u0430\u00a0\u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0446\u0435\u043b\u044b\u0439 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440) \u0441\u00a0\u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u043c DPI, \u0438 \u043a\u0430\u043a\u043e\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u044d\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043a\u00a0\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0435\u0433\u043e \u0441\u043e\u0444\u0442\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b \u0432\u00a0HDR, \u044f \u043d\u0435\u00a0\u043f\u043e\u043d\u0438\u043c\u0430\u044e. \u0417\u0430\u0447\u0435\u043c? \u041f\u043e\u0447\u0435\u043c\u0443? \u0414\u043b\u044f\u00a0\u0447\u0435\u0433\u043e?<\/p>\n<p>\u041a\u0430\u043a\u0438\u043c\u2011\u0442\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0448\u0442\u0443\u043a\u0443 \u043f\u0440\u0438\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0441\u043e\u0444\u0442\u0430, \u0442\u043e <strong>OutputDuplication6<\/strong> \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0412\u0438\u0434\u0438\u043c\u043e, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u043e\u0442 \u044f \u0433\u043e\u0432\u043e\u0440\u044e \u0432\u0438\u043d\u0434\u0435 \u00ab\u042f \u043d\u0435\u00a0\u0442\u0443\u043f\u043e\u0439\u00bb\u00a0\u2014 \u0438 \u043e\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u00ab\u041e\u043a, \u043b\u0430\u0434\u043d\u043e, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u043d\u044f\u0442\u0430\u00bb\u00a0\u2014 \u00ab\u041a\u0430\u043a\u0430\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430?\u00bb\u00a0\u2014 \u00ab\u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u043e\u0439.\u00bb. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435. \u041d\u0443 \u043e\u043a, \u0432\u00a0\u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u00a0\u043d\u0430\u0441 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b \u0431\u0435\u0437\u00a0\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0438\u0437 <strong>HDR <\/strong>\u0432 <strong>SDR <\/strong>\u00a0\u2014 \u0440\u0430\u0437\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 + \u0441\u043d\u0438\u0436\u0430\u0435\u043c \u043b\u0430\u0433. \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c <strong>HDR<\/strong>\u2011\u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0432\u0435\u0442\u044f\u0442\u0441\u044f \u044f\u0440\u0447\u0435 100%. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0445 \u0446\u0432\u0435\u0442\u0430, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u043c\u0438 \u0438 \u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u043d\u0430\u0448\u0438\u043c \u00ab<strong>HDR<\/strong>\u00bb \u043b\u0435\u043d\u0442\u0430\u043c.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438:<strong> \u0437\u0430\u0445\u0432\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430\u00a0\u043b\u0435\u043d\u0442\u044b\u00a0\u2014 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u00a0HDR.<\/strong><\/p>\n<p>\u0421\u00a0DirectX \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 <strong>C++<\/strong>, \u0430\u00a0\u043d\u0435\u00a0\u043d\u0430 <strong>C#<\/strong>\u00a0\u2014 \u0442\u0443\u0442 \u043d\u0435\u00a0\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0431\u0435\u0441\u044f\u0447\u0438\u0445 \u043e\u0431\u0451\u0440\u0442\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0447\u043d\u043e \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0435\u00a0\u0443\u043c\u0435\u044e\u0442, \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0430\u044e\u0442 \u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432\u00a0\u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442\u00a0\u0432\u0441\u0435\u0433\u043e \u0441\u043e\u0444\u0442\u0430, \u0437\u0430\u0445\u0432\u0430\u0442 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043d\u0430 <strong>C++<\/strong> \u0438 <strong>HLSL<\/strong>.<\/p>\n<p>\u0428\u0435\u0439\u0434\u0435\u0440 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u044f \u043f\u0438\u0441\u0430\u043b \u0441\u0440\u0430\u0437\u0443 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c, \u0447\u0442\u043e\u0431\u044b\u00a0\u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043d\u0435\u00a0\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u00a0\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f\u00a0\u043d\u0435\u0451 \u0438 \u0442\u0430\u043a \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u0441\u0442\u043e\u044f\u0442. \u0418\u0437\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u0432\u00a0\u041e\u0417\u0423 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u044e\u0442 \u0441\u0440\u0430\u0437\u0443 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 <strong>HDR <\/strong>\u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f\u00a0\u0434\u0438\u043e\u0434\u043e\u0432\u00a0\u2014 \u0438\u0441\u043a\u043e\u0440\u043a\u0430 \u0432 <strong>37\u00a0\u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442<\/strong> (\u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 <strong>2315\u00a0<\/strong>\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <strong>float4[]<\/strong>).<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ffc\/d78\/2bf\/ffcd782bffdfa88d4a624a9ce90fbdac.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ffc\/d78\/2bf\/ffcd782bffdfa88d4a624a9ce90fbdac.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ffc\/d78\/2bf\/ffcd782bffdfa88d4a624a9ce90fbdac.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u00a0\u0441\u0430\u043c \u0430\u043d\u0430\u043b\u0438\u0437. \u0414\u043b\u044f\u00a0\u043d\u0435\u0433\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0430\u00a0\u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u043a\u0430\u043a\u00a0\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430. \u0418\u0437\u00a0\u0432\u0441\u0435\u0445 <strong>24\u00a0\u043c\u043b\u043d \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439<\/strong> \u044d\u0442\u043e\u0442 \u0448\u0435\u0439\u0434\u0435\u0440 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435\u0433\u043e <strong>\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0442\u0435\u043d \u0442\u044b\u0441\u044f\u0447<\/strong>.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"..\/AmbiknightScreenScanner\/UltrasharedTypes.cs\" \/\/\u041e\u0431\u0449\u0438\u0435 \u0435\u043d\u0443\u043c\u044b \u0434\u043b\u044f C#, HLSL \u0438 C++  StructuredBuffer&lt;int2&gt; coords : register(t0); \/\/ \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 Texture2D&lt;float4&gt; frameTexture : register(t1); \/\/ \u0422\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u0430\u0434\u0440\u043e\u043c RWStructuredBuffer&lt;float4&gt; resultColors : register(u0); \/\/ \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043b\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432  cbuffer Constants : register(b0) {     float REPROC_NUM_PIXELS; \/\/ 1 \/ NUM_PIXELS     int NUM_PIXELS;      int TOTAL_LEDS;     int2 ImageSize;     float power;     float rep_power; \/\/\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d 1\/power, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435\u0442     float padding; };  [numthreads(SHADER_SETTINGS_THREADS_PER_GROUP, 1, 1)] void main(uint3 DTid : SV_DispatchThreadID, uint3 GTid : SV_GroupThreadID) {     \/\/\u0423\u0437\u043d\u0430\u0451\u043c \u043a\u0442\u043e \u043c\u044b \u0433\u0434\u0435 \u043c\u044b     \/\/\u0437\u0430 \u043a\u0430\u043a\u043e\u0439 \u0434\u0438\u043e\u0434 \u043c\u044b \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u043c     int ledIndex = DTid.x;     if (ledIndex &gt;= TOTAL_LEDS) \/\/\u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u0442 - \u0432\u044b\u0445\u043e\u0434\u0438\u043c         return;      \/\/\u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0446\u0432\u0435\u0442\u043e\u0432     float4 sum = 0.0f;     int startIndex = ledIndex * NUM_PIXELS;     int endIndex = startIndex + NUM_PIXELS;      \/\/\u0435\u0441\u043b\u0438 \u0433\u0430\u043c\u043c\u0430-\u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f     if (power == 1.0f)     {         \/\/\u0422\u0443\u043f\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435         for (int i = startIndex; i &lt; endIndex; i++)         {             \/\/\u0411\u0435\u0440\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430             int2 pixelCords = coords[i];             \/\/\u0414\u0451\u0440\u0433\u0430\u0435\u043c \u043f\u043e \u043d\u0438\u043c \u0446\u0432\u0435\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044f             float4 pixelColor = frameTexture.Load(int3(pixelCords, 0));             \/\/\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c             sum += pixelColor;         }     }     else     {         \/\/\u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435         \/\/\u043d\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0442\u0443\u043f\u043e         \/\/\u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043e\u0437\u0432\u043e\u0434\u0438\u043c \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u044c         \/\/\u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0433\u0430\u043c\u043c\u0430-\u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044e         float4 p = float4(power, power, power, power);         for (int i = startIndex; i &lt; endIndex; i++)         {             int2 pixelCords = coords[i];             float4 pixelColor = frameTexture.Load(int3(pixelCords, 0));             pixelColor = pow(pixelColor, p);             sum += pixelColor;         }     }      \/\/\u0414\u0435\u043b\u0438\u043c \u043d\u0430 \u0447\u0438\u0441\u043b\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e - \u0441\u043d\u043e\u0432\u0430 \u0433\u0430\u043c\u043c\u0443     if (rep_power == 1.0f)         resultColors[ledIndex] = sum * REPROC_NUM_PIXELS;     else         resultColors[ledIndex] = pow(sum * REPROC_NUM_PIXELS, rep_power);  }<\/code><\/pre>\n<\/div>\n<\/details>\n<p><strong>\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b <\/strong>\u044d\u0442\u0438\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 <strong>\u0440\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f 1\u00a0\u0440\u0430\u0437<\/strong> \u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, <strong>1\u00a0\u0440\u0430\u0437<\/strong> \u0437\u0430\u043a\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u044c \u0438 <strong>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e<\/strong> \u0441\u00a0\u043a\u0430\u0436\u0434\u044b\u043c \u043a\u0430\u0434\u0440\u043e\u043c. \u0421\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u043d\u0438 \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u00a0\u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0445 \u043b\u0435\u043d\u0442 (\u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u043d\u0438 \u0432\u00a0<strong>\u043c\u0438\u043b\u043b\u0438\u043c\u0435\u0442\u0440\u0430\u0445<\/strong>, \u0432\u00a0\u043c\u0438\u0440\u043e\u0432\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u00a0\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0435). \u041d\u0430\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0438\u043e\u0434 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e <strong>500\u00a0\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439<\/strong>.<\/p>\n<p>\u0421\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u0430\u043a.<\/p>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u043d\u0444\u0430 \u043e\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435, \u0433\u0434\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043a\u043e\u043d\u0446\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0443\u0441\u043a\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043b\u0435\u043d\u0442 (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0445 36), \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u0438\u043e\u0434\u043e\u0432 \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0443\u0441\u043a\u0435. \u0412\u00a0\u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0435 \u0438 \u0437\u0430\u0434\u0430\u043d\u044b \u0432\u00a0\u043c\u0438\u043b\u043b\u0438\u043c\u0435\u0442\u0440\u0430\u0445, \u043d\u0430\u0447\u0430\u043b\u043e \u0432\u00a0\u0446\u0435\u043d\u0442\u0440\u0435 (\u044f \u043d\u0430\u0442\u044b\u043a\u0430\u043b \u0438\u0445 \u043c\u044b\u0448\u043a\u043e\u0439 \u043f\u043e <strong>CAD <\/strong>\u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0441\u0435\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b \u0432\u00a0\u043a\u043e\u0434\u0435).<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d5a\/046\/cfb\/d5a046cfb63487408c0ce3dae1b53a90.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d5a\/046\/cfb\/d5a046cfb63487408c0ce3dae1b53a90.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d5a\/046\/cfb\/d5a046cfb63487408c0ce3dae1b53a90.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044d\u0442\u0438 \u043c\u0438\u043b\u043b\u0438\u043c\u0435\u0442\u0440\u043e\u0432\u044b\u0435 <strong>\u043c\u0438\u0440\u043e\u0432\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b<\/strong> \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 <strong>\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 <\/strong>(\u043e\u0442 0\u00a0\u0434\u043e 1). \u0417\u0430\u0442\u0435\u043c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0430\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u00a0\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430\u00a0\u2014 \u0432\u00a0\u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u044d\u0442\u043e <strong>11&#8217;520\u00d72160<\/strong>. \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0442\u043e\u0447\u043a\u0430, \u0437\u0430\u0434\u0430\u043d\u043d\u0430\u044f \u043f\u0430\u0440\u043e\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 <strong>(x, y)<\/strong> \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d\u0435.<\/p>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u0443\u044e \u0442\u0430\u043a\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u0430\u044f <strong>\u043b\u0438\u043d\u0438\u044f <\/strong>(\u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430\u00a0\u2014 \u043f\u043e\u0434\u043b\u0438\u043d\u043d\u0435\u0435, \u0434\u043b\u044f\u00a0\u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e\u00a0\u2014 \u043f\u043e\u043a\u043e\u0440\u043e\u0447\u0435). \u0415\u0441\u043b\u0438\u00a0\u043b\u0438\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u00a0\u0433\u0440\u0430\u043d\u0438\u0446\u044b \u044d\u043a\u0440\u0430\u043d\u0430\u00a0\u2014 \u0435\u0451 \u0437\u0430\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u044c. \u0417\u0430\u0442\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043e\u043a\u043e\u043b\u043e <strong>500\u00a0\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439<\/strong> \u043d\u0430\u00a0\u044d\u0442\u043e\u0439\u00a0\u043b\u0438\u043d\u0438\u0438 \u0438 \u0447\u0443\u0442\u044c \u0440\u0430\u0441\u043f\u044b\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/742\/445\/a6a\/742445a6a55f80ad3cd1ab64d03d10cd.webp\" width=\"780\" height=\"320\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/742\/445\/a6a\/742445a6a55f80ad3cd1ab64d03d10cd.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/742\/445\/a6a\/742445a6a55f80ad3cd1ab64d03d10cd.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0420\u0430\u0441\u043f\u044b\u043b\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u00a0\u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0447\u0442\u043e\u2011\u0442\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u00a0\u2014 \u043a\u0430\u043a\u0430\u044f\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043b\u0438\u0442\u043a\u0430 \u0438\u043b\u0438\u00a0\u043a\u0438\u0440\u043f\u0438\u0447\u043d\u0430\u044f \u0441\u0442\u0435\u043d\u0430, \u0438 \u0447\u0443\u0442\u044c \u0441\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0435\u00a0\u043b\u0438\u043d\u0438\u0438 \u0441\u00a0\u044d\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439 \u0437\u0430\u0445\u043e\u0442\u044f\u0442 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0440\u0446\u0430\u044e\u0449\u0438\u0439 \u043c\u0443\u0430\u0440. \u0420\u0430\u0441\u043f\u044b\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441\u043d\u0438\u043c\u0430\u0435\u0442. <\/p>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043e\u0434\u0438\u043d \u0431\u0443\u0444\u0435\u0440 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b. \u0418 \u0434\u0430\u043b\u0435\u0435 \u043d\u0430\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043d\u043e\u0432\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0448\u0435\u0439\u0434\u0435\u0440 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438 \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0435\u043c \u0435\u043c\u0443 \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0438 \u0430\u0434\u0440\u0435\u0441 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430.<\/p>\n<p>\u0412\u00a0\u0438\u0442\u043e\u0433\u0435 \u0448\u0435\u0439\u0434\u0435\u0440 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0438\u043e\u0434\u0430 \u0434\u0451\u0440\u0433\u0430\u0435\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438\u0437\u00a0\u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430, \u0442\u0443\u043f\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u00a0\u043d\u0438\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0438, \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u0435\u0442 (\u0437\u0430\u0445\u0432\u0430\u0442 \u0438 \u0440\u0430\u0441\u0447\u0451\u0442\u044b \u0432\u00a0fp16) \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0434\u00a0\u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430. \u0412\u0441\u0451. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0446\u0435\u043f\u0438\u0442\u044c \u044d\u0442\u043e <strong>\u0421++<\/strong> \u043f\u043e\u0434\u0435\u043b\u0438\u0435 \u043a\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 <strong>C#<\/strong>\u043e\u0432\u043e\u0439 \u0442\u0443\u0448\u043a\u0435 \u044f \u0434\u043e\u043b\u0433\u043e \u0438 \u0445\u043c\u0443\u0440\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043d\u0430\u00a0<strong>C++ CLI<\/strong>, \u043d\u043e\u00a0\u043f\u0435\u0440\u0435\u0434\u0443\u043c\u0430\u043b, \u0438\u0431\u043e \u043e\u043f\u0430\u0441\u0430\u043b\u0441\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u0438 \u043a\u0430\u043a\u0438\u0445\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u0430\u043c\u043e\u0440\u043e\u0447\u0435\u043a \u0438\u0437\u2011\u0437\u0430 \u043d\u0435\u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0430: pinvoke + \u043a\u043b\u0430\u0441\u0441\u2011\u043e\u0431\u0451\u0440\u0442\u043a\u0430. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0431\u0430\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 <strong>DisposableExtended<\/strong>. \u0414\u043b\u044f\u00a0\u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0411\u0443\u043b\u043a\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u2011\u043e\u0431\u0451\u0440\u0442\u043a\u0443, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0435\u0439 \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<p><a class=\"anchor\" name=\"%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C\" id=\"\u041c\u043d\u043e\u0433\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u043e\u0441\u0442\u044c\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043d\u043e\u0433\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u043e\u0441\u0442\u044c<\/h2>\n<p><strong>OutputDuplication <\/strong>\u2014 \u0448\u0442\u0443\u043a\u0430 \u043a\u0430\u043f\u0440\u0438\u0437\u043d\u0430\u044f, \u0438 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u00a0\u0440\u043e\u0432\u043d\u043e\u043c <span class=\"habrahidden\">\u0438 \u043d\u0435\u00a0\u043e\u0447\u0435\u043d\u044c<\/span> \u043c\u0435\u0441\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0434\u0430\u00a0\u0442\u0430\u043a, \u0447\u0442\u043e\u00a0\u0434\u0430\u0436\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043d\u0435\u00a0\u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442. \u0422\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a. \u0418\u043d\u043e\u0433\u0434\u0430 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u043b\u0438\u00a0\u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0440\u0430\u0437\u0430 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <strong>DirectX <\/strong>\u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442\u044c \u0437\u0430\u0445\u0432\u0430\u0442 \u044d\u043a\u0440\u0430\u043d\u0430 \u0434\u043e 5\u00a0FPS, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e. \u0423\u0442\u0435\u0447\u0435\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0441\u0441\u044b\u043b\u043e\u043a, \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435\u0442, \u0432\u0441\u0451 \u043e\u043a\u00a0\u2014 \u0430\u00a0FPS \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u044f \u0432\u044b\u043d\u0435\u0441<strong> \u0430\u043d\u0430\u043b\u0438\u0437 \u044d\u043a\u0440\u0430\u043d\u0430 \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441<\/strong>.<\/p>\n<pre><code class=\"cs\">\/\/HDRScanner - \u043a\u043b\u0430\u0441\u0441, \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 C++\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \/\/\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0445\u0432\u0430\u0442 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u044d\u043a\u0440\u0430\u043d\u0430 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u043c public class HDRScanner : DisposableExtended, ILEDCount {     public HDRScanner(           CoordinatesTableBase&lt;float2&gt; cordsTable, \/\/\u043e\u0442\u043d. \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430           bool useSeparatedProcess = true \/\/\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043b\u0438 \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435         )       {       ...       }     ... }<\/code><\/pre>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e: \u043f\u0440\u0438\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>HDRScanner<\/strong> \u0441\u00a0\u0444\u043b\u0430\u0433\u043e\u043c <strong>useSeparatedProcess <\/strong>\u0441\u043e\u0444\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0430\u043c \u0441\u0435\u0431\u044f \u0432\u00a0\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u043f\u043e\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u0435 <strong>stdin <\/strong>\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u044d\u043a\u0440\u0430\u043d \u0438 \u0447\u0435\u0440\u0435\u0437 <strong>stdout <\/strong>\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u00a0\u0431\u0438\u043d\u0430\u0440\u043d\u043e\u043c \u0432\u0438\u0434\u0435. \u0421\u00a0\u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u00a0\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 <strong>HDRScanner<\/strong>. <\/p>\n<p>\u0414\u043b\u044f\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0432\u00a0\u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 <strong>App <\/strong>\u0443\u00a0\u043c\u0435\u043d\u044f \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e:<\/p>\n<pre><code class=\"cs\">  static App()   {       \/\/\u041e\u043d\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 SetProcessDpiAwarenessContext       \/\/\u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u0442 - \u043d\u0430\u0434\u043e \u043b\u0438 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441       HDRScanner.InitializeGlobalAndMakeSlaveWorkIfNeed(         out var slaveProcessScanScreenWorkSuccess);   }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0442\u043e\u2011\u0442\u043e \u0438\u0434\u0451\u0442 \u043d\u0435\u00a0\u0442\u0430\u043a, <strong>DirectX <\/strong>\u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u044b\u043f\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u0438\u043b\u0438\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f (\u0442\u0430\u043a\u043e\u0433\u043e \u0443\u00a0\u043c\u0435\u043d\u044f \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u043d\u043e\u00a0\u043c\u0430\u043b\u043e\u00a0\u043b\u0438 \u0447\u0442\u043e), \u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0438, \u043a\u0430\u043a\u00a0\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435\u00a0\u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<p>\u041f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0432\u0441\u0451 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e. \u0415\u0441\u0442\u044c \u043f\u0430\u0447\u043a\u0430 internal-\u0442\u0438\u043f\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <strong>ICScreenScanner <\/strong>\u0438<strong> <\/strong>\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 <strong>CScreenScannerBase, <\/strong>\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043d\u0435\u043a\u0438\u0439 \u0441\u043a\u0430\u043d\u0435\u0440<\/p>\n<\/li>\n<li>\n<p><strong>CScreenScannerLocal<\/strong>, \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 C++ \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439<\/p>\n<\/li>\n<li>\n<p><strong>CScreenScannerProcess<\/strong>, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0438\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432 \u0441\u043f\u0435\u0446\u0440\u0435\u0436\u0438\u043c\u0435<\/p>\n<\/li>\n<li>\n<p><strong>CScannerSlave, <\/strong>\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u0438\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c. \u0412\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <strong>CScreenScannerLocal, <\/strong>\u043f\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0438\u0437\u0432\u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/p>\n<\/li>\n<\/ul>\n<p><strong>HDRScanner <\/strong>\u0438\u043c\u0435\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0431\u044f \u043f\u043e\u043b\u0435 <strong>ICScreenScanner, <\/strong>\u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u0432\u00a0\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u00a0\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043f\u0438\u0445\u0430\u0435\u0442\u00a0\u043b\u0438\u0431\u043e <strong>CScreenScannerProcess,<\/strong>\u00a0\u043b\u0438\u0431\u043e <strong>CScreenScannerLocal. <\/strong>\u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0442 \u0441\u043a\u0430\u043d\u0435\u0440\u00a0\u0431\u044b\u043b \u0438\u0441\u043f\u0440\u0430\u0432\u0435\u043d, \u0438 \u0435\u0441\u043b\u0438 \u0447\u0442\u043e\u00a0\u043d\u0435\u00a0\u0442\u0430\u043a\u00a0\u2014 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0435\u0433\u043e.<\/p>\n<p>\u041c\u0435\u0436\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0441\u00a0\u043d\u0443\u043b\u044f, \u0447\u0442\u043e\u0431\u044b\u00a0\u0431\u044b\u043b\u043e \u0431\u0435\u0437\u00a0\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439. \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \/ \u0437\u0430\u043f\u0438\u0441\u044c (\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0449\u0438\u043d\u0430 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0437\u0434\u0435\u0441\u044c \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b) \u0432 <strong>StandardInput <\/strong>\/ <strong>StandardOutput<\/strong>, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u0432\u0441\u0451 \u0442\u0430\u043a\u043e\u0435.<\/p>\n<p><a class=\"anchor\" name=\"%D0%9F%D0%BE%D0%BB%D0%B8%D0%B3%D0%BB%D0%BE%D1%82%D0%BD%D1%8B%D0%B9%D0%9A%D0%BE%D0%B4\" id=\"\u041f\u043e\u043b\u0438\u0433\u043b\u043e\u0442\u043d\u044b\u0439\u041a\u043e\u0434\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u041a\u0430\u043a C++ \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 C# \u043a\u043e\u0434, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 HLSL<\/h2>\n<p>\u0418 \u0432\u043e\u0442 \u0432\u00a0\u043d\u0430\u0448 \u0441\u043e\u0444\u0442 \u043d\u0430 <strong>C#<\/strong> \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0443\u0441\u043a\u0438 \u043d\u0430 <strong>C++<\/strong> \u0438 <strong>HLSL<\/strong>. \u0414\u043b\u044f\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0438 \u0442\u0440\u043e\u0435 \u043c\u043e\u0433\u043b\u0438 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f, \u0438\u043c \u043d\u0430\u0434\u043e \u043e\u043f\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u043c\u0438\u2011\u0442\u043e \u043e\u0431\u0449\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438.<\/p>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u00a0\u2014 \u043d\u0443\u0434\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435\u00a0\u0436\u0435 \u0448\u0442\u0443\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432 <strong>HLSL<\/strong>, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432 <strong>C++<\/strong> \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432 <strong>C#<\/strong>. \u0418 \u043f\u043e\u0442\u043e\u043c \u043e\u0433\u0440\u0435\u0431\u0430\u0442\u044c \u043e\u0442\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u0433\u0434\u0435\u2011\u0442\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0441\u044f \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0441\u0442\u0438. \u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u0438\u0446\u0435\u043f\u0438\u0442\u044c \u043a\u0430\u043a\u0443\u044e\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u0448\u0442\u0443\u043a\u0443, \u043d\u043e\u00a0\u0443\u00a0\u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0438\u0434\u0435\u044f \u043f\u043e\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435.<\/p>\n<p>\u042f \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b \u0442\u0438\u043f\u044b \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0442 <strong>\u0444\u0430\u0439\u043b \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0438 \u0432\u00a0HLSL, \u0438 \u0432\u00a0C#, \u0438 \u0432\u00a0C++<\/strong>, \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432 <strong>HLSL<\/strong>, <strong>C#<\/strong> \u0438 <strong>C++<\/strong>. \u041a\u043e\u0434 \u0432\u00a0\u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c \u0434\u043b\u044f\u00a0\u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<pre><code class=\"cpp\">#if CSHARP using Ambiknight.Pepectors; namespace Ambiknight #else #define public #if CSHARP || C_PLUS_PLUS namespace UltrasharedTypes #endif #pragma once #endif #if CSHARP || C_PLUS_PLUS { #endif     \/\/\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b (\u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e 4 \u0431\u0430\u0439\u0442\u0430, \u0430 \u0442\u043e \u043d\u043e\u0433\u0430 \u0431\u043e\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442)     public struct LedVisualizerConstants     {         public int2 CanvasSize;         public int2 SpriteSize;          public int2 SpriteSizeDiv2;         public uint LedCount;         public float GlarePower;          public float LerpPower;         public int3 Padding;          public void Correct()         {             \/\/\u041f\u0435\u043f\u0435\u043c\u0430\u0442\u0438\u043a\u0443 \u043d\u0435 \u044e\u0437\u0430\u0435\u043c \u0438\u0431\u043e \u043b\u0435\u043d\u044c \u0431\u044b\u043b\u043e \u043f\u0445\u0430\u0442\u044c \u0435\u0451 \u0432 \u043f\u043b\u044e\u0441\u044b\/HLSL             SpriteSizeDiv2.x = SpriteSize.x &gt;&gt; 1;             SpriteSizeDiv2.y = SpriteSize.y &gt;&gt; 1;         }     };      public enum UltrasharedConstants     {         LED_BUFFER_ALIGNMENT = 64,         SHADER_SETTINGS_THREADS_PER_GROUP = 32,         LEDVISUALIZER_THREADS_X = 32,         LEDVISUALIZER_THREADS_Y = 24,         LEDVISUALIZER_THREADS_Z = 1,         LEDVISUALIZER_THREAD_BLOCKS_X = 48,         LEDVISUALIZER_THREAD_BLOCKS_Y = 16,         LEDVISUALIZER_THREAD_BLOCKS_Z = 1,         LEDVISUALIZER_THREAD_X_MULTIPLER = 2,         LEDVISUALIZER_THREAD_Y_MULTIPLER = 2,         LEDVISUALIZER_CANVAS_MAX_WIDTH = (LEDVISUALIZER_THREADS_X * LEDVISUALIZER_THREAD_BLOCKS_X * LEDVISUALIZER_THREAD_X_MULTIPLER),         LEDVISUALIZER_CANVAS_MAX_HEIGHT = (LEDVISUALIZER_THREADS_Y * LEDVISUALIZER_THREAD_BLOCKS_Y * LEDVISUALIZER_THREAD_Y_MULTIPLER),         TEXTURE_PADDING = 8,     };      public enum ScreenScanResult     {         Unknown = 0,         Success = 1,         DiscardByNoChangesOnScreen = 1,         DiscardByTimeout = 2,         DiscardByProtectedContent = 3,         DiscardByAccessLost = 4,         DiscardByScannerRecreating = 5,         DiscardByScannerDisposed = 6,         FailedByError = 500     };   #if CSHARP || C_PLUS_PLUS } #endif #if CSHARP #else #undef int #undef public #endif<\/code><\/pre>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e, \u0435\u043d\u0443\u043c\u044b \u0442\u043e\u0436\u0435. \u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0435\u00a0\u043a\u0430\u043a\u00a0\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, \u0430\u00a0\u043a\u0430\u043a\u00a0\u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0435\u043d\u0443\u043c <strong>UltrasharedConstants<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u0443\u0448\u0430\u044e\u0442 \u0441\u0440\u0430\u0437\u0443 \u0442\u0440\u0438 \u044f\u0437\u044b\u043a\u0430. \u0412\u043a\u0443\u0441\u043d\u043e \u043d\u043e\u00a0\u0433\u0440\u0443\u0441\u0442\u043d\u043e: \u0442\u0430\u043a\u0430\u044f \u0448\u0442\u0443\u043a\u0430 \u043f\u0440\u043e\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 <strong>HLSL <\/strong>\u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 <strong>2017<\/strong>\u00a0\u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c <strong>enum<\/strong>\u044b. \u0418\u043d\u0430\u0447\u0435 \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u0434\u0432\u0443\u0445 \u044f\u0437\u044b\u043a\u0430\u0445: <strong>C#<\/strong> \u0438 <strong>C++<\/strong>, \u0431\u0435\u0437 HLSL.<\/p>\n<p><strong>HLSL 2017<\/strong> \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b <strong>ShaderModel 6.0<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432\u00a0\u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 <strong>DirectX12<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439\u00a0\u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0451 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c, \u0438 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0442\u0430\u043a \u043a\u0430\u043a <strong>DX12<\/strong> \u0431\u043b\u0438\u0436\u0435 \u043a\u00a0\u0436\u0435\u043b\u0435\u0437\u0443.<\/p>\n<p>\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 <strong>DX12 <\/strong>\u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u043b\u0435\u043d\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <strong>C++<\/strong>, <strong>C#<\/strong> \u0438 <strong>HLSL <\/strong>\u0434\u0440\u0443\u0433\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439  \u043d\u0430 \u043c\u0430\u0433\u0438\u0438 \u0441 internal<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#if CSHARP using Ambiknight.Pepectors;  namespace Ambiknight #else #define public #if CSHARP || C_PLUS_PLUS namespace UltrasharedTypes #endif #pragma once #endif #if CSHARP || C_PLUS_PLUS { #endif     \/\/\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b (\u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e 4 \u0431\u0430\u0439\u0442\u0430, \u0430 \u0442\u043e \u043d\u043e\u0433\u0430 \u0431\u043e\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442)     public struct LedVisualizerConstants     {         public int2 CanvasSize;         public int2 SpriteSize;          public int2 SpriteSizeDiv2;         public uint LedCount;         public float GlarePower;          public float LerpPower;         public int3 Padding;          public void Correct()         {             \/\/\u041f\u0435\u043f\u0435\u043c\u0430\u0442\u0438\u043a\u0443 \u043d\u0435 \u044e\u0437\u0430\u0435\u043c \u0438\u0431\u043e \u043b\u0435\u043d\u044c \u0431\u044b\u043b\u043e \u043f\u0445\u0430\u0442\u044c \u0435\u0451 \u0432 \u043f\u043b\u044e\u0441\u044b             SpriteSizeDiv2.x = SpriteSize.x &gt;&gt; 1;             SpriteSizeDiv2.y = SpriteSize.y &gt;&gt; 1;         }     }; #if CSHARP     public class UltrasharedConstants     { #else #define internal static #endif          \/\/\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0434\u043b\u044f C#, C++ \u0438 HLSL         \/\/internal \u0432 C++ \u0438 HLSL \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 static         internal const int LED_BUFFER_ALIGNMENT = 64;         internal const int SHADER_SETTINGS_THREADS_PER_GROUP = 32;         internal const int LEDVISUALIZER_THREADS_X = 32;         internal const int LEDVISUALIZER_THREADS_Y = 24;         internal const int LEDVISUALIZER_THREADS_Z = 1;         internal const int LEDVISUALIZER_THREAD_BLOCKS_X = 48;         internal const int LEDVISUALIZER_THREAD_BLOCKS_Y = 16;         internal const int LEDVISUALIZER_THREAD_BLOCKS_Z = 1;         internal const int LEDVISUALIZER_THREAD_X_MULTIPLER = 2;         internal const int LEDVISUALIZER_THREAD_Y_MULTIPLER = 2;         internal const int LEDVISUALIZER_CANVAS_MAX_WIDTH = (LEDVISUALIZER_THREADS_X * LEDVISUALIZER_THREAD_BLOCKS_X * LEDVISUALIZER_THREAD_X_MULTIPLER);         internal const int LEDVISUALIZER_CANVAS_MAX_HEIGHT = (LEDVISUALIZER_THREADS_Y * LEDVISUALIZER_THREAD_BLOCKS_Y * LEDVISUALIZER_THREAD_Y_MULTIPLER);         internal const int TEXTURE_PADDING = 8; #if CSHARP     } #else #undef internal #endif  #if C_PLUS_PLUS || CSHARP     \/\/\u0415\u043d\u0443\u043c\u044b \u0434\u043b\u044f C# \u0438 C++, \u043d\u043e \u041d\u0415 \u0434\u043b\u044f HLSL     public enum ScreenScanResult     {         Unknown = 0,         Success = 1,         DiscardByNoChangesOnScreen = 1,         DiscardByTimeout = 2,         DiscardByProtectedContent = 3,         DiscardByAccessLost = 4,         DiscardByScannerRecreating = 5,         DiscardByScannerDisposed = 6,         FailedByError = 500     }; #endif  #if CSHARP || C_PLUS_PLUS } #endif #if CSHARP #else #undef int #undef public #endif<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u0434\u0443\u043c\u043a\u0430 \u0442\u0430\u043a\u0430\u044f: \u0441\u043b\u043e\u0432\u043e <strong>internal <\/strong>\u044f\u0437\u044b\u043a\u0438 <strong>C++<\/strong> \u0438 <strong>HLSL <\/strong>\u043d\u0435\u00a0\u0437\u043d\u0430\u044e\u0442 (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442\u00a0<strong>public<\/strong>). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u043c\u0438. \u0410\u00a0\u0432\u00a0<strong>C#<\/strong> \u043f\u0443\u0441\u0442\u044c \u043e\u043d\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f <strong>internal<\/strong>. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 <strong>C#<\/strong> \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u00a0\u0431\u043b\u043e\u043a\u0438 <strong>#define<\/strong> \u0434\u0430\u0436\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0445 \u0438\u0437\u00a0\u043a\u043e\u043c\u043f\u043b\u0438\u044f\u0446\u0438\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 <strong>#if<\/strong>. \u0410\u00a0\u0432 <strong>C#<\/strong>, \u0432\u00a0\u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 <strong>HLSL <\/strong>\u0438 <strong>C++<\/strong>, <strong>#define<\/strong> \u0438\u043c\u0435\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e 1\u00a0\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u0430\u00a0\u043d\u0435 2. \u0412\u00a0\u0438\u0442\u043e\u0433\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 <strong>C# <\/strong>\u0432\u0438\u0434\u0438\u0442 <strong>#define internal static<\/strong>, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0438\u0437\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0438 \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b \u043c\u0435\u043d\u0435\u0435 \u0438\u0437\u044f\u0449\u043d\u044b\u0439, \u043d\u043e\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442:<\/p>\n<details class=\"spoiler\">\n<summary>\u041c\u0435\u043d\u0435\u0435 \u0438\u0437\u044f\u0449\u043d\u044b\u0439, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#if CSHARP using Ambiknight.Pepectors; namespace Ambiknight #else #define public #if CSHARP || C_PLUS_PLUS namespace UltrasharedTypes #endif #pragma once #endif #if CSHARP || C_PLUS_PLUS { #endif     \/\/\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b (\u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e 4 \u0431\u0430\u0439\u0442\u0430, \u0430 \u0442\u043e \u043d\u043e\u0433\u0430 \u0431\u043e\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442)     public struct LedVisualizerConstants     {         public int2 CanvasSize;         public int2 SpriteSize;          public int2 SpriteSizeDiv2;         public uint LedCount;         public float GlarePower;          public float LerpPower;         public int3 Padding;          public void Correct()         {             \/\/\u041f\u0435\u043f\u0435\u043c\u0430\u0442\u0438\u043a\u0443 \u043d\u0435 \u044e\u0437\u0430\u0435\u043c \u0438\u0431\u043e \u043b\u0435\u043d\u044c \u0431\u044b\u043b\u043e \u043f\u0445\u0430\u0442\u044c \u0435\u0451 \u0432 \u043f\u043b\u044e\u0441\u044b             SpriteSizeDiv2.x = SpriteSize.x &gt;&gt; 1;             SpriteSizeDiv2.y = SpriteSize.y &gt;&gt; 1;         }     }; #if CSHARP     public class UltrasharedConstants     { #else #define internal #endif         \/\/\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0434\u043b\u044f C#, C++ \u0438 HLSL              internal             #if !CSHARP             static              #endif             const int LED_BUFFER_ALIGNMENT = 64;              internal             #if !CSHARP             static              #endif             const int SHADER_SETTINGS_THREADS_PER_GROUP = 32;              internal             #if !CSHARP             static              #endif             const int LEDVISUALIZER_THREADS_X = 32;              internal             #if !CSHARP             static              #endif             const int LEDVISUALIZER_THREADS_Y = 24;              internal             #if !CSHARP             static              #endif             const int LEDVISUALIZER_THREADS_Z = 1;              internal             #if !CSHARP             static              #endif             const int LEDVISUALIZER_THREAD_BLOCKS_X = 48;              internal             #if !CSHARP             static              #endif             const int LEDVISUALIZER_THREAD_BLOCKS_Y = 16;              internal             #if !CSHARP             static              #endif             const int LEDVISUALIZER_THREAD_BLOCKS_Z = 1;              internal             #if !CSHARP             static              #endif             const int LEDVISUALIZER_THREAD_X_MULTIPLER = 2;                       internal             #if !CSHARP             static              #endif             const int LEDVISUALIZER_THREAD_Y_MULTIPLER = 2;              internal             #if !CSHARP             static              #endif             const int LEDVISUALIZER_CANVAS_MAX_WIDTH = (LEDVISUALIZER_THREADS_X * LEDVISUALIZER_THREAD_BLOCKS_X * LEDVISUALIZER_THREAD_X_MULTIPLER);              internal             #if !CSHARP             static              #endif             const int LEDVISUALIZER_CANVAS_MAX_HEIGHT = (LEDVISUALIZER_THREADS_Y * LEDVISUALIZER_THREAD_BLOCKS_Y * LEDVISUALIZER_THREAD_Y_MULTIPLER);              internal             #if !CSHARP             static              #endif             const int TEXTURE_PADDING = 8; #if CSHARP     } #else #undef internal #endif  #if C_PLUS_PLUS || CSHARP     \/\/\u0415\u043d\u0443\u043c\u044b \u0434\u043b\u044f C# \u0438 C++, \u043d\u043e \u041d\u0415 \u0434\u043b\u044f HLSL     public enum ScreenScanResult     {         Unknown = 0,         Success = 1,         DiscardByNoChangesOnScreen = 1,         DiscardByTimeout = 2,         DiscardByProtectedContent = 3,         DiscardByAccessLost = 4,         DiscardByScannerRecreating = 5,         DiscardByScannerDisposed = 6,         FailedByError = 500     }; #endif  #if CSHARP || C_PLUS_PLUS } #endif #if CSHARP #else #undef int #undef public #endif<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0438 \u0442\u0438\u043f\u044b \u0432\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u0435\u0451 \u043e\u0431\u0451\u0440\u0442\u043a\u0430\u0445 \u0438 \u0448\u0435\u0439\u0434\u0435\u0440\u0430\u0445 <u>\u0432\u0441\u0435\u0433\u0434\u0430<\/u> \u0431\u0443\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0437\u0434\u0435\u0441\u044c \u043d\u0430\u0434\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u00a0\u0433\u043e\u043b\u043e\u0432\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441\u0440\u0430\u0437\u0443 \u0442\u0440\u0435\u043c\u044f \u044f\u0437\u044b\u043a\u0430\u043c\u0438, \u0438 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435\u00a0\u0432\u0441\u0451 \u043c\u043e\u0436\u043d\u043e \u0441\u0435\u0431\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c, \u0430\u00a0\u0447\u0442\u043e\u2011\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u043e\u0442\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c, \u043d\u043e, \u0438\u043c\u0445\u043e, \u0448\u0442\u0443\u043a\u0430 \u0443\u0434\u043e\u0431\u043d\u0430\u044f. \u0415\u0441\u043b\u0438 \u0434\u043e\u0431\u0435\u0440\u0443\u0441\u044c \u0434\u043e\u00a0enums \u0432\u00a0SM6, \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<p><a class=\"anchor\" name=\"%D0%AF%D0%B4%D1%80%D0%BE\" id=\"\u042f\u0434\u0440\u043e\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e<\/h2>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0451 \u0432\u00a0\u043a\u0443\u0447\u0443. \u042f\u0434\u0440\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0432\u00a0\u0441\u0435\u0431\u0435:<\/p>\n<ul>\n<li>\n<p>\u0418\u043d\u0444\u0443 \u043e\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435<\/p>\n<\/li>\n<li>\n<p>\u0411\u0443\u043b\u043a\u0438 \u0438 \u0438\u0445 \u043c\u0438\u0440<\/p>\n<\/li>\n<li>\n<p>\u041c\u0438\u043a\u0448\u0435\u0440<\/p>\n<\/li>\n<li>\n<p>\u0422\u0430\u0439\u043c\u0435\u0440\u044b<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u0439\u043c\u0435\u0440\u044b \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u044b \u043d\u0430\u00a0\u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u041e\u0421, \u0438 \u0441\u00a0\u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430\u043c\u0438 \u043f\u0438\u043d\u0430\u044e\u0442 \u043c\u0438\u043a\u0448\u0435\u0440 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043a\u0430\u0434\u0440. \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440\u00a0\u2014 \u044d\u0442\u043e \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0432\u044b\u0441\u043e\u043a\u043e\u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u0430\u043c\u043e\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f <strong>BeautifulTimer<\/strong> \u0438\u0437\u00a0\u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432.<\/p>\n<p>\u0412\u00a0\u043c\u0438\u043a\u0448\u0435\u0440\u0435 \u0441\u0438\u0434\u044f\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b\u2011\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b, \u043e\u0434\u0438\u043d \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u0438 \u0431\u0443\u043b\u043a\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 (\u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430\u00a0\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u043e\u0432).<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/63e\/dd1\/1d0\/63edd11d0887288d3ff3b3b247705e71.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/63e\/dd1\/1d0\/63edd11d0887288d3ff3b3b247705e71.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/63e\/dd1\/1d0\/63edd11d0887288d3ff3b3b247705e71.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u043c\u0438\u043a\u0448\u0435\u0440 \u0431\u0435\u0440\u0435\u0442 \u0438\u0437\u00a0\u043f\u0443\u043b\u0430 \u043a\u0430\u0434\u0440, \u043e\u0447\u0438\u0449\u0430\u0435\u0442, \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u043d\u0430\u043b, \u043f\u043e\u0442\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043d\u0430\u043b \u0432\u044b\u0432\u043e\u0434\u0430, \u043f\u043e\u0442\u043e\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u0430\u0434\u0440 \u0432\u00a0\u043f\u0443\u043b.<\/p>\n<p>\u0412\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0451 \u0447\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u041c\u0438\u043a\u0448\u0435\u0440 \u0431\u0435\u0440\u0435\u0442 \u0438\u0437\u00a0\u043f\u0443\u043b\u0430 \u0434\u0432\u0430 \u043a\u0430\u0434\u0440\u0430. \u041e\u043d\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b, \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0438\u0434\u0451\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u0417\u0430\u0442\u0435\u043c \u0438\u0437\u00a0\u043f\u0443\u043b\u0430 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0442\u0440\u0435\u0442\u0438\u0439 \u043a\u0430\u0434\u0440\u2011\u0445\u043e\u043b\u0441\u0442. \u0414\u0432\u0430 \u0441\u0432\u0435\u0436\u0435\u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0434\u0440\u0430, \u0432\u0440\u0435\u043c\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u043a\u0430\u0434\u0440\u2011\u0445\u043e\u043b\u0441\u0442 \u043f\u0438\u0445\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u0431\u0443\u043b\u043a\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u00a0\u2014 \u043e\u043d\u0430 \u0440\u0438\u0441\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434. \u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043f\u0443\u043b, \u0430\u00a0\u0442\u0440\u0435\u0442\u0438\u0439\u00a0\u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0441\u043c\u0435\u0441\u044c\u00a0\u2014 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u043d\u0430\u043b \u0438 \u0442\u043e\u0436\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u043f\u0443\u043b.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5a7\/542\/d40\/5a7542d403b40f3245e4b226eb20b78c.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5a7\/542\/d40\/5a7542d403b40f3245e4b226eb20b78c.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5a7\/542\/d40\/5a7542d403b40f3245e4b226eb20b78c.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u00a0\u0431\u0443\u043b\u043a\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430. \u041f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>\u041e\u0431\u0449\u0435\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 \u0441\u00a0\u0431\u0443\u043b\u043a\u0430\u043c\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e: \u0435\u0441\u0442\u044c \u043e\u0441\u043e\u0431\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0434\u0440\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0443\u00a0\u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0432\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 (\u0435\u0441\u043b\u0438 \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0443\u00a0\u043d\u0435\u0433\u043e \u0438\u043c\u0435\u044e\u0442\u0441\u044f).<\/p>\n<ul>\n<li>\n<p><strong>void Process(Frame frame)<\/strong> \u0440\u0438\u0441\u0443\u0435\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0441\u0442\u0438\u00a0\u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u044d\u0444\u0444\u0435\u043a\u0442\u0430<\/p>\n<\/li>\n<li>\n<p><strong>void OnPropertyChange(string name)<\/strong>\u00a0\u2014 \u043d\u0430\u00a0\u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/li>\n<li>\n<p><strong>void OnPropertiesChange(Vist16&lt;string&gt; names)<\/strong>\u00a0\u2014 \u043d\u0430\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 <\/p>\n<\/li>\n<li>\n<p><strong>void Background()<\/strong> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0441\u00a0\u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/li>\n<li>\n<p><strong>void FastBackground() <\/strong>\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443, \u043d\u043e\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438<\/p>\n<\/li>\n<li>\n<p><strong>void Shutdown()<\/strong> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u041f\u041e<\/p>\n<\/li>\n<li>\n<p><strong>void Startup()<\/strong> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e 1\u00a0\u0440\u0430\u0437 \u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u041f\u041e<\/p>\n<\/li>\n<li>\n<p><strong>void BackgroundStart() <\/strong>\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u00a0\u043a\u0430\u043d\u0430\u043b \u0431\u0443\u043b\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p><strong>void BackgroundStop()<\/strong> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u0430\u043d\u0430\u043b<\/p>\n<\/li>\n<li>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441 <strong>FastBackgroundStart() <\/strong>\u0438 <strong>FastBackgroundStop()<\/strong><\/p>\n<\/li>\n<\/ul>\n<p><strong>Background <\/strong>\u0438 <strong>FastBackground <\/strong>\u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0441\u0442\u0438 \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432\u00a0\u0431\u0443\u043b\u043a\u0435 \u0440\u043e\u0436\u0430\u0442\u044c, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0438 \u0436\u0434\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u0438. \u0410\u043d\u0430\u043b\u0438\u0437 \u044d\u043a\u0440\u0430\u043d\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0430\u043a\u00a0\u0440\u0430\u0437 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u00a0\u2014 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u0430\u0434\u0440\u043e\u0432, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0438 \u0441\u00a0\u044d\u043a\u0440\u0430\u043d\u043e\u043c \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9d2\/e85\/668\/9d2e85668a27acee0ccd382b3ddc698c.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/9d2\/e85\/668\/9d2e85668a27acee0ccd382b3ddc698c.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9d2\/e85\/668\/9d2e85668a27acee0ccd382b3ddc698c.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u00a0\u0446\u0435\u043b\u044f\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438\u2011\u0442\u0430\u0439\u043c\u0435\u0440\u044b \u0434\u043b\u044f\u00a0\u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0430\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0442\u0440\u0435\u0431\u0443\u0445\u0430 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f\u00a0\u2014 \u0430\u00a0\u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0438\u0437\u00a0\u043f\u0443\u043b\u0430. \u0412\u00a0\u0431\u0443\u043b\u043a\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 <strong>Background<\/strong>? \u0411\u0435\u0440\u0451\u043c \u043f\u043e\u0442\u043e\u043a\u2011\u0442\u0430\u0439\u043c\u0435\u0440 \u0438\u0437\u00a0\u043f\u0443\u043b\u0430, \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043c \u0431\u0443\u043b\u043a\u0435 \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c. \u0423\u0434\u0430\u043b\u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 <strong>Background<\/strong>? \u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u2011\u0442\u0430\u0439\u043c\u0435\u0440 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0432\u00a0\u043f\u0443\u043b.<\/p>\n<p>\u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439,\u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438, \u0430\u00a0\u043d\u0435 <strong>GUI\u2011\u0442\u0430\u0439\u043c\u0435\u0440\u044b<\/strong>. \u041f\u043e\u0442\u043e\u043a\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434 <strong>Background<\/strong>, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u00a0\u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u043a\u0430\u0434\u0440\u043e\u0432, \u043d\u043e\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441\u00a0\u043d\u0438\u043c. \u041f\u043e\u0442\u043e\u043a, \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <strong>FastBackground<\/strong>, \u043d\u0438 \u0441\u00a0\u0447\u0435\u043c \u043d\u0435\u00a0\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f\u00a0\u2014 \u0437\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u0441\u0430\u043c \u0431\u0443\u043b\u043a\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u00a0\u043c\u0435\u0442\u043e\u0434\u0435 <strong>FastBackground <\/strong>\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u044d\u043a\u0440\u0430\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430. <strong>FastBackground <\/strong>\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u044d\u043a\u0440\u0430\u043d \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0430\u00a0\u043c\u0435\u0442\u043e\u0434 <strong>Process <\/strong>\u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0433\u043e \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438 \u0440\u0438\u0441\u0443\u0435\u0442 \u043d\u0430\u00a0\u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u043c \u043a\u0430\u0434\u0440\u0435.<\/p>\n<p>\u0410\u00a0\u0432\u043e\u0442 \u044d\u0442\u0438 \u0448\u0442\u0443\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 <strong>\u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u0443\u043b\u043e\u0447\u043a\u0430 \u043c\u043e\u0433\u043b\u0430 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c<\/strong>:<\/p>\n<ul>\n<li>\n<p><strong>void GuiInitialize(Grid parent)<\/strong>\u00a0\u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f 1\u00a0\u0440\u0430\u0437 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0431\u0443\u043b\u043a\u0438<\/p>\n<\/li>\n<li>\n<p><strong>void GuiTimer(Grid parent)<\/strong>\u00a0\u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f ~60\u00a0\u0440\u0430\u0437 \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0435\u0441\u043b\u0438 \u0441\u043e\u0444\u0442 \u043d\u0435\u00a0\u0441\u0432\u0451\u0440\u043d\u0443\u0442 \u0438 \u043d\u0435\u00a0\u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0438\u0433\u0440\u0430<\/p>\n<\/li>\n<li>\n<p><strong>void GuiDispose(Grid parent)<\/strong>\u00a0\u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f 1\u00a0\u0440\u0430\u0437 \u0432\u00a0\u043f\u0440\u0438\u00a0\u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u0431\u0443\u043b\u043a\u0438<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0435\u0440\u0435\u0437 \u044d\u0442\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043b\u0435\u043d\u0442 \u0432\u00a0GUI. \u0415\u0441\u043b\u0438 \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043e\u0444\u0442 \u0438\u043b\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u043e\u0435 \u0447\u0442\u043e\u2011\u043d\u0438\u0431\u0443\u0434\u044c, <strong>GuiTimer <\/strong>\u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f\u00a0\u2014 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f.<\/p>\n<p>\u041f\u0440\u0438\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u0435\u0439 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0443\u00a0\u0431\u0443\u043b\u043e\u0447\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <strong>OnPropertyChange<\/strong> \u0438\u043b\u0438 <strong>OnPropertiesChange<\/strong>. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u00a0\u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043e\u043d\u044b\u0445. \u0415\u0441\u043b\u0438 \u0443\u00a0\u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0438\u043f\u0430 string \u0438\u043b\u0438\u00a0MemberInfo\u00a0\u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442, \u0447\u0442\u043e\u00a0\u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442\u00a0\u2014 \u0442\u0430\u043a \u0432\u044b\u0437\u043e\u0432\u0435\u0442. \u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0435\u00a0\u043d\u0430\u0434\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 <strong>NotifyPropertyChange()<\/strong>\u00a0\u2014 \u0441\u0430\u043c\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u0412\u043e\u00a0\u0432\u0441\u0435\u0445 \u0431\u0443\u043b\u043a\u0430\u0445 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0447\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"cs\">bool GUI \/\/\u0412\u0438\u0434\u0438\u0442\u00a0\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (\u0441\u0442\u043e\u0438\u0442\u00a0\u043b\u0438 \u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c?) bool Game \/\/\u0417\u0430\u043f\u0443\u0449\u0435\u043d\u0430\u00a0\u043b\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u0433\u0440\u0430 \u0438\u043b\u0438\u00a0\u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Installation \/\/\u0418\u043d\u0444\u0430 \u043e\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 LogWindow \/\/\u0414\u043e\u0441\u0442\u0443\u043f \u043a\u00a0\u043e\u043a\u043d\u0443 \u043b\u043e\u0433\u043e\u0432 Mixer \/\/\u041c\u0438\u043a\u0448\u0435\u0440\u00a0\u2014 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a\u0430\u043d\u0430\u043b\u044b \u0438\u0437\u00a0\u0431\u0443\u043b\u043a\u0438 Core \/\/\u042f\u0434\u0440\u043e LEDCatalog \/\/\u041c\u0438\u043d\u0438\u2011\u0411\u0414 \u0432\u0441\u0435\u0445 \u0434\u0438\u043e\u0434\u043e\u0432 \u0441\u043e \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u043e\u0439 \u043f\u043e\u00a0\u043b\u0435\u043d\u0442\u0430\u043c, \u0411\u041f \u0438\u00a0\u0442.\u00a0\u0434.<\/code><\/pre>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u043f\u0430\u0440\u0430 \u0431\u0443\u043b\u043e\u043a\u00a0\u2014 \u00ab<strong>\u0421\u043a\u0430\u043d \u044d\u043a\u0440\u0430\u043d\u0430<\/strong>\u00bb \u0438 \u00ab<strong>\u0412\u044b\u0432\u043e\u0434<\/strong>\u00bb. \u0421\u043a\u0430\u043d \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u00a0\u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c <strong>C++\/DirectX<\/strong> \u043a\u043b\u0430\u0441\u0441\u043e\u043c, \u0430\u00a0\u0432\u043e\u0442 \u00ab<strong>\u0412\u044b\u0432\u043e\u0434<\/strong>\u00bb\u00a0\u2014 \u0431\u0443\u043b\u043a\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u043d\u0430\u044f:<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0430\u0434\u043e float3\u00a0\u0432\u00a0\u0441\u044a\u0435\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 <strong>byte3\u00a0<\/strong>\u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u044d\u0442\u0438\u043c\u0438 SDR \u2192 HDR, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 \u0432\u044b\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0442<\/p>\n<\/li>\n<li>\n<p>\u0421\u0432\u0435\u0440\u043a\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u043c \u0432\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 <strong>C++<\/strong>\u043d\u043e\u0439 \u0448\u0435\u0439\u0434\u0435\u0440\u043d\u0451\u0439<\/p>\n<\/li>\n<li>\n<p>\u0421\u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e\u00a0\u0442\u043e\u043a\u0443, \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u0438 \u043f\u0440\u043e\u0447\u0435\u043c\u0443 \u0434\u043b\u044f\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a65\/3c5\/bce\/a653c5bce35edcf9ad57b005d6b7b6a4.webp\" width=\"3073\" height=\"1785\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a65\/3c5\/bce\/a653c5bce35edcf9ad57b005d6b7b6a4.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a65\/3c5\/bce\/a653c5bce35edcf9ad57b005d6b7b6a4.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0438 \u0441\u0442\u0430\u0442\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u0438\u0434\u0451\u0442 \u043d\u0430\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0430\u00a0\u043d\u0435\u00a0\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 <strong>float3<\/strong>. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u00a0\u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u0432\u0438\u0434\u043d\u043e \u0438 \u0440\u0430\u0441\u0442\u0435\u043a\u0430\u043d\u0438\u0435 \u044f\u0440\u043a\u0438\u0445 <strong>&gt;100%<\/strong> \u0434\u0438\u043e\u0434\u043e\u0432, \u0438 \u0434\u0438\u0437\u0435\u0440\u0438\u043d\u0433 \u0441\u043b\u0430\u0431\u044b\u0445, \u0430\u00a0\u043f\u043e\u0434\u0441\u0447\u0451\u0442 \u0442\u043e\u043a\u0430 \u0431\u043e\u043b\u0435\u0435\u2011\u043c\u0435\u043d\u0435\u0435 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u0435\u043d. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u0441\u044f \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u043d\u043e\u0432\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435\u00a0\u2014 \u043d\u0435\u00a0\u0432\u00a0\u043f\u043e\u0442\u043e\u043a\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u0434\u0440\u043e\u0432 \u0438 \u043d\u0435\u00a0\u0432\u00a0GUI, \u0447\u0442\u043e\u0431\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c.<\/p>\n<p><a class=\"anchor\" name=\"%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81\" id=\"\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/h2>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043d\u0430\u00a0<strong>WPF <\/strong>(<strong>MVVM<\/strong> \u0432\u0435\u0440\u043e\u043b\u043e\u043c\u043d\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d, \u043e\u0442\u00a0<strong>WPF <\/strong>\u0432\u0437\u044f\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0441\u0442\u044c \u0438 \u043c\u0430\u043a\u0435\u0442\u043d\u043e\u0441\u0442\u044c, \u0438 <strong>Blend <\/strong>\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u00a0\u0436\u0435).<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/092\/5ec\/20b\/0925ec20b785566dd662f45ad9946f99.png\" alt=\"\u0412 Blend \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 XAML \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, \u043a\u0440\u0438\u0432\u044b\u043c\u0438 \u0411\u0435\u0437\u044c\u0435 \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u043a\u0430\u0434\u0440\u0430\u043c. \u041d\u0435 CorelDraw\/AdobeFlash \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435\" title=\"\u0412 Blend \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 XAML \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, \u043a\u0440\u0438\u0432\u044b\u043c\u0438 \u0411\u0435\u0437\u044c\u0435 \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u043a\u0430\u0434\u0440\u0430\u043c. \u041d\u0435 CorelDraw\/AdobeFlash \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435\" width=\"1427\" height=\"669\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/092\/5ec\/20b\/0925ec20b785566dd662f45ad9946f99.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/092\/5ec\/20b\/0925ec20b785566dd662f45ad9946f99.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412 Blend \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 XAML \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, \u043a\u0440\u0438\u0432\u044b\u043c\u0438 \u0411\u0435\u0437\u044c\u0435 \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u043a\u0430\u0434\u0440\u0430\u043c. \u041d\u0435 CorelDraw\/AdobeFlash \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043a\u043d\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0444\u0442 \u0441\u0432\u0451\u0440\u043d\u0443\u0442 \u0438\u043b\u0438\u00a0\u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0438\u0433\u0440\u0430, \u0447\u0442\u043e\u0431\u044b\u00a0\u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043d\u0435\u00a0\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043a\u043e\u043c\u043f \u0438 \u043d\u0435\u00a0\u043c\u0435\u0448\u0430\u0442\u044c \u0438\u0433\u0440\u0435. \u041f\u0440\u043e\u0439\u0434\u0451\u043c\u0441\u044f \u043f\u043e\u00a0\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b76\/be8\/d4c\/b76be8d4c558baf4f9c2a301ed8a2b5a.png\" width=\"3840\" height=\"2112\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b76\/be8\/d4c\/b76be8d4c558baf4f9c2a301ed8a2b5a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b76\/be8\/d4c\/b76be8d4c558baf4f9c2a301ed8a2b5a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><a class=\"anchor\" name=\"%D0%97%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D0%BA\" id=\"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\"><\/a><\/p>\n<p>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\u00a0\u2014 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0439 PNG, \u0441\u0432\u0435\u0436\u0435\u0440\u0435\u043d\u0434\u0435\u0440\u0451\u043d\u043d\u044b\u0439 \u0432 3Ds Max\u0435. \u041e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043b \u044f \u0435\u0433\u043e \u0432\u00a0\u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 (\u043d\u0435 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439), \u043f\u0440\u0438\u0447\u0451\u043c, \u043a\u0430\u043c\u0435\u0440\u0443 \u0441\u043c\u0435\u0441\u0442\u0438\u043b \u0432\u043d\u0438\u0437, \u0447\u0442\u043e\u0431\u044b \u0442\u0435\u043a\u0441\u0442 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432\u00a0\u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u043a\u0443\u0440\u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b \u0441\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0432\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435. \u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043b \u043d\u0435\u00a0\u0442\u0430\u043a<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ef7\/032\/e8a\/ef7032e8a60481d3e99174dd0d3d7833.png\" width=\"1119\" height=\"94\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ef7\/032\/e8a\/ef7032e8a60481d3e99174dd0d3d7833.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ef7\/032\/e8a\/ef7032e8a60481d3e99174dd0d3d7833.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0430 \u0432\u043e\u0442 \u0442\u0430\u043a<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a61\/4f0\/28a\/a614f028a4165d4d784a7d825816c651.png\" width=\"1142\" height=\"627\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a61\/4f0\/28a\/a614f028a4165d4d784a7d825816c651.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a61\/4f0\/28a\/a614f028a4165d4d784a7d825816c651.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u00a0\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0433\u043b\u043e\u043c \u043e\u0431\u0437\u043e\u0440\u0430 \u044d\u0442\u0430 \u043c\u0435\u043b\u043a\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u0430, \u043d\u043e\u00a0\u0441\u00a0\u043d\u0435\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0443\u0442\u044c \u043b\u0443\u0447\u0448\u0435 \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0447\u043d\u0435\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0447\u0435\u043c\u0443\u00a0\u0431\u044b \u0435\u0451 \u043d\u0435\u00a0\u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6eb\/15a\/4b6\/6eb15a4b66f1e9307c502a19919deff3.png\" width=\"1440\" height=\"160\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6eb\/15a\/4b6\/6eb15a4b66f1e9307c502a19919deff3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6eb\/15a\/4b6\/6eb15a4b66f1e9307c502a19919deff3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041c\u044f\u0433\u043a\u0430\u044f \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0438\u043d\u0433\u043e\u0432\u0430\u044f \u0442\u0435\u043d\u044c \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430\u00a0\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0443\u044e \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u00a0\u043e\u0431\u044a\u0451\u043c\u043d\u044b\u043c\u0438 \u0431\u0443\u043a\u0432\u0430\u043c\u0438 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043d\u0430\u00a0\u043b\u044e\u0431\u043e\u043c \u0444\u043e\u043d\u0435. \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043d\u043e \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u0447\u0451\u0442\u043a\u0438\u043c \u043f\u0440\u0438\u00a0\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043e 200% \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cb3\/a3f\/ce5\/cb3a3fce56d23289f54139985ee9058b.png\" width=\"1140\" height=\"631\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/cb3\/a3f\/ce5\/cb3a3fce56d23289f54139985ee9058b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cb3\/a3f\/ce5\/cb3a3fce56d23289f54139985ee9058b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u0438\u044f\u043b, \u0443\u0436\u0435 \u0432\u00a0<strong>WPF <\/strong>\u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0430\u043d\u0435\u0441\u0451\u043d \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u0431\u0435\u043b\u044b\u0439 \u043a\u043e\u043d\u0442\u0443\u0440 (<strong>Path<\/strong>), \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0439 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u00a0\u2014 \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u0438\u0437\u00a0\u0442\u043e\u0433\u043e\u00a0\u0436\u0435 \u043a\u043e\u043d\u0442\u0443\u0440\u0430, \u0438\u0437\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0434\u0430\u0432\u043b\u0435\u043d\u044b 3D \u0431\u0443\u043a\u0432\u044b. \u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0434\u043b\u0438\u043d\u043d\u043e\u0432\u0430\u0442\u043e\u0439: <strong>3Ds Max<\/strong> \u2192 <strong>Adobe Illustrator <\/strong>\u2192 <strong>SVG <\/strong>\u2192 <strong>XAML.<\/strong><\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/292\/481\/496\/2924814962bb1d7bdb14635ab0af1055.webp\" width=\"780\" height=\"100\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/292\/481\/496\/2924814962bb1d7bdb14635ab0af1055.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/292\/481\/496\/2924814962bb1d7bdb14635ab0af1055.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u0438\u044f\u0442\u044c, \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0443\u0440 \u0438\u043c\u0435\u0435\u0442 \u043c\u0430\u0441\u043a\u0443 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438: \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u00a0\u0446\u0438\u043a\u043b\u0435 \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u0442 \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e. \u041a\u043e\u043d\u0442\u0443\u0440 \u0442\u043e\u043d\u043a\u0438\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u00a0\u2014 \u0435\u0433\u043e \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u0441\u0438\u044f\u043d\u0438\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0433\u043b\u044f\u0434\u0435\u0442\u044c\u0441\u044f, \u0430\u00a0\u0442\u0430\u043a \u043e\u043d\u043e \u043d\u0435\u00a0\u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0435\u0442.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u0438\u0434\u0451\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430. \u041f\u043e\u00a0\u0444\u0430\u043a\u0442\u0443 \u044d\u0442\u043e \u043f\u0443\u0441\u0442\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432. \u0412\u00a0\u043d\u0451\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0442. \u0415\u0433\u043e \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u0431\u0443\u043b\u043e\u0447\u043a\u0438 \u0442\u0435\u043c\u0438 \u0441\u0430\u043c\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 <strong>GuiInitialize, GuiTimer \u0438 GuiDispose. <\/strong>\u0421\u0440\u0435\u0434\u0430 \u0431\u0443\u043b\u043e\u0447\u0435\u043a \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0432\u00a0\u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0438 \u0431\u0435\u0440\u0435\u0442 \u043d\u0430\u00a0\u0441\u0435\u0431\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bb2\/fde\/dcb\/bb2fdedcbfe490d77201827a4ce84187.webp\" width=\"3449\" height=\"763\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/bb2\/fde\/dcb\/bb2fdedcbfe490d77201827a4ce84187.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bb2\/fde\/dcb\/bb2fdedcbfe490d77201827a4ce84187.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u00a0\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0431\u0443\u043b\u043e\u0447\u043a\u0430\u00a0\u2014 <strong>\u00ab\u0412\u044b\u0432\u043e\u0434\u00bb.<\/strong> \u041e\u043d\u0430 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043d\u0430\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043d\u043e\u00a0\u0438 \u043f\u0438\u0445\u0430\u0435\u0442 \u0432\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0435\u0435 \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u0438 \u0442\u0440\u043e\u0438\u0446\u0443 \u0431\u043b\u043e\u043a\u043e\u0432 \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u0438 \u043e\u043d\u0430\u00a0\u0436\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430\u00a0\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432.<\/p>\n<p><a class=\"anchor\" name=\"%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" id=\"\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<h3>\u0421\u0432\u0435\u0440\u043a\u0430\u0435\u043c \u0434\u0438\u043e\u0434\u0430\u043c\u0438<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u00a0\u0441\u0432\u0435\u0440\u043a\u0430\u043d\u0438\u0435. \u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c <em>\u0431\u044b\u0441\u0442\u0440\u043e <\/em>2315\u00a0\u0431\u043b\u0438\u043a\u043e\u0432\u00a0\u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u0430\u044f.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3bd\/9aa\/618\/3bd9aa6186df33559f52085e7460785f.webp\" width=\"780\" height=\"380\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/3bd\/9aa\/618\/3bd9aa6186df33559f52085e7460785f.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3bd\/9aa\/618\/3bd9aa6186df33559f52085e7460785f.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0440\u043e\u0434\u0438\u043b \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e\u0434\u00a0\u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435. \u041a\u0430\u043a\u00a0\u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u2011\u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443? \u041d\u0443, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0434\u0438\u043e\u0434\u044b \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438. \u041d\u0430\u0434\u043e \u0432\u0437\u044f\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0438\u043e\u0434\u0430 \u0438 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u044d\u0442\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0446\u0432\u0435\u0442\u0430. \u0418 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c.<\/p>\n<p>\u0427\u0442\u043e\u00a0\u0442\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c? \u0420\u0430\u0441\u0447\u0451\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043f\u0438\u0448\u0435\u043c<\/p>\n<pre><code class=\"cs\">SetPixel(x,y, color)<\/code><\/pre>\n<p>\u043a\u043e\u043c\u043f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043f\u043e\u00a0\u0444\u043e\u0440\u043c\u0443\u043b\u0435:<\/p>\n<pre><code class=\"cs\">\u0430\u0434\u0440\u0435\u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0445\u043e\u043b\u0441\u0442\u0430 + \u0448\u0438\u0440\u0438\u043d\u0430 \u0445\u043e\u043b\u0441\u0442\u0430 * y + x<\/code><\/pre>\n<p>\u0414\u0432\u0430 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435. \u041d\u0435\u00a0\u0433\u043e\u0432\u043e\u0440\u044f \u0443\u0436\u0435 \u043e\u00a0\u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0427\u0442\u043e\u00a0\u0434\u0435\u043b\u0430\u0435\u043c? \u0414\u0438\u043e\u0434\u044b \u0443\u00a0\u043d\u0430\u0441 \u0441\u0442\u043e\u044f\u0442 \u043d\u0430\u00a0\u043c\u0435\u0441\u0442\u0435 \u0438 \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f. \u0425\u043e\u043b\u0441\u0442 \u043b\u0435\u0436\u0438\u0442 \u0432\u00a0\u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438\u00a0\u2014 \u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441 \u0442\u043e\u0436\u0435 \u043d\u0435\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f. \u0417\u043d\u0430\u0447\u0438\u0442, \u043c\u043e\u0436\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u041f\u041e\u00a0\u0440\u0430\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0438\u043e\u0434\u0430\u043c, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u0438 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0422\u0430\u043a \u044f \u0438 \u0441\u0434\u0435\u043b\u0430\u043b. <\/p>\n<p>\u041f\u0438\u0448\u0443\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432\u00a0<strong>Booffer&lt;IntPtr&gt;<\/strong>. \u041f\u0440\u044f\u043c \u0431\u0443\u0444\u0435\u0440, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u0418 \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e<\/p>\n<pre><code class=\"1c\">\u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0431\u0440\u0430\u043b\u0438 \u0432\u0441\u0435 \u0434\u0438\u043e\u0434\u044b { \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0446\u0432\u0435\u0442 \u0434\u0438\u043e\u0434\u0430; \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u043f\u0438\u043a\u0441\u0435\u043b\u044f; \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0446\u0432\u0435\u0442 \u0432 \u0430\u0434\u0440\u0435\u0441; \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0434\u0438\u043e\u0434\u0443; \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443; }<\/code><\/pre>\n<p>\u041f\u0440\u0438\u0447\u0451\u043c \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0434\u0438\u043e\u0434\u0443 \u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043d\u0435\u00a0\u043e\u0434\u0438\u043d, \u0430\u00a0\u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u043f\u043e\u0436\u0438\u0440\u043d\u0435\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0436\u0438\u0432\u0443\u044e \u043a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\"> public bool Render(IBooffer1D&lt;RenderLedValueType&gt; values)  {      if (E.IsInvalid(values) || E.IsInvalid(this))          return false;       using var sc = DisposeProtectedScope;      if (sc.IsFailed())          return false;       using var sc1 = values.DisposeProtectedScope;      if (sc1.IsFailed())          return false;       DisposeProtectedScopeToken preprocessedValuesDisposeToken = default;      if (Preprocess(values, out var preprocessedValues))      {          if (preprocessedValues != values)              if (!E.IsInvalid(preprocessedValues))              {                  preprocessedValuesDisposeToken = preprocessedValues.DisposeProtectedScope;                  values = preprocessedValues;              }      }      using (preprocessedValuesDisposeToken)          unsafe          {              if (values.TryGetPointers(out var source_begin, out var source_end))              {                  var mapPack = addressMap.Value;                  var location = (double2)pepector.Create(Installation.Bounds).xy;                  var size = (double2)pepector.Create(Installation.Bounds).zw - location;                   canvasLocker.EnterWriteLock();                  try                  {                      for (int mapIndex = 0; mapIndex &lt; mapPack.MapCount; mapIndex++)                      {                          if (mapPack.TryGetMapPointers(mapIndex, out var begin, out var count, out var end, out var end4))                          {                              var end8 = begin + count \/ 8 * 8;                              var ptr = begin;                              var source_ptr = source_begin;                              while (ptr &lt; end8)                              {                                  **ptr++ = *source_ptr++;                                  **ptr++ = *source_ptr++;                                  **ptr++ = *source_ptr++;                                  **ptr++ = *source_ptr++;                                   **ptr++ = *source_ptr++;                                  **ptr++ = *source_ptr++;                                  **ptr++ = *source_ptr++;                                  **ptr++ = *source_ptr++;                              }                              while (ptr &lt; end)                                  **ptr++ = *source_ptr++;                          }                      }                  }                  finally                  {                      canvasLocker?.ExitWriteLock();                  }              }              {                  if (addressMap.Value.TryGetAllMapPointers(out var allBegin, out var count, out var end, out var end4))                  {                      AfterRender(_canvas.Value, allBegin, count, end, end4);                  }              }                     }      return true;  }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u0432\u0441\u0451 \u0434\u0435\u043b\u043e \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u0431\u044b\u0441\u0442\u0440\u043e, \u0430\u00a0\u043e\u0447\u0435\u043d\u044c\u00a0\u0431\u044b\u0441\u0442\u0440\u043e. \u041e\u0434\u043d\u0430\u043a\u043e, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u00a0\u0442\u043e \u0447\u0442\u043e\u0431\u044b \u043a\u0440\u0443\u0442\u043e:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/36c\/ce6\/08c\/36cce608c763e6065cf0b1b892e38e76.webp\" width=\"780\" height=\"300\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/36c\/ce6\/08c\/36cce608c763e6065cf0b1b892e38e76.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/36c\/ce6\/08c\/36cce608c763e6065cf0b1b892e38e76.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<div class=\"floating-image\">\n<figure class=\"float full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/883\/fbe\/fad\/883fbefadabe8c4da8d34156621de497.webp\" width=\"600\" height=\"600\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/883\/fbe\/fad\/883fbefadabe8c4da8d34156621de497.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/883\/fbe\/fad\/883fbefadabe8c4da8d34156621de497.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0410\u00a0\u043c\u044b \u0442\u0443\u0442 \u0441\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u0432\u0435\u0440\u043a\u0430\u0442\u044c\u00a0\u2014 \u0442\u0430\u043a \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u044d\u0442\u0438 \u0442\u043e\u0447\u043a\u0438 \u043d\u0430\u00a0\u0431\u043b\u0438\u043a\u0438 \u0441\u00a0\u043b\u0443\u0447\u0438\u043a\u0430\u043c\u0438. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0431\u043b\u0438\u043a\u0430. \u0414\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u0435\u0451 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u0440\u0430\u0441\u0438\u0442\u044c \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0446\u0432\u0435\u0442 \u0438 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043d\u0443\u0436\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u043d\u0430\u043c \u043d\u0430\u0434\u043e <strong>\u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c 2315\u00a0\u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a<\/strong>, \u043f\u0435\u0440\u0435\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u044f \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437\u00a0\u043d\u0438\u0445. \u042d\u0442\u043e \u0443\u0436\u0435 \u0432\u0430\u043c \u043d\u0435\u00a0\u0442\u043e\u0447\u0435\u0447\u043a\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c\u00a0\u2014 \u0434\u0435\u043b\u043e \u043f\u0430\u0445\u043d\u0435\u0442 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u00a0\u043f\u043e\u0440\u044f\u0434\u043a\u0443. <\/p>\n<\/div>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9a2\/dc6\/ebb\/9a2dc6ebb33bd91140db622ed137a26c.png\" width=\"530\" height=\"104\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/9a2\/dc6\/ebb\/9a2dc6ebb33bd91140db622ed137a26c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9a2\/dc6\/ebb\/9a2dc6ebb33bd91140db622ed137a26c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445, \u0431\u043b\u0438\u043a\u0438\u2011\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0435\u00a0\u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433 \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0430\u00a0\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a, \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0432\u0435\u0442 \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u0443\u00a0\u043d\u0430\u0441 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u00a0\u043e\u0431\u044b\u0447\u043d\u043e\u0435, \u0430\u00a0\u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0435, <strong>\u0430\u0434\u0434\u0438\u0442\u0438\u0432\u043d\u043e\u0435 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/strong>. \u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u00a0\u0441\u0447\u0451\u0442 \u043d\u0435\u0433\u043e \u0431\u043b\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0432\u00a0\u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0435 \u0441\u0438\u044f\u043d\u0438\u0435. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a4e\/72e\/c42\/a4e72ec42acd689adb01c6fafde4efaa.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a4e\/72e\/c42\/a4e72ec42acd689adb01c6fafde4efaa.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a4e\/72e\/c42\/a4e72ec42acd689adb01c6fafde4efaa.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u043e\u2011\u0432\u0442\u043e\u0440\u044b\u0445, \u043c\u044b \u0442\u0443\u0442 \u0432\u0441\u0451 \u0432\u00a0<strong>fp32\u00a0<\/strong>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c, \u043d\u043e\u00a0\u0434\u0438\u043e\u0434\u044b \u043d\u0430\u00a0\u043b\u0435\u043d\u0442\u0430\u0445 <strong>8-\u0431\u0438\u0442\u043d\u044b\u0435<\/strong>, \u0438 \u0443\u00a0\u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u043e\u0433 \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u044f. \u0418 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u044b\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0445\u00a0\u0436\u0435\u043b\u0435\u0437\u044f\u0447\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0414\u0438\u043e\u0434\u00a0\u043b\u0438\u0431\u043e \u043d\u0435\u00a0\u0441\u0432\u0435\u0442\u0438\u0442,\u00a0\u043b\u0438\u0431\u043e \u0441\u0432\u0435\u0442\u0438\u0442 \u0445\u043e\u0442\u044c \u0447\u0443\u0442\u044c\u2011\u0447\u0443\u0442\u044c, \u0438 \u0434\u0430\u043b\u0435\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e. \u0414\u043b\u044f\u00a0\u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0431\u0443\u0434\u0435\u043c, \u043f\u043e\u043c\u0438\u043c\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0431\u043b\u0438\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 \u0431\u0435\u0437\u00a0\u0431\u043b\u0438\u043a\u043e\u0432. \u0418 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0438\u043e\u0434\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u00a0\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443\u2011\u0431\u043b\u0438\u043a, \u0430\u00a0\u0441\u043c\u0435\u0441\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438\u2011\u0442\u043e\u0447\u043a\u0438 \u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438\u2011\u0431\u043b\u0438\u043a\u0430. \u0427\u0435\u043c \u044f\u0440\u0447\u0435 \u0434\u0438\u043e\u0434, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u044d\u0442\u043e \u0431\u043b\u0438\u043a \u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u043e\u0447\u043a\u0430, \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u0422\u0430\u043a \u0442\u0443\u0441\u043a\u043b\u044b\u0435 \u0434\u0438\u043e\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u0447\u043a\u0430\u043c\u0438, \u0430\u00a0\u044f\u0440\u043a\u0438\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043b\u0443\u0447\u0438\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/710\/4dc\/c38\/7104dcc38a0623ad0125b210695fa798.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/710\/4dc\/c38\/7104dcc38a0623ad0125b210695fa798.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/710\/4dc\/c38\/7104dcc38a0623ad0125b210695fa798.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0435\u00a0\u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e\u00a0\u0432\u0441\u0451 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u2011\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e, \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e \u0438 \u0441\u0438\u043d\u0435\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u043e\u0432. \u041c\u044b \u0442\u0443\u0442 \u0446\u0432\u0435\u0442\u043d\u044b\u0435, \u0430\u00a0\u043d\u0435\u00a0\u0447\u0451\u0440\u043d\u043e\u2011\u0431\u0435\u043b\u044b\u0435.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430\u00a0\u0431\u044b\u0442\u044c\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u0439. \u042f \u043d\u0435\u00a0\u0431\u0443\u0434\u0443 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u0447\u0430\u043d \u0441\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0432\u044b\u043c\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u043f\u0440\u043e\u0449\u0435.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u043d\u0435\u043a\u0438\u0439 \u0445\u043e\u043b\u0441\u0442\u2011\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443\u2011\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c M x N \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 (\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 1920\u00d7360). \u041d\u0430\u00a0\u043d\u0451\u043c \u0431\u0443\u0434\u0435\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c 2315\u00a0\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0440\u0430\u0437\u043d\u043e\u0446\u0432\u0435\u0442\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a\u2011\u0431\u043b\u0438\u043a\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0430\u0434\u0434\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/046\/103\/bd4\/046103bd47179453b12caed96e5d39d7.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/046\/103\/bd4\/046103bd47179453b12caed96e5d39d7.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/046\/103\/bd4\/046103bd47179453b12caed96e5d39d7.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0445\u043e\u043b\u0441\u0442 (\u0437\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u043c). \u0417\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u00a0\u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0445\u043e\u043b\u0441\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u00a0\u043d\u0430\u0441 <strong>2\u00a0\u043c\u043b\u043d \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439<\/strong> \u0438 <strong>20&#8217;000\u00a0\u044f\u0434\u0435\u0440<\/strong> \u0432\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0435. \u0412\u043e\u0442 \u043a\u0430\u0436\u0434\u043e\u0435 \u044f\u0434\u0440\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043d\u0430\u0448 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c <strong>100\u00a0<\/strong>\u0440\u0430\u0437 \u0434\u043b\u044f <strong>100\u00a0<\/strong>\u043a\u0430\u043a\u0438\u0445\u2011\u0442\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0430\u00a0\u044d\u0442\u043e\u043c \u0445\u043e\u043b\u0441\u0442\u0435. \u041a\u0430\u043a\u0438\u0445 \u0438\u043c\u0435\u043d\u043d\u043e \u0438 \u043a\u0430\u043a\u00a0\u2014 \u043d\u0435\u00a0\u0432\u0430\u0436\u043d\u043e. \u041d\u0430\u043c \u0432\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u0435\u0442 <strong>X<\/strong> \u0438 <strong>Y<\/strong> \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u00a0\u044d\u0442\u0438\u043c\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0438 \u0432\u044b\u0434\u0430\u0451\u043c \u0446\u0432\u0435\u0442. \u0412\u0441\u0451.<\/p>\n<p>\u0412\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u043f\u0438\u0448\u0435\u043c \u0446\u0438\u043a\u043b. \u041e\u043d \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u00a0\u0432\u0441\u0435\u043c 2315\u00a0\u0434\u0438\u043e\u0434\u0430\u043c, \u0438 \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0438 \u0446\u0432\u0435\u0442\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0438\u043e\u0434\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0432\u0438\u0434\u0435\u043d\u00a0\u043b\u0438 \u0431\u043b\u0438\u043a \u044d\u0442\u043e\u0433\u043e \u0434\u0438\u043e\u0434\u0430 \u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435 \u0445\u043e\u043b\u0441\u0442\u0430. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043e\u043d \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0445\u043e\u043b\u0441\u0442\u0430, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u0438\u043e\u0434\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441\u00a0\u0431\u043b\u0438\u043a\u043e\u043c. \u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u0430\u043b\u0438 \u0432\u00a0\u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0434\u0438\u043e\u0434 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u00a0\u2014 \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u043b\u0438\u043a \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0432\u0438\u0434\u0435\u043d.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5cf\/feb\/e00\/5cffebe00314d4ccf13efedf5e1b21c6.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5cf\/feb\/e00\/5cffebe00314d4ccf13efedf5e1b21c6.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5cf\/feb\/e00\/5cffebe00314d4ccf13efedf5e1b21c6.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0410\u00a0\u0440\u0430\u0437 \u0432\u0438\u0434\u0435\u043d\u00a0\u2014 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0431\u043b\u0438\u043a\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u00a0\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0445\u043e\u043b\u0441\u0442\u0430. \u0411\u0435\u0440\u0451\u043c \u044d\u0442\u043e\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0431\u043b\u0438\u043a\u0430. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441\u00a0\u0431\u043b\u0438\u043a\u043e\u043c \u0447\u0451\u0440\u043d\u043e\u2011\u0431\u0435\u043b\u044b\u0439, \u0430\u00a0\u0443\u00a0\u043d\u0430\u0441 \u0442\u0443\u0442 \u0446\u0432\u0435\u0442\u043d\u043e\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434, \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u044d\u0442\u043e\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u043a\u0440\u0430\u0441\u0438\u0442\u044c \u0432\u00a0\u0446\u0432\u0435\u0442 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u0435\u0433\u043e \u043d\u0430\u00a0\u0446\u0432\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044e \u0445\u043e\u043b\u0441\u0442\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0443\u00a0\u043d\u0430\u0441 \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435 \u0445\u043e\u043b\u0441\u0442\u0430 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0446\u0432\u0435\u0442\u0430 \u0431\u043b\u0438\u043a\u043e\u0432 \u043e\u0442\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u0438\u043e\u0434\u043e\u0432.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d50\/e2b\/d9c\/d50e2bd9cf788371b1ce7a843cce03e9.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d50\/e2b\/d9c\/d50e2bd9cf788371b1ce7a843cce03e9.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d50\/e2b\/d9c\/d50e2bd9cf788371b1ce7a843cce03e9.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0417\u0432\u0443\u0447\u0438\u0442 \u043d\u043e\u0440\u043c, \u043d\u043e\u00a0\u0446\u0438\u043a\u043b \u043d\u0430 <strong>2315\u00a0<\/strong>\u0434\u0438\u043e\u0434\u043e\u0432 \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u00a0\u2014 \u044d\u0442\u043e \u043d\u0435\u043a\u0438\u0441\u043b\u0430\u044f \u0442\u0430\u043a\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u043b\u044f\u00a0\u043b\u044e\u0431\u043e\u0439 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b. \u041e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u00a0<strong>\u0441\u043e\u0442\u0435\u043d \u0442\u044b\u0441\u044f\u0447 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439.<\/strong> \u0412\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u00a0\u043a\u0440\u0443\u0442\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041f\u043e\u2011\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u0442\u0443\u0442 \u043d\u0430\u0434\u043e \u0432\u043e\u0440\u043e\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0438\u0437\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0448\u0442\u0443\u043a\u0438, \u043d\u043e\u00a0\u043c\u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u043b\u0435\u043d\u044c\u00a0\u2014 \u044f \u0432\u044b\u043a\u0440\u0443\u0442\u0438\u043b\u0441\u044f \u043d\u0430\u00a0\u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u0435.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435\u00a0\u2014 \u0432\u0441\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u0438\u043e\u0434\u043e\u0432 \u043d\u0430\u00a0\u0445\u043e\u043b\u0441\u0442\u0435 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u00a0\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <strong>1D\u2011\u0431\u0443\u0444\u0435\u0440<\/strong>. \u0428\u0435\u0439\u0434\u0435\u0440 \u043d\u0435\u00a0\u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0433\u0434\u0435 \u043a\u0430\u043a\u043e\u0439 \u0434\u0438\u043e\u0434\u00a0\u2014 \u043e\u043d \u0442\u0443\u043f\u043e \u0431\u0435\u0440\u0451\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430.<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435\u00a0\u2014 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0445\u043e\u043b\u0441\u0442\u0430 \u043f\u0440\u0438\u00a0\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u0430\u0434\u0435\u0432\u0430\u044e\u0442 \u0431\u043b\u0438\u043a\u0438 \u043e\u0442\u00a0\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043f\u0430\u0440\u044b \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0434\u0438\u043e\u0434\u043e\u0432. \u0422\u043e \u0435\u0441\u0442\u044c, \u0434\u043e\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0445\u043e\u043b\u0441\u0442\u0430 \u0434\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u043b\u0443\u0447\u0438\u043a\u0430\u043c\u0438 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435\u00a0\u0432\u0441\u0435 \u0434\u0438\u043e\u0434\u044b. \u0417\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0441\u0435 <strong>2315<\/strong>?<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043e\u043f\u044f\u0442\u044c\u00a0\u0436\u0435, \u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u043e\u0444\u0442\u0430, \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0445\u043e\u043b\u0441\u0442\u0430 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u0434\u0438\u043e\u0434\u044b \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043a\u0430\u043a\u2011\u0442\u043e \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u0441\u0432\u043e\u0438\u043c \u0431\u043b\u0438\u043a\u043e\u043c \u043d\u0430\u00a0\u0446\u0432\u0435\u0442 \u044d\u0442\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f. \u041f\u0440\u0438\u0447\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043d\u043e\u00a0\u0438 \u043d\u0430\u00a0\u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0431\u043b\u0438\u043a\u0430 \u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435\u00a0\u2014 \u0435\u0441\u043b\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442, \u043d\u043e\u00a0\u0431\u043b\u0438\u043a \u0432\u00a0\u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0447\u0451\u0440\u043d\u044b\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e \u0435\u0433\u043e \u043a\u0440\u0430\u0435\u0448\u0435\u043a \u0438\u043b\u0438\u00a0\u0443\u0433\u043e\u043b \u0433\u0434\u0435 \u0432\u0441\u0451 \u0442\u0443\u0441\u043a\u043b\u043e\u0435), \u0442\u043e \u0434\u0438\u043e\u0434 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/08c\/57f\/b4f\/08c57fb4f4e8fccff57fe1c6b4ad4749.webp\" width=\"780\" height=\"164\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/08c\/57f\/b4f\/08c57fb4f4e8fccff57fe1c6b4ad4749.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/08c\/57f\/b4f\/08c57fb4f4e8fccff57fe1c6b4ad4749.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0430\u043a\u00a0\u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u0435\u043f\u0435\u0440\u044c \u0448\u0435\u0439\u0434\u0435\u0440\u0443? \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u00a0\u2014 <strong>\u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430<\/strong> \u0432\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0435. \u041a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e 2D \u0445\u043e\u043b\u0441\u0442\u0430 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0432\u043e\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0430\u00a0\u044d\u0442\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435, \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u0432\u043e\u043a\u0441\u0435\u043b\u0435 \u0445\u0440\u0430\u043d\u0438\u043c \u043d\u043e\u043c\u0435\u0440 \u0434\u0438\u043e\u0434\u0430 \u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0431\u043b\u0438\u043a\u0430. \u0412\u0440\u043e\u0434\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0442, \u0442\u0430\u043a \u0438\u043b\u0438\u00a0\u0438\u043d\u0430\u0447\u0435, <strong>\u0440\u0430\u0441\u0445\u043e\u0434 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 <\/strong>\u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u043c.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c. \u0412\u0435\u0434\u044c \u0434\u0438\u043e\u0434\u044b, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0435 \u043d\u0430\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c\u00a0\u2014 \u0438\u0445 \u043d\u043e\u043c\u0435\u0440\u0430 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0447\u0442\u0438 <strong>\u043f\u043e\u0434\u0440\u044f\u0434 <\/strong>\u0438\u0434\u0443\u0442, \u0438 \u0441\u0442\u043e\u044f\u0442 \u0440\u044f\u0434\u043e\u043c. \u0422\u0438\u043f\u0430 <em>\u00ab\u0441 167\u00a0\u043f\u043e 189\u00bb<\/em> \u0438 \u0432\u0441\u0451 \u0432\u00a0\u0442\u0430\u043a\u043e\u043c \u0434\u0443\u0445\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440\u0443 \u043d\u0435\u00a0\u043d\u0430\u0431\u043e\u0440 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u0430\u00a0\u0432\u0441\u0435\u0433\u043e\u00a0\u043b\u0438\u0448\u044c <strong>\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u00a0<\/strong>\u2014 \u0441\u00a0\u0442\u0430\u043a\u043e\u0433\u043e\u2011\u0442\u043e \u043f\u043e\u00a0\u0442\u0430\u043a\u043e\u0439\u2011\u0442\u043e. \u0414\u0430, \u0432\u00a0\u044d\u0442\u0438\u0445 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u0445 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0438, \u043d\u043e\u00a0\u044d\u0442\u043e \u043d\u0435\u00a0\u0431\u0435\u0434\u0430\u00a0\u2014 \u043d\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043c\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e\u00a0\u043b\u0438\u0448\u043d\u0438\u0445 \u0434\u0438\u043e\u0434\u043e\u0432, \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u0448\u044c. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u044b \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043c \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0440\u0430\u0437 \u0432\u00a0\u0441\u0442\u043e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d6e\/08b\/258\/d6e08b2584b77aa56bd678fa5dbb41a3.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d6e\/08b\/258\/d6e08b2584b77aa56bd678fa5dbb41a3.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d6e\/08b\/258\/d6e08b2584b77aa56bd678fa5dbb41a3.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0438\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0440\u0430\u0442\u044c \u0438 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0434\u0438\u043e\u0434\u0430 \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043c\u0438\u043d\u0438\u2011\u043d\u0430\u0431\u043e\u0440\u0435.<\/p>\n<p>\u041e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u041f\u041e\u00a0\u0441\u043e\u0437\u0434\u0430\u0451\u043c <strong>2D \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/strong> \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0441\u00a0\u0445\u043e\u043b\u0441\u0442, \u0438 \u0432\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043f\u0438\u0448\u0435\u043c \u0446\u0432\u0435\u0442, \u0443\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0440\u0430\u0432\u0435\u043d \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443, \u0430\u00a0\u0437\u0435\u043b\u0451\u043d\u044b\u0439\u00a0\u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443.<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0438 \u0445\u043e\u043b\u0441\u0442 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b, \u0438 \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0434\u0438\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0434\u043b\u044f\u00a0\u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0446\u0432\u0435\u0442\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0445\u043e\u043b\u0441\u0442\u0430.<\/p>\n<p>\u041e\u0442\u043d\u044b\u043d\u0435 \u0448\u0435\u0439\u0434\u0435\u0440 \u043d\u0435\u00a0\u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0435 <strong>2315\u00a0<\/strong>\u0434\u0438\u043e\u0434\u043e\u0432, \u043e\u043d \u0431\u0435\u0440\u0435\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0446\u0432\u0435\u0442 \u0438\u0437\u00a0\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442 R \u044d\u0442\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430 \u043a\u0430\u043a\u00a0\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0430\u00a0<strong>G<\/strong>\u00a0\u2014 \u043a\u0430\u043a\u00a0\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439, \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0438\u043e\u0434\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u00a0<strong>R<\/strong> \u043f\u043e\u00a0<strong>G<\/strong>, \u0430\u00a0\u043d\u0435\u00a0\u0432\u0441\u0435.<\/p>\n<p>\u041d\u043e\u00a0\u044f\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u0443\u00a0\u043c\u0435\u043d\u044f \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0435\u0449\u0451 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b <strong>B<\/strong> \u0438 <strong>A<\/strong>, \u0432\u0435\u0434\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043a\u0430\u2011\u0442\u043e <strong>RGBA<\/strong>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435\u00a0\u043e\u0434\u0438\u043d \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432\u00a0<strong>RG<\/strong>, \u0430\u00a0\u0434\u0432\u0430: <strong>R..G<\/strong> \u0438 <strong>B..A<\/strong><\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/95a\/734\/f16\/95a734f160fc256155670493e03f4c39.webp\" width=\"1132\" height=\"716\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/95a\/734\/f16\/95a734f160fc256155670493e03f4c39.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/95a\/734\/f16\/95a734f160fc256155670493e03f4c39.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u042f \u0441\u0442\u0430\u043b \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0430\u00a0\u0440\u0430\u0437\u0431\u0438\u043b \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0434\u0438\u043e\u0434\u044b \u0432\u00a0\u043c\u0438\u043d\u0438\u2011\u043d\u0430\u0431\u043e\u0440\u0435 \u043d\u0430\u00a0<strong>\u0434\u0432\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430<\/strong> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u044d\u0442\u0438\u0445 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432\u00a0\u0431\u044b\u043b\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439. \u0418 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b \u043d\u0435\u00a0\u043e\u0434\u0438\u043d, \u0430\u00a0\u0434\u0432\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430, \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u044f \u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a.<\/p>\n<p>\u0422\u0430\u043a \u0432\u00a0\u043c\u043e\u0435\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435 \u0441\u0442\u0430\u043b\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e <strong>\u00ab\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0439 \u0434\u0438\u043e\u0434\u044b \u0441\u00a0R \u043f\u043e\u00a0G\u00bb<\/strong> \u0430 <strong>\u00ab\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0439 \u0434\u0438\u043e\u0434\u044b \u0441\u00a0R \u043f\u043e\u00a0G \u0438 \u0441\u00a0B \u043f\u043e\u00a0A\u00bb<\/strong>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u043b\u0438\u043a\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"..\/AmbiknightScreenScanner\/UltrasharedTypes.cs\" \/\/\u041e\u0431\u0449\u0438\u0435 \u0435\u043d\u0443\u043c\u044b \u0434\u043b\u044f C#, HLSL \u0438 C++  cbuffer Constants : register(b0) {     LedVisualizerConstants settings; };  StructuredBuffer&lt;int2&gt; LedPositions : register(t0); \/\/ \u041f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 StructuredBuffer&lt;uint4&gt; LedColors : register(t1); \/\/ \u0426\u0432\u0435\u0442\u0430 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 Texture2D&lt;float&gt; GlareTexture : register(t2); \/\/ \u0422\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0431\u043b\u0438\u043a\u0430 Texture2D&lt;float4&gt; LEDTexture : register(t3); \/\/ \u0422\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0431\u043b\u0438\u043a\u0430 Texture2D&lt;uint4&gt; IndexesTexture : register(t4); \/\/ \u0422\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 (x:from1, y:to1, z:from2, w:to2) RWTexture2D&lt;float4&gt; OutputCanvas : register(u0); \/\/ \u0425\u043e\u043b\u0441\u0442 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430  float4 readSprite(int2 cords, uint3 ledColor) {     int3 cords3 = int3(cords, 0);     float3 glareValue = pow(GlareTexture.Load(cords3), settings.GlarePower);     float3 ledValue = LEDTexture.Load(cords3);          float3 lerpLevel = ledColor * (1.0f \/ 255.0f);     lerpLevel = pow(lerpLevel, settings.LerpPower);          float3 color = lerp(ledValue, glareValue, lerpLevel);          float4 result;     result.rgb = color * (float3) ledColor;     result.a = max(result.r, max(result.g, result.b));          return result; }  float4 calcSum(int2 pixelCords, uint fromIndexIncl, uint toIndexExcl, int2 minCords, int2 maxCords) {     float4 sumColor = 0;          fromIndexIncl = clamp(fromIndexIncl, 0, settings.LedCount);     toIndexExcl = clamp(toIndexExcl, 0, settings.LedCount);          for (uint ledIndex = fromIndexIncl; ledIndex &lt; toIndexExcl; ledIndex++)     {         uint3 ledColor = LedColors[ledIndex].rgb; \/\/\u0411\u0435\u0440\u0451\u043c \u0446\u0432\u0435\u0442 \u0434\u0438\u043e\u0434\u0430         if (!any(ledColor))  \/\/\u0415\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0433\u043e\u0440\u0438\u0442 - \u0438\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435             continue;                  int2 ledCords = LedPositions[ledIndex]; \/\/\u0411\u0435\u0440\u0451\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u0438\u043e\u0434\u0430         if (ledCords.x &lt; minCords.x || ledCords.y &lt; minCords.y || ledCords.x &gt; maxCords.x || ledCords.y &gt; maxCords.y)             continue; \/\/\u0415\u0441\u043b\u0438 \u043e\u043d \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u0430\u043b\u0435\u043a\u043e - \u0438\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435                  \/\/\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435 \u0431\u043b\u0438\u043a\u0430         int2 glareCords = pixelCords + settings.SpriteSizeDiv2 - ledCords;                  \/\/\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0446\u0432\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b         float4 glareColor = readSprite(glareCords, ledColor);                  \/\/\u0421\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u043c \u0446\u0432\u0435\u0442         sumColor += glareColor;     }     return sumColor;           } void draw(int2 pixelCords) {      \/\/\u0417\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0445\u043e\u043b\u0441\u0442\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c     if (pixelCords.x &gt;= settings.CanvasSize.x || pixelCords.y &gt;= settings.CanvasSize.y)         return;       \/\/\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u0434\u0438\u043e\u0434\u044b     int2 minCords = pixelCords - settings.SpriteSizeDiv2;     int2 maxCords = pixelCords + settings.SpriteSizeDiv2;     uint4 indexes = IndexesTexture.Load(int3(pixelCords, 0));          float4 sumColor = 0;          if (indexes.y &gt; indexes.x)         sumColor += calcSum(pixelCords, indexes.x, indexes.y, minCords, maxCords);          if (indexes.w &gt; indexes.z)         sumColor += calcSum(pixelCords, indexes.z, indexes.w, minCords, maxCords);          if (sumColor.a &lt;= 0.0f)         OutputCanvas[pixelCords] = 0.0f;     else     {         sumColor *= (1.0f \/ 255.0f); \/\/\u0412\u0433\u043e\u043d\u044f\u0435\u043c \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043e\u0442 0 \u0434\u043e 1         sumColor.a = clamp(sumColor.a, 0, 1);         sumColor.rgb \/= sumColor.a;         OutputCanvas[pixelCords] = clamp(sumColor.bgra, 0, 1);     } }  [numthreads(LEDVISUALIZER_THREADS_X, LEDVISUALIZER_THREADS_Y, LEDVISUALIZER_THREADS_Z)] void main(uint3 DTid : SV_DispatchThreadID) {     int2 pixelCords = DTid.xy * int2(LEDVISUALIZER_THREAD_X_MULTIPLER, LEDVISUALIZER_THREAD_Y_MULTIPLER);          [unroll(LEDVISUALIZER_THREAD_X_MULTIPLER)]     for (int dx = 0; dx &lt; LEDVISUALIZER_THREAD_X_MULTIPLER; dx++)     {         [unroll(LEDVISUALIZER_THREAD_Y_MULTIPLER)]         for (int dy = 0; dy &lt; LEDVISUALIZER_THREAD_Y_MULTIPLER; dy++)         {             draw(pixelCords + int2(dx, dy));         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u042d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u00a0\u0434\u0432\u0443\u0445\u043a\u043e\u043d\u0442\u0443\u0440\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0435\u0439 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438\u00a0\u2014 \u0443\u00a0\u043c\u0435\u043d\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f. \u041d\u043e\u00a0\u0432\u00a0\u0446\u0435\u043b\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439 \u043b\u044e\u0431\u043e\u0439 \u0444\u043e\u0440\u043c\u044b, \u043e\u043d \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u043c. \u0412\u00a0\u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u00a0\u2014 \u043e\u043d\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435.<\/p>\n<p><a class=\"anchor\" name=\"%D0%93%D1%80%D0%B0%D1%84%D0%B8%D0%BA\" id=\"\u0413\u0440\u0430\u0444\u0438\u043a\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<h3>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0442\u043e\u043a\u0430<\/h3>\n<p>\u0413\u0440\u0430\u0444\u0438\u043a \u0442\u043e\u043a\u0430, \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e, \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0442\u0435\u0441\u0442\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <strong>ClassicBitmap32\u00a0<\/strong>\u2014 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0433\u043e <strong>Booffer2D&lt;byte4&gt;<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f \u0441\u043d\u0430\u0431\u0434\u0438\u043b \u043f\u043b\u044e\u0448\u043a\u0430\u043c\u0438 \u0434\u043b\u044f\u00a0\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 <strong>System.Drawing<\/strong>. \u0422\u043e \u0435\u0441\u0442\u044c \u043e\u043d \u043a\u0430\u043a\u2011\u0431\u044b \u0431\u0443\u0444\u0435\u0440 \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0432\u0441\u0451 \u0442\u0430\u043a\u043e\u0435, \u043d\u043e\u00a0\u0441\u00a0\u043d\u0438\u043c \u0435\u0449\u0451 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a\u00a0\u0441\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u043c <strong>Bitmap\/Graphics<\/strong>.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d1e\/b5d\/385\/d1eb5d38541c6ebd0b6f6a0260349222.webp\" width=\"780\" height=\"300\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d1e\/b5d\/385\/d1eb5d38541c6ebd0b6f6a0260349222.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d1e\/b5d\/385\/d1eb5d38541c6ebd0b6f6a0260349222.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430\u00a0\u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u00a0\u0444\u0430\u043a\u0442\u0443 \u0433\u0440\u0430\u0444\u0438\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e\u00a0\u2014 \u0433\u0434\u0435\u2011\u0442\u043e \u0440\u0430\u0437 \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041e\u00a0\u2014 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f. \u0412\u0441\u044e \u044d\u0442\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 <strong>WPF <\/strong>\u043f\u043b\u0430\u0432\u043d\u043e \u0441\u043c\u0435\u0449\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u00a0\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0432\u043f\u0440\u0430\u0432\u043e, \u0441\u0430\u043c\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u00a0\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u0417\u0430\u00a0\u044d\u0442\u0443\u00a0\u0436\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u0442\u043e\u043a\u00a0\u2014 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u043f\u043e\u00a0\u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/af1\/a21\/1a7\/af1a211a76b9aa57ce6bc8b2ea0cefc2.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/af1\/a21\/1a7\/af1a211a76b9aa57ce6bc8b2ea0cefc2.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/af1\/a21\/1a7\/af1a211a76b9aa57ce6bc8b2ea0cefc2.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0435\u0441\u044c \u0433\u0440\u0430\u0444\u0438\u043a \u043d\u0430\u00a0\u0431\u0443\u0444\u0435\u0440\u0435 <strong>\u0440\u0435\u0437\u043a\u043e \u0441\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u043f\u0440\u0430\u0432\u043e<\/strong> \u0432\u043e\u0442 \u044d\u0442\u043e\u0439 \u0448\u0442\u0443\u043a\u043e\u0432\u0438\u043d\u043e\u0439:<\/p>\n<details class=\"spoiler\">\n<summary>Booffer2D.ShiftX(int delta)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">public void ShiftX(long delta, T? sourceFillColor = null) {     if (E.IsInvalid(this) || delta == 0)         return;     if (Math.Abs(delta) &gt;= Width)     {         if (sourceFillColor.HasValue)             Fill(sourceFillColor.Value);         return;     }      using var ds = DisposeProtectedScope;     if (ds.IsFailed())         return;      unsafe     {         if (!TryGetPointers(out var begin, out var end))             return;         var end4 = end - Width * 4;          if (delta &gt; 0)         {             var from = begin;             var to = begin + delta;             var byteCount = (Width - delta) * sizeof(T);             var step = Width;             while (to &lt; end4)             {                 Buffer.MemoryCopy(from, to, byteCount, byteCount); from += step; to += step;                 Buffer.MemoryCopy(from, to, byteCount, byteCount); from += step; to += step;                 Buffer.MemoryCopy(from, to, byteCount, byteCount); from += step; to += step;                 Buffer.MemoryCopy(from, to, byteCount, byteCount); from += step; to += step;             }             while (to &lt; end)             {                 Buffer.MemoryCopy(from, to, byteCount, byteCount);                 from += step;                 to += step;             }         }         else if (delta &lt; 0)         {             var to = begin;             var from = begin - delta;             var byteCount = (Width + delta) * sizeof(T);             var step = Width;             while (from &lt; end4)             {                 Buffer.MemoryCopy(from, to, byteCount, byteCount); from += step; to += step;                 Buffer.MemoryCopy(from, to, byteCount, byteCount); from += step; to += step;                 Buffer.MemoryCopy(from, to, byteCount, byteCount); from += step; to += step;                 Buffer.MemoryCopy(from, to, byteCount, byteCount); from += step; to += step;             }             while (from &lt; end)             {                 Buffer.MemoryCopy(from, to, byteCount, byteCount);                 from += step;                 to += step;             }         }          if (sourceFillColor.HasValue)         {             var color = sourceFillColor.Value;              if (delta &gt; 0)             {                 var from = begin;                 var step = Width - delta;                 var count = delta;                 while (from &lt; end4)                 {                     { var e = from + count; while (from &lt; e) *from++ = color; from += step; }                     { var e = from + count; while (from &lt; e) *from++ = color; from += step; }                     { var e = from + count; while (from &lt; e) *from++ = color; from += step; }                     { var e = from + count; while (from &lt; e) *from++ = color; from += step; }                 }                 while (from &lt; end)                 {                     { var e = from + count; while (from &lt; e) *from++ = color; from += step; }                 }             }             else if (delta &lt; 0)             {                 var from = begin + Width + delta;                 var step = Width + delta;                 var count = -delta;                 while (from &lt; end4)                 {                     { var e = from + count; while (from &lt; e) *from++ = color; from += step; }                     { var e = from + count; while (from &lt; e) *from++ = color; from += step; }                     { var e = from + count; while (from &lt; e) *from++ = color; from += step; }                     { var e = from + count; while (from &lt; e) *from++ = color; from += step; }                 }                 while (from &lt; end)                 {                     { var e = from + count; while (from &lt; e) *from++ = color; from += step; }                 }             }         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0430\u0432\u044b\u0439 \u043a\u0440\u0430\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441\u0442\u0438\u0440\u0430\u0435\u0442\u0441\u044f\u00a0\u2014 \u043e\u043d \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u00a0\u0435\u0451 \u043f\u0440\u0435\u0434\u0435\u043b\u044b.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u00a0\u0431\u0443\u0444\u0435\u0440\u0435 \u0434\u043e\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0433\u0440\u0430\u0444\u0438\u043a\u0430. \u042d\u0442\u0438 \u0434\u0432\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u00a0\u2014 \u0441\u0434\u0432\u0438\u0433 \u0438 \u0434\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0430\u00a0\u2014 \u0434\u0435\u043b\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u043e\u0440\u043c\u043e\u0437\u0430 <strong>GUI<\/strong>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0432\u00a0\u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u00a0<strong>WPF <\/strong>\u0447\u0435\u0440\u0435\u0437 <strong>WritableBitmap<\/strong>.<\/p>\n<p>\u0412\u00a0\u044d\u0442\u043e\u0442\u00a0\u0436\u0435 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0440\u0435\u0437\u043a\u043e \u0441\u0434\u0432\u0438\u0433\u0430\u044e <strong>WPF\u043d\u044b\u0439<\/strong> \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u00a0\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439 \u0432\u043b\u0435\u0432\u043e \u043d\u0430\u00a0\u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043a\u043e\u0435\u00a0\u0436\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u0414\u0432\u0430 \u0440\u0435\u0437\u043a\u0438\u0445 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\u00a0\u2014 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0431\u0443\u0444\u0435\u0440\u0430 \u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0445\u043e\u043b\u0441\u0442\u0430\u00a0\u2014 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u0443\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0441\u0434\u0432\u0438\u0433\u0430 \u043d\u0435\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0410\u00a0\u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p><strong>WPF <\/strong>\u043a\u0430\u043f\u0440\u0438\u0437\u043d\u0438\u0447\u0430\u043b \u0438 \u043d\u0435\u00a0\u0445\u043e\u0442\u0435\u043b \u043e\u0434\u043d\u043e\u043c\u043e\u043c\u0435\u043d\u0442\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0434\u0435\u043b\u0430\u044f \u044d\u0442\u043e \u0432\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u0430\u0434\u0440\u0430\u0445\u00a0\u2014 \u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0451\u0440\u0437\u0430\u043b\u0430. \u0417\u0430\u00a0\u044d\u0442\u043e \u044f \u043d\u0430\u0442\u044f\u043d\u0443\u043b \u0435\u043c\u0443 <strong>\u0442\u0440\u043e\u0439\u043d\u0443\u044e \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e<\/strong>\u00a0\u2014 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6e2\/095\/26b\/6e209526bba23b14fbd8e1ed3a169eb0.webp\" width=\"2978\" height=\"1659\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6e2\/095\/26b\/6e209526bba23b14fbd8e1ed3a169eb0.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6e2\/095\/26b\/6e209526bba23b14fbd8e1ed3a169eb0.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437\u00a0\u0442\u0440\u0451\u0445 \u0411\u041f \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0451\u043d \u0441\u00a0\u0434\u0432\u0443\u0445 \u0440\u0430\u043a\u0443\u0440\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0437\u044b\u0440\u0438\u0442\u044c \u043f\u043e\u00a0\u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c. \u041c\u043e\u0434\u0435\u043b\u044c\u043a\u0438 \u0442\u0435\u00a0\u0436\u0435, \u0447\u0442\u043e\u00a0\u0432\u00a0\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f\u0445\u00a0\u2014 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0441\u00a0\u043d\u0443\u043b\u044f (\u0441\u043d\u0430\u0447\u0430\u043b\u0430 <strong>Inventor<\/strong>, \u043f\u043e\u0442\u043e\u043c <strong>3Ds Max<\/strong>), \u043a\u0430\u043a\u00a0\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0435\u043b\u0438\u043a\u0438, \u0440\u0430\u043c\u044b, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b, \u043f\u0440\u043e\u0432\u043e\u0434\u0430 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u0420\u0430\u043a\u0443\u0440\u0441\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u0432\u0430\u00a0\u2014 \u0438\u043c\u0445\u043e, \u043f\u043b\u0430\u0432\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430\u00a0\u0431\u044b \u0441\u0442\u0438\u043b\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0431\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0438\u0437\u00a0\u043e\u0431\u0440\u0430\u0437\u0430. \u041e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e \u0431\u043b\u043e\u043a\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043d\u0435\u00a0\u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437\u00a0\u043d\u0438\u0445\u00a0\u0431\u044b\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0451\u0441\u043a\u0430.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ecf\/3d1\/a6c\/ecf3d1a6c4920e99ce7ecf74089f68d4.webp\" width=\"483\" height=\"470\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ecf\/3d1\/a6c\/ecf3d1a6c4920e99ce7ecf74089f68d4.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ecf\/3d1\/a6c\/ecf3d1a6c4920e99ce7ecf74089f68d4.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b, \u0447\u0442\u043e\u0431\u044b \u0411\u041f \u043f\u0440\u0438\u00a0\u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435 \u0432\u0437\u0440\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0438 \u0440\u0430\u0437\u043b\u0435\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0430\u00a0\u0434\u0435\u0442\u0430\u043b\u0438 \u0438 \u0434\u044b\u043c, \u0432\u044b\u043b\u0435\u0442\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043e\u043a\u043d\u0430\u00a0\u2014 \u043e\u0442\u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043c\u043e\u0434\u0435\u043b\u0438\u043b \u0411\u041f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c. \u041d\u043e\u00a0\u0440\u0443\u043a\u0438 \u0434\u043e\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0435\u00a0\u0434\u043e\u0448\u043b\u0438.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6e5\/ca0\/821\/6e5ca0821fe034d61e0c14a892c5cb23.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6e5\/ca0\/821\/6e5ca0821fe034d61e0c14a892c5cb23.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6e5\/ca0\/821\/6e5ca0821fe034d61e0c14a892c5cb23.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041e\u0440\u0443\u0442 \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e: \u0435\u0441\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f, \u0433\u0434\u0435 \u043e\u0440 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u0435\u0442. \u041f\u043e\u00a0\u0444\u0430\u043a\u0442\u0443 \u044d\u0442\u043e \u043a\u0443\u0447\u0430 <strong>PNG <\/strong>\u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0432\u00a0\u043f\u0430\u043f\u043a\u0435. \u0414\u0430, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0446\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0440\u0430\u0439\u0442, \u043c\u043e\u0436\u043d\u043e <strong>APNG<\/strong>, \u043c\u043e\u0436\u043d\u043e <strong>WEBP <\/strong>\u0438\u043b\u0438\u00a0\u0435\u0449\u0451 \u0447\u0442\u043e\u2011\u0442\u043e, \u043d\u043e\u00a0\u043c\u043d\u0435 \u0438 \u0442\u0430\u043a \u043d\u043e\u0440\u043c. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f69\/d90\/644\/f69d90644a37dba5a36c6aa0417f9d1f.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f69\/d90\/644\/f69d90644a37dba5a36c6aa0417f9d1f.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f69\/d90\/644\/f69d90644a37dba5a36c6aa0417f9d1f.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0429\u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0432\u044b\u0440\u0435\u0437\u0430\u043d\u044b \u0438\u0437\u00a0\u0441\u0430\u043c\u0438\u2011\u0437\u043d\u0430\u0435\u0442\u0435\u2011\u043a\u0430\u043a\u043e\u0433\u043e \u043c\u0443\u043b\u044c\u0442\u0438\u043a\u0430 \u0432\u00a0<strong>AfterEffects<\/strong>, \u043e\u0442\u0440\u0435\u0442\u0443\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u044b (\u0438\u0431\u043e \u0433\u043e\u0440\u0430\/\u043e\u0431\u043b\u0430\u0447\u043a\u043e \u0437\u0430\u0441\u043b\u043e\u043d\u044f\u043b\u0438) \u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u043d\u044c\u043a\u043e \u043e\u0442\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u0412\u0441\u0435\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u00a0\u043e\u0440\u043e\u043c \u0432\u00a0\u043c\u0443\u043b\u044c\u0442\u0438\u043a\u0435\u00a0\u0431\u044b\u043b\u043e \u0434\u0432\u0430, \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0447\u0443\u0442\u044c \u0441\u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0441\u043e\u0437\u0434\u0430\u0432 \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u0440\u0442\u0430. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0446\u0435\u043b\u0430\u044f \u0438 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f.<\/p>\n<p>\u041a\u0430\u0436\u0434\u043e\u043c\u0443 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043a\u0430\u0434\u0440\u043e\u0432 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cs\">static Range AAAAA2frameRange(AAAAA aaaa) =&gt; aaaa switch {    AAAAA.aa =&gt; 0..24,    AAAAA.AAaa =&gt; 49..71,    AAAAA.AaAaAaAaAaAaA =&gt; 76..139,    AAAAA.AAAAAAAAAAAAAAAAAAAAAAA =&gt; 143..^1,    _ =&gt; 0..^1 }; <\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/450\/ea4\/694\/450ea4694594cd13ae6632624e21f90f.png\" width=\"663\" height=\"483\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/450\/ea4\/694\/450ea4694594cd13ae6632624e21f90f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/450\/ea4\/694\/450ea4694594cd13ae6632624e21f90f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0423\u00a0\u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0411\u041f \u0435\u0441\u0442\u044c \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u00a0\u2014 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0434\u0440\u0430 \u0438 \u0442\u0430\u0439\u043c\u0435\u0440. \u0422\u0430\u0439\u043c\u0435\u0440 30\u00a0\u0440\u0430\u0437 \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430\u00a0\u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0442\u043e\u043a \u0438 \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043a\u0430\u0434\u0440\u043e\u0432. \u0423\u00a0\u044d\u0442\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u043a\u0430\u0434\u0440\u043e\u0432 \u0434\u0432\u0430 \u043d\u043e\u043c\u0435\u0440\u0430\u00a0\u2014 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439. \u0414\u0430\u043b\u0435\u0435 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e, \u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0435\u0433\u043e \u043d\u0430 1<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 \u0440\u0430\u0432\u0435\u043d \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c\u0443, \u0442\u043e \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u043a\u00a0\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c\u0443<\/p>\n<\/li>\n<li>\n<p>\u0412\u00a0\u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043d\u043e\u043c\u0435\u0440 \u043d\u0430 1<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cs\">private int incFrameIndex()  {      var targetRange = AAAAA2frameRange(AAA);      var startIndex = targetRange.Start.GetOffset(frames.Count);      var endIndex = targetRange.End.GetOffset(frames.Count);       if (currentFrameIndex &gt; endIndex)          currentFrameIndex--;      else if (currentFrameIndex == endIndex)          currentFrameIndex = startIndex;      else          currentFrameIndex++;      return currentFrameIndex;  } <\/code><\/pre>\n<p>\u0412\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043a\u0430\u0434\u0440\u043e\u0432 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438, \u0430\u00a0\u0435\u0441\u043b\u0438 \u043e\u043d \u0441\u043c\u0435\u043d\u0438\u043b\u0441\u044f, \u0442\u043e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043a\u00a0\u044d\u0442\u043e\u043c\u0443 \u043d\u043e\u0432\u043e\u043c\u0443 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443, \u043f\u0440\u043e\u043c\u0430\u0442\u044b\u0432\u0430\u044f \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u0442\u0430\u0434\u0438\u0438.<\/p>\n<p><a class=\"anchor\" name=\"%D0%9A%D0%B0%D0%BD%D0%B0%D0%BB%D1%8B%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82%D1%8B%D0%9A%D0%BE%D0%B4%D0%9B%D0%BE%D0%B3%D0%B8\" id=\"\u041a\u0430\u043d\u0430\u043b\u044b\u042d\u0444\u0444\u0435\u043a\u0442\u044b\u041a\u043e\u0434\u041b\u043e\u0433\u0438\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a> <\/p>\n<h3>\u041a\u0430\u043d\u0430\u043b\u044b, \u044d\u0444\u0444\u0435\u043a\u0442\u044b, \u043a\u043e\u0434 \u0438 \u043b\u043e\u0433\u0438<\/h3>\n<p>\u041d\u0438\u0436\u0435 \u0438\u0434\u0451\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0442\u0443\u0448\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432\u00a0\u0447\u0435\u0442\u044b\u0440\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u043d\u0430\u043b\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0431\u0443\u043b\u043e\u0447\u0435\u043a \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0434 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0431\u0443\u043b\u043e\u0447\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0422\u0443\u0433\u0430\u044f \u0441\u0442\u0435\u043d\u0430 \u043b\u043e\u0433\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/531\/742\/e2f\/531742e2f9940d24ca61e426ea70e82c.png\" width=\"2778\" height=\"1278\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/531\/742\/e2f\/531742e2f9940d24ca61e426ea70e82c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/531\/742\/e2f\/531742e2f9940d24ca61e426ea70e82c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u0441\u0451 \u044d\u0442\u043e \u044f \u0443\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043b \u0432\u00a0\u043d\u0430\u0447\u0430\u043b\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u043c\u0435\u0447\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u0443\u043b\u043e\u0447\u0435\u043a \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u0432\u0441\u0435\u0445 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u041c\u043e\u0436\u043d\u043e \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u00a0\u2014 \u0438\u043c\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0444\u043e\u0440\u043c\u0430\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ace\/815\/8a9\/ace8158a9bbeba4efbe6eb427a984705.png\" width=\"1393\" height=\"1045\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ace\/815\/8a9\/ace8158a9bbeba4efbe6eb427a984705.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ace\/815\/8a9\/ace8158a9bbeba4efbe6eb427a984705.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0414\u043b\u044f\u00a0\u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u0430\u044e\u0442 \u043f\u0430\u0440\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043f\u043b\u044e\u0448\u0435\u043a. \u041f\u0435\u0440\u0432\u0430\u044f: \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0430 \u00ab<strong>\u0414\u043b\u0438\u043d\u0430 #,## \u043c\u0435\u0442\u0440\u043e\u0432<\/strong>\u00bb\u00a0\u2014 \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 <strong>\u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e <\/strong>\u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435, \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438 \u0446\u0435\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0438 \u0442\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0434\u043e\u00a0\u0438 \u043f\u043e\u0441\u043b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f2b\/145\/52c\/f2b14552ca26585e32bd7a36d22e7990.png\" width=\"889\" height=\"264\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f2b\/145\/52c\/f2b14552ca26585e32bd7a36d22e7990.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f2b\/145\/52c\/f2b14552ca26585e32bd7a36d22e7990.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f\u00a0\u2014 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0430. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f\u00a0\u0432\u0435\u043b\u0438\u0447\u0438\u043d, \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442\u00a0\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430, \u043a\u0430\u043a\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u00a0\u2014 \u044f\u0440\u043a\u043e\u0441\u0442\u044c. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8cb\/dc9\/aa3\/8cbdc9aa3acd37b2ee83eed6878a2fce.png\" alt=\"\u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0430 - \u044d\u0442\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043e\u0442 0% \u0434\u043e 100%, \u0432\u0442\u043e\u0440\u0430\u044f - \u043e\u0442 100% \u0434\u043e 1000%\" title=\"\u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0430 - \u044d\u0442\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043e\u0442 0% \u0434\u043e 100%, \u0432\u0442\u043e\u0440\u0430\u044f - \u043e\u0442 100% \u0434\u043e 1000%\" width=\"780\" height=\"160\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/8cb\/dc9\/aa3\/8cbdc9aa3acd37b2ee83eed6878a2fce.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8cb\/dc9\/aa3\/8cbdc9aa3acd37b2ee83eed6878a2fce.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0430 &#8212; \u044d\u0442\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043e\u0442 0% \u0434\u043e 100%, \u0432\u0442\u043e\u0440\u0430\u044f &#8212; \u043e\u0442 100% \u0434\u043e 1000%<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c\u2011\u0431\u0443\u043b\u043a\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d \u043f\u0440\u043e\u0441\u0442\u043e: \u0435\u0441\u043b\u0438 \u0431\u0443\u043b\u043a\u0430 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c, \u043e\u0431\u00a0\u044d\u0442\u043e\u043c \u0443\u0437\u043d\u0430\u0451\u0442 \u0442\u0430\u0439\u043c\u0435\u0440 \u0432\u00a0GUI\u2011\u043f\u043e\u0442\u043e\u043a\u0435, \u0438\u0437\u0443\u0447\u0430\u0435\u0442 \u0435\u0451 \u0447\u043b\u0435\u043d\u044b \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u0440\u044f\u043c\u0430\u044f \u0441\u0432\u044f\u0437\u044c \u043e\u0442\u00a0GUI \u043a\u00a0\u043f\u043e\u043b\u044f\u043c \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u0431\u0443\u043b\u043a\u0438 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430, \u0430\u00a0\u0432\u043e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u00a0\u2014 \u0442\u043e \u0435\u0441\u0442\u044c, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 GUI \u043f\u0440\u0438\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u00a0\u0431\u0443\u043b\u043a\u0435\u00a0\u2014 \u0441\u043b\u043e\u0436\u043d\u044b\u0439.<\/p>\n<p>\u0411\u0443\u043b\u043a\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0438 \u043f\u043e\u043b\u0435\u0439, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044f \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 <strong>Bulkaflection<\/strong>. \u0415\u0441\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c, \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0444\u043b\u0430\u0433. \u0424\u043b\u0430\u0433 \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c \u0432\u00a0\u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u0438 \u043e\u043d \u0443\u0436\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b. \u0418 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 Dispatcher \u0438 NotifyUpdate\u00a0\u2014 \u0442\u0430\u043a \u044f \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u044e\u0441\u044c \u043e\u0442\u00a0\u0432\u043e\u0440\u043e\u0445\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u00a0\u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e, STA\/MTA, \u0434\u0435\u0434\u043b\u043e\u043a\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u043c\u0438 \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044f\u043c\u0438.<\/p>\n<p>\u0418 \u0434\u0430: \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u043a\u0443\u0441\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0435\u0449\u0451 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0432\u044b\u0440\u0432\u0438\u0433\u043b\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eb9\/bde\/69c\/eb9bde69cf7f31d2aacc25fe50f9a164.png\" width=\"780\" height=\"130\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/eb9\/bde\/69c\/eb9bde69cf7f31d2aacc25fe50f9a164.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eb9\/bde\/69c\/eb9bde69cf7f31d2aacc25fe50f9a164.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0446\u0432\u0435\u0442\u0430\u00a0\u2014 \u043c\u0435\u0441\u0442\u043d\u0430\u044f \u0444\u0435\u0448\u043d\u2011\u043a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0430, \u043f\u043e\u0440\u0430 \u0435\u043c\u0443 \u0443\u0436\u0435 \u043d\u0430\u0442\u044f\u043d\u0443\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0438\u043b\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435\u00a0\u0444\u043e\u043d\u0438\u043b \u0441\u0432\u043e\u0435\u0439 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u043e \u0432\u0441\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c. \u0418 \u044f \u0443\u0436\u0435 \u043d\u0435\u00a0\u0433\u043e\u0432\u043e\u0440\u044e \u043e\u00a0\u0448\u0440\u0438\u0444\u0442\u0430\u0445, \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u0445 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0448\u0442\u0443\u043a\u0430\u0445.<\/p>\n<p>\u0421\u043f\u0440\u0430\u0432\u0430 \u0432\u00a0\u043e\u043a\u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041b\u043e\u0433\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e. \u041a\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u0430\u044f\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0431\u0443\u043b\u043a\u0430 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0432\u00a0\u044d\u0442\u043e\u043c \u043e\u043a\u043d\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0431\u044e\u0440\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0438\u043f\u0438\u0448 \u043d\u0430 ~200\u00a0\u0441\u0442\u0440\u043e\u043a. \u041f\u0440\u0438\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0441\u043e\u0444\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0431\u0443\u043b\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445, \u0442\u0443\u0442 \u0442\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u0439 \u0443\u0440\u0430\u0433\u0430\u043d.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3fa\/9f1\/fda\/3fa9f1fda14e11ead7c332e9d26755c1.png\" width=\"1655\" height=\"443\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/3fa\/9f1\/fda\/3fa9f1fda14e11ead7c332e9d26755c1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3fa\/9f1\/fda\/3fa9f1fda14e11ead7c332e9d26755c1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/587\/845\/e10\/587845e10ee2df03bacd9a788da87406.png\" width=\"1421\" height=\"849\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/587\/845\/e10\/587845e10ee2df03bacd9a788da87406.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/587\/845\/e10\/587845e10ee2df03bacd9a788da87406.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0417\u0430\u0442\u043e \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0438 \u043b\u0435\u0433\u043a\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0431\u0430\u0433\u0438 \u0438 \u0434\u0435\u0434\u043b\u043e\u043a\u0438. \u0421\u044e\u0434\u0430, \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u044e\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0436\u0451\u043b\u0442\u044b\u043c, \u043e\u0448\u0438\u0431\u043a\u0438\u00a0\u2014 \u043a\u0440\u0430\u0441\u043d\u044b\u043c, \u0430\u00a0\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u00a0\u0443\u0434\u0430\u0447\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438\u00a0\u2014 \u0437\u0435\u043b\u0451\u043d\u044b\u043c.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043b\u043e\u0433\u0430 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041f\u043e\u043b\u0443\u0447\u0435\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0443 \u043d\u0430\u0447\u0438\u043d\u043a\u0438 \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u0434\u0430 public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0434\u043e public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043f\u0440\u043e\u0448\u0443 \u0443 \u043c\u0438\u0440\u0430, \u0445\u043e\u0447\u0435\u0442 \u043b\u0438 \u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041d\u0435\u0442, \u043c\u0438\u0440 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0443 \u0434\u0435\u0440\u0435\u0432\u0430. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430...(\u0411\u0443\u043b\u043e\u0447\u043a\u0430) \u0438 public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0412\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0438 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u044b \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e 1 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0412\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0438 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u044b \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e 1 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041f\u043e\u0438\u0441\u043a \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u0440\u0435\u0434\u0438 \u0442\u0438\u043f\u043e\u0432 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0438\u043f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043d\u0430\u0439\u0434\u0435\u043d. \u042d\u0442\u043e \u0411\u0443\u043b\u043e\u0447\u043a\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041f\u043e\u0438\u0441\u043a \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u0440\u0435\u0434\u0438 \u0442\u0438\u043f\u043e\u0432 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0438\u043f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043d\u0430\u0439\u0434\u0435\u043d. \u042d\u0442\u043e \u0411\u0443\u043b\u043e\u0447\u043a\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439: 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0422\u0438\u043f\u043e\u0432 \u043d\u0435\u0442 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041c\u0435\u0442\u043e\u0434\u043e\u0432 \u043d\u0435\u0442 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0435\u0442 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0414\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 \u043d\u0435\u0442 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0418\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0435\u0442 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041f\u043e\u043b\u0435\u0439 \u043d\u0435\u0442 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u0432\u043e\u0439\u0441\u0442\u0432 \u043d\u0435\u0442 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0412 \u0445\u043e\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043d\u0435 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041d\u0430\u0447\u0430\u043b\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u0438 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0422\u0438\u043f\u044b \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u0438 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 - \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u044b 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0423 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u0438 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u043f\u043e 4 \u0447\u043b\u0435\u043d\u043e\u0432 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0427\u0438\u0441\u043b\u043e \u0447\u043b\u0435\u043d\u043e\u0432 \u0440\u0430\u0432\u043d\u043e, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439: 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0422\u0438\u043f\u043e\u0432 \u043d\u0435\u0442 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 1 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0422\u0435\u043b\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0414\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u0430 Process \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u043f\u0430\u0440\u0430 \u0432 \u043d\u043e\u0432\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043a\u043e\u0434\u0430, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u043e\u0442\u0430\u043b\u044c\u043d\u044b 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 1 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0442\u043e\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: NeedRecompile 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0434\u0435\u0440\u0435\u0432\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: NeedRecompile 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u0443\u044e \u0431\u0443\u043b\u043e\u0447\u043a\u0443, \u0444\u043b\u0430\u0433 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u043e\u0448\u0435\u043d 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u0435 #2015[ReplaceObjectPrescription] \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041f\u0440\u043e\u0441\u0438\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u044f #2015 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0418\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440 \u0440\u0430\u0431\u043e\u0442: \u041e\u0442 \u043d\u0430\u0441 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c ReplaceObjectPrescription \u0434\u043b\u044f \u0431\u0443\u043b\u043a\u0438 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430] 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u042f \u0431\u0443\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 \u0431\u0443\u043b\u043e\u0447\u043a\u043e\u0439 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430], \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0441\u044c. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u044f #2015 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443 #19920974 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0443 \u043c\u0438\u0440\u0430 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u043d\u043e\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b #19920974 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041f\u043e\u043b\u0443\u0447\u0435\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u043d\u043e\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b #19920974 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e \u0440\u0430\u0431\u043e\u0442\u0443 #19920974 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0443... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u041f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0430 \u043d\u043e\u0432\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 #19920974 \u0442\u0438\u043f\u0430 ReplaceObjJob \u043e\u0442 \u0431\u0443\u043b\u043a\u0438 #21 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0420\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b #19920974 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0440\u0430\u0431\u043e\u0442 \u043d\u043e\u0432\u0435\u043d\u044c\u043a\u0438\u0435! 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043d. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0441\u043a\u043e\u043f\u0438\u0448\u0432\u0438\u0445\u0441\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0440\u0430\u0431\u043e\u0442... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u043e \u0440\u0430\u0431\u043e\u0442: 1 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0420\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044e... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: -------------------\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0440\u0430\u0431\u043e\u0442. \u0412\u0441\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435: 1---------------------------- 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0431\u043e\u0442 \u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0441\u0442\u044c \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c.... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d. \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0431\u0443\u043b\u043a\u0430\u043c 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u0411\u0443\u043b\u043a\u0435 #21 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 ReplaceObjJob 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f \u0432\u0441\u0435\u0445 \u0440\u0430\u0431\u043e\u0442 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f: \u0434\u043b\u044f \u0431\u0443\u043b\u043a\u0438 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430] \u043c\u043d\u0435 \u043d\u0430\u0434\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u0441 \u043d\u043e\u0432\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0443 \u043c\u0438\u0440\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438\u0437 \u043f\u0443\u043b\u0430 \u043d\u0430 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u043f\u0435\u0447\u043a\u0443 __the_bakery_3 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c 56 \u0441\u0441\u044b\u043b\u043e\u043a 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0435\u0447\u043a\u0443 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c 40 \u044e\u0437\u0438\u043d\u0433\u043e\u0432 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c using static \u0434\u043b\u044f \u043f\u0435\u0447\u043a\u0438 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d, \u043e\u0442\u0434\u0430\u0451\u043c \u0435\u0433\u043e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u043b\u0443\u0447\u0435\u043d 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u041a\u043e\u043c\u0430\u043d\u0434\u0443\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434: public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043a\u043e\u0434\u0430 public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041f\u0430\u0440\u0441\u0438\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0434\u0435\u0440\u0435\u0432\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041d\u0430\u0447\u0430\u043b\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u044e\u0437\u0438\u043d\u0433\u0438... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e 41 \u044e\u0437\u0438\u043d\u0433\u043e\u0432 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0443\u0437\u0435\u043b \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u044e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0443\u0437\u0435\u043b \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0441 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430\u043c\u0438 using \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u043c \u0443\u0437\u043b\u043e\u043c 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0441 \u043e\u043f\u0446\u0438\u0435\u0439 OutputKind \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043e\u043f\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041f\u0438\u0445\u0430\u0435\u043c \u043e\u043f\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043e\u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\mscorlib.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.Core.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.ObjectModel.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.ComponentModel.Primitives.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.Numerics.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.Numerics.Vectors.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.Runtime.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.Private.CoreLib.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.Reflection.TypeExtensions.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.Reflection.Metadata.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.Reflection.Emit.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.Reflection.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.Reflection.Extensions.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Users\\user\\Documents\\Programs\\Ambiknight2\\Ambiknight2\\bin\\Debug\\net9.0-windows7.0\\AmbiknightCompiler.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.Linq.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Users\\user\\Documents\\Programs\\Ambiknight2\\Ambiknight2\\bin\\Debug\\net9.0-windows7.0\\AmbiknightPepectors.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Users\\user\\Documents\\Programs\\Ambiknight2\\Ambiknight2\\bin\\Debug\\net9.0-windows7.0\\AmbiknightBasics.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Users\\user\\Documents\\Programs\\Ambiknight2\\Ambiknight2\\bin\\Debug\\net9.0-windows7.0\\AmbiknightPepectedBooffers.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Users\\user\\Documents\\Programs\\Ambiknight2\\Ambiknight2\\bin\\Debug\\net9.0-windows7.0\\AmbiknightBooffers.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Users\\user\\Documents\\Programs\\Ambiknight2\\Ambiknight2\\bin\\Debug\\net9.0-windows7.0\\AmbiknightData.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\System.Linq.Expressions.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 C:\\Program Files\\dotnet\\shared\\Microsoft.NETCore.App\\9.0.0\\Microsoft.CSharp.dll; 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043f\u0438\u0441\u043e\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043e\u0432 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0412\u0441\u0435 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u044b \u0437\u0430\u043f\u0438\u0445\u043d\u0443\u0442\u044b. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041f\u0438\u0445\u0430\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u044b... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Runtime.dll 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Collections.dll 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Linq.dll 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightPepectors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightBulki, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightPepectedBooffers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightSTM32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightShuffler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightLEDFrames, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightPipelines, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightPipelines, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightPhysics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightKernel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.IO.Ports, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 PresentationFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightKernel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightKernel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightNative, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightPeperubka, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightProcessUtils, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 WindowsBase, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightKernel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightBasics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightPepectors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightBooffers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightPepectedBooffers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightCPUImaging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightKernel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightKernel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Xaml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightLEDVisualizers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 PresentationCore, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 PresentationCore, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 PresentationCore, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightKernel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightKernel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightKernel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightLEDCore, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 AmbiknightLEDFrames, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430 __runtimeAssembly25, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u044b \u0437\u0430\u043f\u0438\u0445\u043d\u0443\u0442\u044b. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041c\u043e\u0434\u0443\u043b\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0437 \u0434\u0435\u0440\u0435\u0432\u0430... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438: True 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u21161: (1,259): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u21162: (1,714): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u21163: (1,939): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u21164: (1,234): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u21165: (1,45): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u21166: (1,878): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u21167: (1,740): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u21168: (1,311): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u21169: (1,613): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211610: (1,103): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211611: (1,584): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211612: (1,1054): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211613: (1,1090): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211614: (1,850): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211615: (1,406): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211616: (1,13): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211617: (1,345): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211618: (1,519): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211619: (1,192): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211620: (1,177): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211621: (1,806): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211622: (1,428): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211623: (1,913): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211624: (1,86): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211625: (1,382): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211626: (1,280): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211627: (1,643): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211628: (1,454): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211629: (1,127): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211630: (1,771): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211631: (1,149): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211632: (1,993): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211633: (1,69): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211634: (1,539): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211635: (1,958): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u211636: (1,565): hidden CS8019: \u041d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 using. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \ud83c\udf1f \u0423\u0440\u0430! \u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c! 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0438 \u0438\u0437 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0438\u0437 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0431\u0430\u0439\u0442\u044b \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u043e 3072 \u0431\u0430\u0439\u0442 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0421\u0431\u043e\u0440\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b Asm44.dll 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 __runtimeAssembly47, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041f\u043e\u0438\u0441\u043a \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0432 \u0441\u0431\u043e\u0440\u043a\u0435... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0438\u043f \u043d\u0430\u0439\u0434\u0435\u043d! \u042d\u0442\u043e \u0436\u0435 \u0411\u0443\u043b\u043e\u0447\u043a\u0430! 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041d\u0430 \u044d\u0442\u043e\u0439 \u043f\u043e\u0437\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u043d\u043e\u0442\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438: SuccessCompileResult 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u044e \u0432 \u0431\u0443\u043b\u043a\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043a\u043e\u043c\u043f\u043b\u0438\u044f\u0446\u0438\u0438 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u0432\u0435\u0440\u043d\u0443\u043b \u043c\u043d\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: SuccessCompileResult 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0443\u0434\u0430\u043b\u0430\u0441\u044c. \u0411\u0435\u0440\u0443 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 __runtimeAssembly47, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null \u0438 \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\u0437 \u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041f\u043e\u0438\u0441\u043a \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0432 \u0441\u0431\u043e\u0440\u043a\u0435... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0438\u043f \u043d\u0430\u0439\u0434\u0435\u043d. \u042d\u0442\u043e \u0411\u0443\u043b\u043e\u0447\u043a\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432... 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u04405: \u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u041e\u0431\u044a\u0435\u043a\u0442 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u041e\u0442\u0447\u0451\u0442 \u043e\u0431 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c #2115 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432 \u043c\u0438\u0440\u0443 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0412 \u043f\u0443\u043b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0421\u0442\u0438\u0440\u0430\u0435\u043c \u044e\u0437\u0438\u043d\u0438\u0433\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0421\u0442\u0438\u0440\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432 \u043f\u0443\u043b 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u0435\u0447\u043a\u0443, \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f 19:06:32 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u0430\u043f \u0432\u0441\u0435\u0445 \u0440\u0430\u0431\u043e\u0442 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u0412\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u0430\u043f: \u0434\u043b\u044f \u0431\u0443\u043b\u043a\u0438 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430] \u0437\u0430\u043c\u0435\u043d\u044f\u044e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0442\u0447\u0451\u0442\u0430 #2115 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041f\u043e\u043b\u0443\u0447\u0435\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 19:06:32 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442: ObjectCreateResult 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0432 \u043d\u0430\u0447\u0438\u043d\u043a\u0443 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u0430\u043c\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \"\u0411\u0443\u043b\u043e\u0447\u043a\u0430\"... 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e... 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0421\u0431\u0440\u043e\u0441 \u0444\u043b\u0430\u0433\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0415\u0434\u0438\u043d\u043e\u043c\u043e\u043c\u0435\u043d\u0442\u043d\u0430\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0417\u0430\u0434\u0430\u043d \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u044f \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0421\u043a\u0430\u0447\u0435\u043c \u043f\u043e \u043f\u043e\u043b\u044f\u043c 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043b\u044f Wide 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u043f\u043e\u043b\u0435 Wide 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043b\u044f Back 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u043f\u043e\u043b\u0435 Back 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043b\u044f Exposure 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u043f\u043e\u043b\u0435 Exposure 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0421\u043a\u0430\u0447\u0435\u043c \u043f\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0421\u043a\u0430\u0447\u0435\u043c \u043f\u043e \u043c\u0435\u0442\u043e\u0434\u0430\u043c 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 Process 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041c\u0435\u0442\u043e\u0434 Process \u043e\u0442\u0431\u0440\u0430\u043a\u043e\u0432\u0430\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u043e \u043b\u0438 \u043e\u043d \u043d\u0435 public, \u0442\u043e \u043b\u0438 \u0438\u043c\u0435\u0435\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 GetType 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043c\u0435\u0442\u043e\u0434 GetType 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 ToString 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043c\u0435\u0442\u043e\u0434 ToString 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 Equals 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041c\u0435\u0442\u043e\u0434 Equals \u043e\u0442\u0431\u0440\u0430\u043a\u043e\u0432\u0430\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u043e \u043b\u0438 \u043e\u043d \u043d\u0435 public, \u0442\u043e \u043b\u0438 \u0438\u043c\u0435\u0435\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 GetHashCode 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043c\u0435\u0442\u043e\u0434 GetHashCode 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0418\u0442\u043e\u0433\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e 3 \u043f\u043e\u043b\u0435\u0439 \u0438 0 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041c\u044b \u043c\u043e\u043b\u043e\u0434\u0446\u044b :3 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e. \u041d\u0430\u0439\u0434\u0435\u043d\u043e 3 \u043f\u043e\u043b\u0435\u0439 \u0438 0 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e... 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043d \u0443\u0441\u043f\u0435\u0448\u043d\u043e. 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0417\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0417\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043f\u043e\u043b\u044f 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0417\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u044b 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d \u0443\u0441\u043f\u0435\u0448\u043d\u043e. 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0412\u044b\u0437\u043e\u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430... 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0412\u044b\u0437\u043e\u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u043a\u0438 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0417\u0430\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0440\u0435\u0448\u0435\u043d\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 :True, \u0441\u0442\u0430\u0440\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442: ObjectCreateResult 19:06:34 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 AfterInnerObjectAndCodeReplaced 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u0417\u0430\u043c\u0435\u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e 19:06:37 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0435\u043c \u043d\u0430 50 \u043c\u0441 \u043f\u0435\u0440\u0435\u0434 \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u043f\u043e \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u0431\u0443\u043b\u043e\u043a 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Wide 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Wide \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 0; 1; 0. \u0423\u0440\u0430! 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Back 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Back \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 1; 0; 0. \u0423\u0440\u0430! 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Exposure 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Exposure \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 0. \u0423\u0440\u0430! 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Exposure 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Exposure \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 0. \u0423\u0440\u0430! 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Exposure 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Exposure \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 0. \u0423\u0440\u0430! 19:06:37 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0442\u0440\u0435\u0442\u0438\u0439 \u044d\u0442\u0430\u043f \u0432\u0441\u0435\u0445 \u0440\u0430\u0431\u043e\u0442 \u043f\u043e \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u0431\u0443\u043b\u043e\u043a 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u0422\u0440\u0435\u0442\u0438\u0439 \u044d\u0442\u0430\u043f: \u043d\u0430\u0434\u043e \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0443\u043b\u043a\u0438 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430] 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044e \u043a \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u0423 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 Dispose, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0443 \u043c\u0443\u0441\u043e\u0440\u0430 19:06:37 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u043b\u043e\u0447\u043a\u0438: \u0412\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. 19:06:37 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u0420\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b 19:06:37 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: -----------\u0420\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: True. \u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438------------------- 19:06:37 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442. 19:06:37 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438.<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043b\u043e\u0433\u0430 \u043a\u043e\u0433\u0434\u0430 \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041f\u043e\u043b\u0443\u0447\u0435\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0443 \u043d\u0430\u0447\u0438\u043d\u043a\u0438 \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u0434\u0430 public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0434\u043e public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043f\u0440\u043e\u0448\u0443 \u0443 \u043c\u0438\u0440\u0430, \u0445\u043e\u0447\u0435\u0442 \u043b\u0438 \u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041d\u0435\u0442, \u043c\u0438\u0440 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0443 \u0434\u0435\u0440\u0435\u0432\u0430. 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430...(\u0411\u0443\u043b\u043e\u0447\u043a\u0430) \u0438 public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0412\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0438 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u044b \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e 1 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0412\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0438 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u044b \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e 1 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041f\u043e\u0438\u0441\u043a \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u0440\u0435\u0434\u0438 \u0442\u0438\u043f\u043e\u0432 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0438\u043f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043d\u0430\u0439\u0434\u0435\u043d. \u042d\u0442\u043e \u0411\u0443\u043b\u043e\u0447\u043a\u0430 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041f\u043e\u0438\u0441\u043a \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u0440\u0435\u0434\u0438 \u0442\u0438\u043f\u043e\u0432 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0438\u043f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043d\u0430\u0439\u0434\u0435\u043d. \u042d\u0442\u043e \u0411\u0443\u043b\u043e\u0447\u043a\u0430 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439: 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0422\u0438\u043f\u043e\u0432 \u043d\u0435\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041c\u0435\u0442\u043e\u0434\u043e\u0432 \u043d\u0435\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0435\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0414\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 \u043d\u0435\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0418\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0435\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041f\u043e\u043b\u0435\u0439 \u043d\u0435\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u0432\u043e\u0439\u0441\u0442\u0432 \u043d\u0435\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0412 \u0445\u043e\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043d\u0435 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043e 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041d\u0430\u0447\u0430\u043b\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u0438 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0422\u0438\u043f\u044b \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u0438 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 - \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u044b 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0423 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u0438 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u043f\u043e 4 \u0447\u043b\u0435\u043d\u043e\u0432 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0427\u0438\u0441\u043b\u043e \u0447\u043b\u0435\u043d\u043e\u0432 \u0440\u0430\u0432\u043d\u043e, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439: 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0422\u0438\u043f\u043e\u0432 \u043d\u0435\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 1 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0422\u0435\u043b\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u041c\u0435\u0442\u043e\u0434\u044b \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0418\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u043c 1 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u0437 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 - \u0441 \u043d\u0438\u043c\u0438 \u0443\u0436\u0435 \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0435\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0414\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 \u043d\u0435\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0418\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0435\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 3 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u043b\u044f 1 \u0438\u0437 3 Wide... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: , \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435. \u0412\u0441\u0435\u0433\u043e \u0442\u0430\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0442\u0435\u043f\u0435\u0440\u044c: 1 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u043b\u044f Wide \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u043b\u044f 2 \u0438\u0437 3 Back... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: , \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435. \u0412\u0441\u0435\u0433\u043e \u0442\u0430\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0442\u0435\u043f\u0435\u0440\u044c: 2 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u043b\u044f Back \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u043b\u044f 3 \u0438\u0437 3 Exposure... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f Exposure \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u043b\u044f Exposure \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0412\u044b\u044f\u0432\u043b\u0435\u043d\u043e 2 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0443 \u043f\u043e\u043b\u0435\u0439. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0443 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0431\u0435\u0437 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 3 \u043f\u043e\u043b\u0435\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f 2 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0423 \u043f\u043e\u043b\u044f Wide \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u043d\u0430 0; 1; 0 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0423 \u043f\u043e\u043b\u044f Back \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u043d\u0430 1; 0,64705884; 0 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0417\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 2 \u043f\u043e\u043b\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0445 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u0431\u0435\u0437 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0418\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u043c 3 \u043f\u043e\u043b\u0435\u0439 \u0438\u0437 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 - \u0441 \u043d\u0438\u043c\u0438 \u0443\u0436\u0435 \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u0432\u043e\u0439\u0441\u0442\u0432 \u043d\u0435\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0412 \u0445\u043e\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439 \u0431\u044b\u043b\u043e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 2 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\/\u043f\u043e\u043b\u0435\u0439 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0438\u043a\u0430\u0442\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u0434 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u0438 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 ValuesChange 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430: \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: ValuesChange 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0434\u0435\u0440\u0435\u0432\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: ValuesChange 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u043b\u043e\u0447\u043a\u0438 \u0432 \u043a\u043e\u0434\u0435, \u0444\u043b\u0430\u0433 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u043e\u0448\u0435\u043d - \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u044f 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f 2. 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u0435 #2016[ValuesUpdatePrescription] \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041f\u0440\u043e\u0441\u0438\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u044f #2016 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0418\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440 \u0440\u0430\u0431\u043e\u0442: \u041e\u0442 \u043d\u0430\u0441 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c ValuesUpdatePrescription \u0434\u043b\u044f \u0431\u0443\u043b\u043a\u0438 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430] 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u044f #2016 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443 #19920975 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0443 \u043c\u0438\u0440\u0430 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u043d\u043e\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b #19920975 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041f\u043e\u043b\u0443\u0447\u0435\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u043d\u043e\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b #19920975 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e \u0440\u0430\u0431\u043e\u0442\u0443 #19920975 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0443... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u041f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0430 \u043d\u043e\u0432\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 #19920975 \u0442\u0438\u043f\u0430 ValuesUpdateJob \u043e\u0442 \u0431\u0443\u043b\u043a\u0438 #21 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0420\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b #19920975 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0440\u0430\u0431\u043e\u0442 \u043d\u043e\u0432\u0435\u043d\u044c\u043a\u0438\u0435! 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043d. 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0441\u043a\u043e\u043f\u0438\u0448\u0432\u0438\u0445\u0441\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0440\u0430\u0431\u043e\u0442... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u043e \u0440\u0430\u0431\u043e\u0442: 1 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0420\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044e... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: -------------------\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0440\u0430\u0431\u043e\u0442. \u0412\u0441\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435: 1---------------------------- 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0431\u043e\u0442 \u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0441\u0442\u044c \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c.... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d. \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0431\u0443\u043b\u043a\u0430\u043c 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u0411\u0443\u043b\u043a\u0435 #21 \u0411\u0443\u043b\u043e\u0447\u043a\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 ValuesUpdateJob 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f \u0432\u0441\u0435\u0445 \u0440\u0430\u0431\u043e\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u0435\u0447\u043a\u0443, \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u0430\u043f \u0432\u0441\u0435\u0445 \u0440\u0430\u0431\u043e\u0442 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u044e \u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e 2 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Wide \u043d\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 0; 1; 0 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Wide \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 0; 1; 0 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0; 1; 0 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0448\u043b\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044e \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u0431\u0443\u043b\u043a\u0430\u0444\u043b\u0435\u043a\u0448\u043d \u0434\u043b\u044f \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: True 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: \u041f\u043e\u043b\u0435\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Back \u043d\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 1; 0,64705884; 0 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Back \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 1; 0,64705884; 0 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 1; 0,64705884; 0 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0448\u043b\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044e \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u0431\u0443\u043b\u043a\u0430\u0444\u043b\u0435\u043a\u0448\u043d \u0434\u043b\u044f \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: True 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: \u041f\u043e\u043b\u0435\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: \u0412\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0435\u043c \u043d\u0430 50 \u043c\u0441 \u043f\u0435\u0440\u0435\u0434 \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u043f\u043e \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u0431\u0443\u043b\u043e\u043a 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0442\u0440\u0435\u0442\u0438\u0439 \u044d\u0442\u0430\u043f \u0432\u0441\u0435\u0445 \u0440\u0430\u0431\u043e\u0442 \u043f\u043e \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u0431\u0443\u043b\u043e\u043a 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: \u0420\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442: -----------\u0420\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: True. \u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438------------------- 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442. 20:09:16 15.06.2024 \u041c\u0438\u04401: \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0440\u0430\u0431\u043e\u0442: \u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438. 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041f\u043e\u043b\u0435 Back \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043e 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f! 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: Back \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 1; 0; 0 \u043d\u0430 1; 0,64705884; 0 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0412\u044b\u0437\u043e\u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u0439... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432:  \u0438 Back=1; 0,64705884; 0 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0444\u043b\u0430\u0433 \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0424\u043b\u0430\u0433 \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0431\u044b\u043b \u0432\u043a\u043b\u044e\u0447\u0435\u043d. \u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e - \u043e\u043d \u0441\u0432\u043e\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u0434... 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u0430\u043f\u0435\u0447\u0430\u0442\u043b\u0438\u0432\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043b\u0438 \u043e\u043d, \u043f\u043e\u043a\u0430 \u043c\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0441 \u0432\u043d\u0435\u0441\u0451\u043d\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u0437 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 20:09:16 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u043e\u0434\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 20:09:17 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0418\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e 20:09:17 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430... 20:09:17 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0412\u0445\u043e\u0434 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d \u0443\u0441\u043f\u0435\u0448\u043d\u043e. 20:09:17 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0421\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u0434:public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430... 20:09:17 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434:public class \u0411\u0443\u043b\u043e\u0447\u043a\u0430... 20:09:17 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u0437\u0430\u043c\u0435\u043d\u0443... 20:09:17 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041a\u043e\u0434 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0451\u043d. 20:09:17 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0412\u044b\u0437\u043e\u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. 20:09:17 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Back 20:09:17 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Back \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f 20:09:17 15.06.2024 \u041c\u0438\u04401: \u0411\u0443\u043b\u043e\u0447\u043a\u0430 #21[\u0411\u0443\u043b\u043e\u0447\u043a\u0430]: \u041d\u0430\u0447\u0438\u043d\u043a\u0430: \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 1; 0,64705884; 0. \u0423\u0440\u0430!<\/code><\/pre>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%9A%D0%BE%D0%B4%D0%B0\" id=\"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u041a\u043e\u0434\u0430\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<h3>\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043a\u043e\u0434\u0430<\/h3>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u00a0\u2014 \u0432\u0437\u044f\u043b <strong>AvalonEdit<\/strong>, \u043d\u0430\u043a\u0430\u0442\u0438\u043b \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043e\u0447\u043a\u0443, \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u043a\u043e\u0434\u0430 \u0438 \u0430\u0432\u0442\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u00a0\u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442\u043e\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<p>\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0437\u0430\u0442\u043e\u0447\u0435\u043d\u0430 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u00a0<strong>C#<\/strong>, \u043d\u043e\u00a0\u0438 \u043f\u043e\u0434\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b. \u041f\u0440\u0438\u0447\u0451\u043c \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0441\u0432\u043e\u0439 \u0446\u0432\u0435\u0442\u00a0\u2014 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0435, \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u0435 \u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u0435 \u0442\u0438\u043f\u044b.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7cb\/1e3\/2aa\/7cb1e32aa9a4b2f90ba182f1e8625177.png\" width=\"710\" height=\"201\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7cb\/1e3\/2aa\/7cb1e32aa9a4b2f90ba182f1e8625177.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7cb\/1e3\/2aa\/7cb1e32aa9a4b2f90ba182f1e8625177.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u0442\u0440\u0430\u0445\u0443\u0435\u0442 \u043e\u0442\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e\u0443\u043b\u043e\u0432\u0438\u043c\u044b\u0439 \u0431\u0430\u0433.<\/p>\n<p>\u0410\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442 \u0438\u043c\u0435\u0435\u0442 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<ul>\n<li>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435: \u0432\u044b\u0440\u0432\u0438\u0433\u043b\u0430\u0437\u043d\u044b\u0435 \u043e\u043b\u0434\u0441\u043a\u0443\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u043a\u0438 \u0438\u0437 VisualBasic 6. \u0411\u044b\u043b\u0438 \u0437\u0430\u0430\u043f\u0441\u043a\u0435\u0439\u043b\u0435\u043d\u044b \u0432 2 \u0440\u0430\u0437\u0430 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0435\u043d\u044b \u0440\u0443\u043a\u0430\u043c\u0438. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u043a\u0438, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u0440\u0435\u0448\u0438\u043b \u043f\u043e \u043f\u0440\u0438\u043a\u043e\u043b\u0443 \u0432\u043e\u0442\u043a\u043d\u0443\u0442\u044c \u044d\u0442\u0438. \u041c\u043e\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0435 \u0441\u0432\u0435\u0440\u0445\u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0435 \u044f\u0431\u043b\u043e\u0447\u043d\u044b\u0435 \u0444\u0440\u0443\u0442\u0435\u043b\u043b\u044b \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b9d\/8ad\/f53\/b9d8adf5352f2a00f6a6bef4344fa2ea.png\" width=\"780\" height=\"103\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b9d\/8ad\/f53\/b9d8adf5352f2a00f6a6bef4344fa2ea.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b9d\/8ad\/f53\/b9d8adf5352f2a00f6a6bef4344fa2ea.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<ul>\n<li>\n<p>\u0423\u00a0\u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0441\u0432\u0438\u0437\u043b\u0438\u043d\u0433\u043e\u0432\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 (\u044d\u0442\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 <strong>xyzw<\/strong>, <strong>rgba <\/strong>\u0438 <strong>\u043a\u0437\u0441\u0430<\/strong>), \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0445 \u0432\u0441\u0435 \u0432\u00a0\u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0443\u00a0\u0447\u0435\u0442\u044b\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u044f\u0432\u043d\u043e \u043d\u0435\u00a0\u0441\u0442\u043e\u0438\u0442. \u042d\u0442\u043e \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u0445 \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c89\/ba0\/def\/c89ba0def4788456d81a21633c7fddf4.png\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c89\/ba0\/def\/c89ba0def4788456d81a21633c7fddf4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c89\/ba0\/def\/c89ba0def4788456d81a21633c7fddf4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<ul>\n<li>\n<p>\u0425\u0430\u043a\u043e\u0432\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u043e\u0432 <strong>BitAs\u2026<\/strong> \u0431\u043b\u0451\u043a\u043b\u044b\u0435 \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u0437\u0430\u0441\u043f\u0430\u043c\u043b\u0438\u0432\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0438 \u043a\u0430\u043a\u00a0\u0431\u044b \u043d\u0430\u043c\u0435\u043a\u0430\u0442\u044c \u00ab<em>\u043c\u043e\u0436 \u043d\u0435\u00a0\u0441\u0442\u043e\u0438\u0442 \u0432\u0441\u0451 \u0442\u0430\u043a\u0438<\/em>\u00bb. \u041e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a\u00a0\u043f\u0435\u0440\u0432\u043e\u0439, \u0432\u0442\u043e\u0440\u043e\u0439 \u0438 \u0434\u0430\u043b\u0435\u0435 \u0433\u0440\u0443\u043f\u043f\u0435 \u0431\u0438\u0442, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u00a0\u043e\u0434\u0438\u043d \u043f\u0443\u043d\u043a\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 <strong>sbyte4\u00a0<\/strong>\u043c\u043e\u0436\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u00a0\u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>int <\/strong>(4\u00a0\u0431\u0430\u0439\u0442\u0430) \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <strong>BitsAsInt<\/strong>, \u0430\u00a0\u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a\u00a0\u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f short (\u043f\u043e 2\u00a0\u0431\u0430\u0439\u0442\u0430) \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0439\u0441\u0442\u0432 <strong>BitsAsShort1\u00a0<\/strong>\u0438 <strong>BitsAsShort2<\/strong>. \u0418 \u0432\u043e\u0442 \u044d\u0442\u0438 \u0434\u0432\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u00a0\u043f\u0443\u043d\u043a\u0442 <strong>BitsAsShort1\u20262<\/strong><\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/125\/ade\/340\/125ade34082b16360345a4213921e6c3.png\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/125\/ade\/340\/125ade34082b16360345a4213921e6c3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/125\/ade\/340\/125ade34082b16360345a4213921e6c3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<ul>\n<li>\n<p>\u041f\u0440\u0438\u00a0\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a\u00a0\u0434\u0440\u0443\u0433\u0438\u043c \u0431\u0443\u043b\u043a\u0430\u043c \u043f\u043e\u00a0\u0438\u043c\u0435\u043d\u0438 \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u00a0\u0431\u0443\u043b\u043a\u0438 \u0432\u0438\u0434\u044f\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430 \u043a\u0430\u043a\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0442\u0438\u043f\u0430 <strong>dynamic<\/strong>. \u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0439 \u0441\u00a0\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u043a\u00a0\u0431\u0443\u043b\u043a\u0430\u043c. <\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e54\/348\/955\/e543489550e8e7e9f3e57d941e0131d7.png\" width=\"780\" height=\"451\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e54\/348\/955\/e543489550e8e7e9f3e57d941e0131d7.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e54\/348\/955\/e543489550e8e7e9f3e57d941e0131d7.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<ul>\n<li>\n<p>\u041f\u043e\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c <strong>\/\/\/&lt;summary&gt;<\/strong> \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431\u043e\u00a0\u0432\u0441\u044f\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445, \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0438\u0437\u00a0xml\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043f\u0440\u0438\u00a0\u0432\u0432\u043e\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0441\u0451 \u043e\u0431\u044b\u0447\u043d\u043e\u00a0\u2014 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043a\u0430\u043a\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. \u041d\u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0441\u044e\u0434\u0430 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a, \u044f \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u0440\u0435\u0448\u0438\u043b\u0441\u044f, \u043d\u043e\u00a0\u0443\u0436\u0435 \u0434\u0443\u043c\u0430\u044e \u043e\u0431\u00a0\u044d\u0442\u043e\u043c \ud83d\ude42<\/p>\n<p><a class=\"anchor\" name=\"%D0%9D%D0%B0%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%BA\" id=\"\u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a\"><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<hr\/>\n<h2>\u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a<\/h2>\n<p>\u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u0430\u0440\u043e\u0447\u043a\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432. \u041d\u0430\u0447\u043d\u0451\u043c \u0441\u00a0\u0432\u043e\u0442 \u044d\u0442\u043e\u0439 \u0448\u0442\u0443\u043a\u0438, \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439\u00a0\u2014 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u0443 \u043d\u043e\u0447\u043d\u043e\u0433\u043e \u0433\u043e\u0440\u043e\u0434\u0430.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/375\/f72\/9b7\/375f729b7f262e87439f7f4dcd391699.webp\" width=\"780\" height=\"439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/375\/f72\/9b7\/375f729b7f262e87439f7f4dcd391699.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/375\/f72\/9b7\/375f729b7f262e87439f7f4dcd391699.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043d \u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0411\u0435\u0440\u0451\u043c \u0434\u0435\u0432\u043e\u0447\u043a\u0443 \u0438 \u0441\u0443\u0451\u043c \u0435\u0451 \u0432\u00a0<strong>ClassicBitmap32<\/strong>. \u0412\u043e\u0442 \u044d\u0442\u0443:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/29e\/dc1\/4c7\/29edc14c723d8d7471020f7027e30345.webp\" width=\"780\" height=\"780\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/29e\/dc1\/4c7\/29edc14c723d8d7471020f7027e30345.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/29e\/dc1\/4c7\/29edc14c723d8d7471020f7027e30345.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0431\u0435\u0433\u0430\u0442\u044c \u043f\u043e\u00a0\u043d\u0435\u0439 \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u0447\u044e\u0432\u0430\u043a\u043e\u0432, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043a\u0430\u043a\u0438\u0435\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0438 \u0438 \u0442\u0430\u043a\u0442\u0438\u043a\u043e\u2011\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0447\u044e\u0432\u0430\u043a\u043e\u0432 \u0434\u043b\u044f\u00a0\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043d\u0435\u00a0\u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0430\u0436\u043d\u044b\u00a0\u2014 \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u043b\u0438\u0441\u044c \u0438 \u043d\u0435\u00a0\u0440\u0430\u0437\u0431\u0435\u0436\u0430\u043b\u0438\u0441\u044c. \u0423\u00a0\u043c\u0435\u043d\u044f \u043e\u043d\u0438 \u0431\u0435\u0433\u0430\u044e\u0442 \u0441\u00a0\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435\u043c.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/041\/40d\/84c\/04140d84c4e11774ecc4b8c7123238bd.webp\" width=\"780\" height=\"780\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/041\/40d\/84c\/04140d84c4e11774ecc4b8c7123238bd.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/041\/40d\/84c\/04140d84c4e11774ecc4b8c7123238bd.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0430\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u0447\u044e\u0432\u0430\u043a\u0430\u043c\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0438\u0442\u0438. \u0412\u0441\u0451 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u00a0\u043c\u043e\u0437\u0433\u0430\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u044d\u0442\u043e\u0433\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u0432\u0438\u0434\u0438\u0442.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/733\/a95\/cd6\/733a95cd68a377ca709de23665883dee.webp\" width=\"780\" height=\"780\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/733\/a95\/cd6\/733a95cd68a377ca709de23665883dee.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/733\/a95\/cd6\/733a95cd68a377ca709de23665883dee.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e: \u043d\u0430\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0446\u0432\u0435\u0442\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432\u0434\u043e\u043b\u044c \u044d\u0442\u0438\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0438\u0442\u0435\u0439 \u0438 \u0442\u0443\u043f\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0438\u0445 \u043d\u0430\u00a0\u043b\u0435\u043d\u0442\u044b \u0432\u00a0\u0442\u043e\u043c\u00a0\u0436\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0432\u00a0\u043a\u0430\u043a\u043e\u043c \u0441\u0447\u0438\u0442\u0430\u043b\u0438. \u0412\u0441\u0451. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/70b\/0fd\/14f\/70b0fd14f53d95a6c679de4a2cec8213.webp\" width=\"780\" height=\"780\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/70b\/0fd\/14f\/70b0fd14f53d95a6c679de4a2cec8213.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/70b\/0fd\/14f\/70b0fd14f53d95a6c679de4a2cec8213.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0443 \u0441\u0430\u043c\u0443\u044e \u0448\u0442\u0443\u043a\u0443:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/306\/9ed\/73a\/3069ed73a2d8bd1a13b6ca68c3994964.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/306\/9ed\/73a\/3069ed73a2d8bd1a13b6ca68c3994964.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/306\/9ed\/73a\/3069ed73a2d8bd1a13b6ca68c3994964.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0431\u0443\u043b\u043a\u0438 \u0441 \u0447\u044e\u0432\u0430\u043a\u0430\u043c\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">public enum DudeComboMode {     Replace,     Multiplication,     Add, } public class \u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u0412\u0430\u043b\u044c\u0441 {     const int LEDCount = 2315;      static readonly ReadOnlySet&lt;string&gt; supportedImageExtensions = new(\"png,jpg,bmp,wmf\".Split(',').Select(a =&gt; '.' + a).ToHashSet());     static readonly ThreadLocal&lt;Random&gt; _rnd = new ThreadLocal&lt;Random&gt;(() =&gt; new Random());     static Random rnd =&gt; _rnd.Value;      public \u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u0412\u0430\u043b\u044c\u0441()     {         calculatedColorsBooffer1 = new Frame(Installation);         calculatedColorsBooffer2 = new Frame(Installation);     }      \/\/\u0427\u044e\u0432\u0430\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u0443\u043b\u044f\u044e\u0442 \u043f\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435     \/\/\u043c\u0435\u0436\u0434\u0443 \u0447\u044e\u0432\u0430\u043a\u0430\u043c\u0438 \u043d\u0430\u0442\u044f\u043d\u0443\u0442\u044b \u043d\u0438\u0442\u0447\u043e\u043a\u0438     \/\/\u043f\u043e \u043d\u0438\u043c \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u043d\u0430 \u043b\u0435\u043d\u0442\u044b     readonly List&lt;dude&gt; dudes = new();      \/\/\u0431\u0443\u0444\u0435\u0440\u044b \u0434\u043b\u044f \u0446\u0432\u0435\u0442\u043e\u0432     readonly Frame calculatedColorsBooffer1; \/\/\u0442\u0443\u0442 \u0432\u0441\u0451 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u043f\u043e\u0442\u043e\u043c \u0441 \u043b\u043e\u043a\u043e\u043c \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 2     readonly Frame calculatedColorsBooffer2; \/\/\u043e\u0442\u0441\u044e\u0434\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0432 \u043a\u0430\u0434\u0440 \u0441 \u043b\u043e\u043a\u043e\u043c       [Combo(\"\u0420\u0435\u0436\u0438\u043c \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u044f\")]     public DudeComboMode ComboMode { get; set; } = DudeComboMode.Replace;      [Slider(\"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0447\u044e\u0432\u0430\u043a\u043e\u0432\", 3, 20)]     public int WalkerCount { get; set; } = 11;      [Slider(\"\u0412\u0435\u0440. \u0441\u043c\u0435\u043d\u044b \u043d\u0430\u043f\u0440.\", 0, 0.1)]     public double DirectionChangeProbability { get; set; } = 0.01;      [TextBox(\"\u041f\u0443\u0442\u044c \u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435\")]     public string ImageAddress { get; set; } = \"ambigirl.jpg\";      [Slider(\"\u041c\u0430\u043a\u0441. \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c: #,## \u043f\u0438\u043a\u0441\/\u0441\u0435\u043a\", 0, 10)]     public double MaxSpeed { get; set; } = 2;      [Slider(\"\u041c\u0430\u043a\u0441. \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435: #,## \u043f\u0438\u043a\u0441\/\u0441\u0435\u043a\u00b2\", 0, 5)]     public double MaxAcceleration { get; set; } = 0.3;      [Slider(\"\u0413\u0430\u043c\u043c\u0430: #,##\", 0.3, 3)]     public double Gamma { get; set; } = 1;      [Slider(\"\u0423\u0441\u0438\u043b\u0435\u043d\u0438\u0435 \u044f\u0440\u043a\u043e\u0441\u0442\u0438: #,#%\", 0, 500)]     public double BrightnessPercent { get; set; } = 100;      [Slider(\"\u041e\u0442\u0441\u0435\u0447\u043a\u0430 \u043c\u0438\u043d. \u044f\u0440\u043a\u043e\u0441\u0442\u0438: #,#%\", 0, 100)]     public double MinBrightnessPercent { get; set; } = 0;     [Slider(\"\u041e\u0442\u0441\u0435\u0447\u043a\u0430 \u043c\u0430\u043a\u0441. \u044f\u0440\u043a\u043e\u0441\u0442\u0438: #,#%\", 0, 100)]     public double MaxBrightnessPercent { get; set; } = 100;      [CheckBox(\"\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043b\u0438\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u043c\")]     public bool FillAtBegin { get; set; } = false;     [Color(\"\u0426\u0432\u0435\u0442 \u0437\u0430\u043b\u0438\u0432\u043a\u0438\")]     public float3 FillColor { get; set; } = float3.Gold;      [CheckBox(\"\u0418\u043d\u0435\u0440\u0442\u043d\u043e\u0441\u0442\u044c\")]     public bool UseInertion = true;      [Slider(\"\u0421\u0442\u0435\u043f\u0435\u043d\u044c \u0438\u043d\u0435\u0440\u0446\u0438\u0438: #,#%\", 0, 100)]     public double InertionPercent { get; set; } = 90;      string oldImageAddress = \"\";     ClassicBitmap32? bitmap = null;      public void Background()     {         var needReinit = recreateBitmapIfNeed();          updateDudeCount();          if (needReinit)             initAllDudes();          foreach (var dude in dudes)             dude.applySettings(MaxSpeed, MaxAcceleration);          foreach (var dude in dudes)             dude.Move();          scanImage();     }      private void initAllDudes()     {         foreach (var dude in dudes)             dude.Init(rnd, bitmap, MaxAcceleration);     }      private void updateDudeCount()     {         while (dudes.Count &lt; WalkerCount)         {             var dude = new dude();             dude.Init(rnd, bitmap, MaxAcceleration);             dudes.Add(dude);         }         while (dudes.Count &gt; WalkerCount)             dudes.RemoveAt(dudes.Count - 1);     }      private bool recreateBitmapIfNeed()     {         bool needReinit = false;         var currentImageAddress = ImageAddress;         if (!string.IsNullOrWhiteSpace(currentImageAddress))             if (currentImageAddress != oldImageAddress)             {                 while (currentImageAddress.Length &gt; 0 &amp;&amp; currentImageAddress[0] is ' ' or '\\\"' or '\\t' or '\\'')                     currentImageAddress = currentImageAddress[1..];                 while (currentImageAddress.Length &gt; 0 &amp;&amp; currentImageAddress[^1] is ' ' or '\\\"' or '\\t' or '\\'')                     currentImageAddress = currentImageAddress[..^1];                 if (File.Exists(currentImageAddress))                 {                     var ext = Path.GetExtension(currentImageAddress).ToLower();                     if (supportedImageExtensions.Contains(ext))                     {                         bitmap?.DisposeProtected();                         bitmap = ClassicBitmap32.FromFile(currentImageAddress);                         needReinit = true;                         ImageAddress = oldImageAddress = currentImageAddress;                     }                 }             }          return needReinit;     }      private void scanImage()     {         if (bitmap?.IsDisposed != false)             return;         using var ds = bitmap.DisposeProtectedScope;         if (ds.IsFailed(false))             return;          int outputColorIndex = 0;         for (int dudeIndex = 0; dudeIndex &lt; dudes.Count; dudeIndex++)         {             var dude = dudes[dudeIndex];             var nextDude = dudes[(dudeIndex + 1) % dudes.Count];              var ledsPerDude = LEDCount \/ dudes.Count;             if (dudeIndex == dudes.Count - 1)                 ledsPerDude += (LEDCount - LEDCount \/ dudes.Count * dudes.Count);              var from = dude.Location;             var to = nextDude.Location;             var step = (to - from) \/ ledsPerDude;             for (int ledIndex = 0; ledIndex &lt; ledsPerDude; ledIndex++)             {                 double2 cords = from + step * ledIndex;                 var color = bitmap.GetSampleAbsolute((float2)cords);                 calculatedColorsBooffer1[outputColorIndex++] = color.bgr;             }         }         Peperubka.Mul(calculatedColorsBooffer1, 1.0f \/ 255);         Peperubka.Pow(calculatedColorsBooffer1, (float3)(1.0f \/ Gamma), true);         Peperubka.Mul(calculatedColorsBooffer1, (float3)BrightnessPercent * 0.01f);         Peperubka.Clamp(calculatedColorsBooffer1, (float3)Pepe.Min(MaxBrightnessPercent, MinBrightnessPercent) * 0.01f, (float3)Pepe.Max(MaxBrightnessPercent, MinBrightnessPercent) * 0.01f);          if (UseInertion)             calculatedColorsBooffer1.Mul(1.0f - (float)InertionPercent * 0.01f);          lock (calculatedColorsBooffer2)         {             if (UseInertion)             {                 calculatedColorsBooffer2.Mul((float)InertionPercent * 0.01f);                 calculatedColorsBooffer2.Add(calculatedColorsBooffer1);             }             else                 calculatedColorsBooffer2.TryCopyFrom(calculatedColorsBooffer1);         }     }     public void Process(Frame frame)     {         if (FillAtBegin)             frame.Fill(FillColor);          lock (calculatedColorsBooffer2)         {             switch (ComboMode)             {                 case DudeComboMode.Replace:                     frame.CopyFrom(calculatedColorsBooffer2);                     break;                 case DudeComboMode.Multiplication:                     frame.Mul(calculatedColorsBooffer2);                     break;                 case DudeComboMode.Add:                     frame.Add(calculatedColorsBooffer2);                     break;             }         }     }      class dude     {         public double2 Location, Speed, Acceleration;         public double MaxSpeed, MaxAcceleration;         public double4 CanvasBounds = (0, 0, 1920, 1080);         public double4 CanvasBorderBounces = 0.9;          public void SelectRandomAcceleration()         {             Acceleration = double2.FromAngleAndRadius(rnd.NextTurns(), MaxAcceleration);         }         public void Move()         {             Speed += Acceleration;             Speed = Pepe.Clamp(Pepe.Abs(Speed), 0, Pepe.Abs(MaxSpeed)) * Pepe.Sign(Speed);             Location += Speed;             for (int i = 0; i &lt; 2; i++)             {                 if (Location[i] &lt; CanvasBounds[i])                 {                     Location[i] = CanvasBounds[i];                     Speed[i] *= -1;                     Speed[i] *= CanvasBorderBounces[i];                     Acceleration[i] *= -1;                 }                 else if (Location[i] &gt; CanvasBounds[i + 2])                 {                     Location[i] = CanvasBounds[i + 2];                     Speed[i] *= -1;                     Speed[i] *= CanvasBorderBounces[i + 2];                     Acceleration[i] *= -1;                 }             }         }          internal void Init(Random rnd, ClassicBitmap32? bitmap, double maxAcceleration)         {             if (bitmap?.IsDisposed != false)                 return;              using var ds = bitmap.DisposeProtectedScope;             if (ds.IsFailed())                 return;              MaxAcceleration = maxAcceleration;             CanvasBounds = (0, 0, (double2)(bitmap.SizeInt - 1));             Location = rnd.NextDouble2() * CanvasBounds.Size + CanvasBounds.Location;             Speed = double2.FromAngleAndRadius(rnd.NextDegreeds(), MaxSpeed);             SelectRandomAcceleration();         }          internal void applySettings(double maxSpeed, double maxAcceleration)         {             MaxSpeed = maxSpeed;             MaxAcceleration = maxAcceleration;         }     }      public void Dispose()     {         bitmap?.DisposeProtected();         calculatedColorsBooffer1?.DisposeProtected();         calculatedColorsBooffer2?.DisposeProtected();     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439, \u043d\u043e\u00a0\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u00a0\u2014 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f, \u043f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043e\u043b\u043d.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/252\/9a0\/1d4\/2529a01d4304d23ab3da576e100f59e8.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/252\/9a0\/1d4\/2529a01d4304d23ab3da576e100f59e8.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/252\/9a0\/1d4\/2529a01d4304d23ab3da576e100f59e8.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<div class=\"floating-image\">\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e. \u041f\u043e\u00a0\u0437\u0435\u0440\u043d\u0443, \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u043c\u0443 \u0432\u00a0\u043f\u043e\u043b\u0435 <strong>Seed<\/strong>, \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u043e\u043b\u043d <span class=\"habrahidden\">(\u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u00a0\u0437\u0435\u0440\u043d\u043e\u043c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430\u00a0\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043a\u0430\u0440\u0442 \u0432\u00a0Minecraft)<\/span>. \u041a\u0430\u0436\u0434\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u0446\u0432\u0435\u0442, \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u0443, \u0447\u0430\u0441\u0442\u043e\u0442\u0443, \u0444\u0430\u0437\u0443 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0439 \u0444\u0430\u0437\u044b.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eea\/7f1\/4b1\/eea7f14b1b3d8f6656c707d59137c7d3.webp\" alt=\"https:\/\/synergy.ru\/akademiya\/design\/chto_takoe_czvetovoj_krug_ittena\" title=\"https:\/\/synergy.ru\/akademiya\/design\/chto_takoe_czvetovoj_krug_ittena\" width=\"1560\" height=\"1097\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/eea\/7f1\/4b1\/eea7f14b1b3d8f6656c707d59137c7d3.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eea\/7f1\/4b1\/eea7f14b1b3d8f6656c707d59137c7d3.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><a href=\"https:\/\/synergy.ru\/akademiya\/design\/chto_takoe_czvetovoj_krug_ittena\" rel=\"noopener noreferrer nofollow\">https:\/\/synergy.ru\/akademiya\/design\/chto_takoe_czvetovoj_krug_ittena<\/a><\/figcaption><\/div>\n<\/figure>\n<p>\u0426\u0432\u0435\u0442\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u00a0\u0441\u043e\u0432\u0441\u0435\u043c \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u043e\u00a0\u2014 \u0432\u044b\u0441\u043e\u043a\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e (\u043d\u043e \u043d\u0435\u00a0\u0432\u0441\u0435\u0433\u0434\u0430), \u043e\u0442\u0442\u0435\u043d\u043a\u0438 \u0446\u0432\u0435\u0442\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0434\u0435\u043b\u0430\u0442\u044c\u0441\u044f \u00b1\u0441\u043e\u0447\u0435\u0442\u0430\u0435\u043c\u044b\u043c\u0438 \u043f\u043e\u00a0\u043a\u0440\u0443\u0433\u0443 \u0418\u0442\u0442\u0435\u043d\u0430\u00a0\u2014 \u0442\u0440\u0438\u0430\u0434\u044b, \u043e\u043f\u043f\u043e\u0437\u0438\u0442\u044b, \u043a\u043e\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u0438 \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u0441\u0451 + \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u0442\u0435\u043d\u043a\u0430. \u0412\u043e\u043b\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u044d\u0442\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u00a0\u043a\u043e\u043d\u0442\u0443\u0440 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043b\u0435\u043d\u0442. \u0414\u043b\u044f\u00a0\u0431\u043b\u0438\u0436\u043d\u0435\u0433\u043e \u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0441\u0432\u0435\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432.<\/p>\n<\/div>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/472\/27a\/130\/47227a1305ece3e8331f86a0471739db.webp\" width=\"780\" height=\"440\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/472\/27a\/130\/47227a1305ece3e8331f86a0471739db.webp 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/472\/27a\/130\/47227a1305ece3e8331f86a0471739db.webp 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u043c, \u043d\u043e\u00a0\u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u00a0\u0437\u0435\u0440\u043d\u043e\u043c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u0442.\u043a. \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0432\u043e\u043b\u043d \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u00a0\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 &#171;\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f&#187;<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">public class \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f {     class WaveGenerator     {         public radians Phase, PhaseSpeed;         public float3 Amplitude;         public float Frequency;         public void AddTo(SpanConture conture, float3 K)         {             try             {                 radians phase = Phase;                 radians step = 2 * Pepe.Pi \/ conture.LEDCount * Frequency;                 for (int i = 0; i &lt; conture.LEDCount; i++)                 {                     conture[i] += (float)(0.5 + 0.5 * Pepe.Sin(phase)) * Amplitude * K;                     phase += step;                 }             }             finally             {                 Phase += PhaseSpeed;             }         }         public void Randomize(Random rnd)         {             Amplitude = float3.HSLtoRGB((rnd.NextTurns(), 1, 0.5f));              Frequency = (float)(Pepe.Pow(rnd.NextDouble(), 2) * 11) + 0.001f;             for (int i = 0; i &lt; 2; i++)                 if (rnd.NextDouble() &gt; 0.95)                     Frequency *= 10;              Phase = rnd.NextTurns();             PhaseSpeed = 0.01 * Pepe.Pow(rnd.NextDouble(), 2) + 0.02;             PhaseSpeed *= Frequency;             if (rnd.NextDouble() &gt; 0.98)                 PhaseSpeed *= rnd.Next(1, 5);              if (rnd.NextDouble() &gt; 0.5)                 PhaseSpeed *= -1;         }     }     class WaveGeneratorPack     {         readonly List&lt;WaveGenerator&gt; generators = new();         int _generatorCount = 5;         public int GeneratorCount         {             get =&gt; _generatorCount;             private set             {                 if (value &gt; 256)                     value = 256;                 while (generators.Count &lt; value)                     generators.Add(new WaveGenerator());                 while (generators.Count &gt; value &amp;&amp; generators.Count &gt; 0)                     generators.RemoveAt(generators.Count - 1);             }         }          void correctHue(Random rnd)         {             if (rn<br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/902040\/\"> https:\/\/habr.com\/ru\/articles\/902040\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p><a href=\"https:\/\/raw.githubusercontent.com\/VBDUnit\/images_and_code_store\/refs\/heads\/main\/CSharp%205%2016.webp\" rel=\"noopener noreferrer nofollow\">16K<\/a><\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0447\u0430\u0441\u0442\u0435\u0439<\/summary>\n<div class=\"spoiler__content\">\n<ol>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/678248\/\" rel=\"noopener noreferrer nofollow\">\u041c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0432\u0438\u0434\u0435\u043e\u0441\u0442\u0435\u043d\u0430 \u0441 \u044f\u0434\u0435\u0440\u043d\u044b\u043c Ambilight \u043d\u0430 2300 \u0437\u043e\u043d<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/682140\/\" rel=\"noopener noreferrer nofollow\">\u0422\u0412 \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430: HDR, 120 \u0413\u0446 \u0438 \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u0441\u0451<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/687782\/\" rel=\"noopener noreferrer nofollow\">\u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0434\u0438\u0441\u043f\u043b\u0435\u0438. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/751264\/\" rel=\"noopener noreferrer nofollow\">\u0423\u0447\u0438\u043c \u0442\u0440\u0438 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u043b\u043d\u044b\u0448\u043a\u043e<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/895340\/\" rel=\"noopener noreferrer nofollow\">\u042f\u0434\u0435\u0440\u043d\u0430\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0434\u043b\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0432\u0438\u0434\u0435\u043e\u0441\u0442\u0435\u043d\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/899556\/\" rel=\"noopener noreferrer nofollow\">\u0416\u0433\u0451\u043c-\u0448\u044c\u0451\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0438 \u043a\u043e\u0440\u043c\u0438\u043c \u044f\u0434\u0435\u0440\u043d\u0443\u044e \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443<\/a><\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0436\u0438\u0433\u0430\u0435\u043c \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434 \u0446\u0432\u0435\u0442\u043e\u0432 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u043c \u0441\u0442\u0440\u043e\u043a<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u0415<\/summary>\n<div class=\"spoiler__content\"><a class=\"anchor\" name=\"%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" id=\"\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\">\u0430\u043d\u0438\u0435&#187;><\/a><\/p>\n<h2>\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u0437\u043e\u0440<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9%D0%A1%D0%BE%D1%84%D1%82\" rel=\"noopener noreferrer nofollow\">\u041d\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9A%D0%B0%D0%BA%D0%AD%D1%82%D0%BE%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82\" rel=\"noopener noreferrer nofollow\">\u0427\u0442\u043e \u043e\u043d \u0443\u043c\u0435\u0435\u0442<\/a><\/p>\n<\/li>\n<\/ul>\n<h2>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9F%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D0%9A%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0445\u043e\u0434 \u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%AD%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%D0%91%D0%B0%D0%B7%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0411\u0430\u0437\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9F%D0%B5%D0%BF%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B\" rel=\"noopener noreferrer nofollow\">\u041f\u0435\u043f\u0435\u043a\u0442\u043e\u0440\u044b!<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%AD%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%D0%91%D1%83%D1%84%D0%B5%D1%80%D1%8B\" rel=\"noopener noreferrer nofollow\">\u0411\u0443\u0444\u0435\u0440\u044b \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%AD%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%D0%9F%D0%B5%D0%BF%D0%B5%D1%80%D1%83%D0%B1%D0%BA%D0%B0\" rel=\"noopener noreferrer nofollow\">\u041f\u0435\u043f\u0435\u0440\u0443\u0431\u043a\u0430 \u0438 \u0441\u0438\u043c\u0434\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F%D0%A1%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C\" rel=\"noopener noreferrer nofollow\">\u0413\u0430\u043c\u043c\u0430 \u0438 \u0430\u043f\u0440\u0433\u0435\u0439\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%86%D0%B8%D0%B8\" rel=\"noopener noreferrer nofollow\">\u0423\u0440\u043e\u0432\u043d\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9C%D0%B8%D0%BB%D0%BB%D0%B8%D0%B0%D1%80%D0%B4%D0%A6%D0%B2%D0%B5%D1%82%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u041c\u0438\u043b\u043b\u0438\u0430\u0440\u0434 \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 HDR \u043d\u0430 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u043b\u0435\u043d\u0442\u0430\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%91%D1%83%D0%BB%D0%BE%D1%87%D0%BA%D0%B8\" rel=\"noopener noreferrer nofollow\">\u0410\u043c\u043e\u0440\u0444\u043d\u044b\u0439 \u0441\u043e\u0444\u0442 \u0438 \u043d\u043e\u0432\u0430\u044f \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9%D0%A1%D1%82%D0%BE%D0%BB\" rel=\"noopener noreferrer nofollow\">\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C\" rel=\"noopener noreferrer nofollow\">\u041c\u043d\u043e\u0433\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u043e\u0441\u0442\u044c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9F%D0%BE%D0%BB%D0%B8%D0%B3%D0%BB%D0%BE%D1%82%D0%BD%D1%8B%D0%B9%D0%9A%D0%BE%D0%B4\" rel=\"noopener noreferrer nofollow\">\u0422\u0440\u0438\u043f\u043e\u043b\u0438\u0433\u043b\u043e\u0442\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%AF%D0%B4%D1%80%D0%BE\" rel=\"noopener noreferrer nofollow\">\u042f\u0434\u0440\u043e \u0441\u043e\u0444\u0442\u0430<\/a><\/p>\n<\/li>\n<\/ul>\n<h2>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f 2315 \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0438\u0445 \u0431\u043b\u0438\u043a\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%93%D1%80%D0%B0%D1%84%D0%B8%D0%BA\" rel=\"noopener noreferrer nofollow\">\u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u0442\u043e\u043a\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9A%D0%B0%D0%BD%D0%B0%D0%BB%D1%8B%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82%D1%8B%D0%9A%D0%BE%D0%B4%D0%9B%D0%BE%D0%B3%D0%B8\" rel=\"noopener noreferrer nofollow\">\u041a\u0430\u043d\u0430\u043b\u044b, \u044d\u0444\u0444\u0435\u043a\u0442\u044b, \u043a\u043e\u0434 \u0438 \u043b\u043e\u0433\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%9A%D0%BE%D0%B4%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043a\u043e\u0434\u0430, \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0438 \u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442<\/a><\/p>\n<\/li>\n<\/ul>\n<h2>\u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%9D%D0%B0%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%BA\" rel=\"noopener noreferrer nofollow\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%97%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p>\u0412\u043e\u0442 \u043c\u044b \u0438 \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0434\u043e <strong>\u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/strong>, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u00a0\u0434\u0435\u043b\u0430\u043b <strong>\u0441\u043e\u0444\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439<\/strong> \u0432\u043e\u043a\u0440\u0443\u0433 \u0442\u0440\u0451\u0445 \u0442\u0435\u043b\u0438\u043a\u043e\u0432. \u0411\u0443\u0434\u0443\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u0441\u0443\u0440\u043e\u0432\u044b\u0435 SIMD\u2011\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u0430\u043f\u0433\u0440\u0435\u0439\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438, \u043d\u043e\u0432\u0430\u044f <span class=\"habrahidden\">(\u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435)<\/span> \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0432\u044b\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u044b, \u043c\u043d\u043e\u0433\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u043e\u0441\u0442\u044c, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u043b\u0438\u0433\u043b\u043e\u0442\u043d\u044b\u0439 \u043a\u043e\u0434, \u0449\u0435\u043f\u043e\u0442\u043a\u0430 GUI \u0438 \u0435\u0449\u0451 \u043a\u0443\u0447\u0430 \u0432\u0441\u0435\u0433\u043e.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0432\u00a0\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e\u00a0\u0436\u0435\u043b\u0435\u0437\u043e: \u043a\u0430\u043a <a href=\"https:\/\/habr.com\/ru\/articles\/751264\/\" rel=\"noopener noreferrer nofollow\">\u0432\u0435\u0448\u0430\u043b \u0442\u0435\u043b\u0438\u043a\u0438<\/a>, \u0434\u0435\u043b\u0430\u043b <a href=\"https:\/\/habr.com\/ru\/articles\/895340\/\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u043c\u044b \u0434\u043b\u044f\u00a0\u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/899556\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043b\u044f\u00a0\u043b\u0435\u043d\u0442<\/a>.<\/p>\n<hr\/>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <strong>\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u044b\u0439 \u0441\u043e\u0444\u0442 <\/strong>\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u043b\u0438\u043b \u043d\u0430\u00a0\u043a\u043e\u043b\u0435\u043d\u043a\u0435 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u00a0\u043d\u0435\u0434\u0435\u043b\u044e. \u041e\u043d \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b,\u00a0\u0431\u044b\u043b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u0440\u0443\u043b\u0438\u043b \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439, \u043d\u043e\u00a0\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0430\u043c\u0438. \u042f \u0434\u0430\u0436\u0435 \u0437\u0430\u0441\u0443\u043d\u0443\u043b \u0442\u0443\u0434\u0430 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u044d\u043a\u0432\u0430\u043b\u0430\u0439\u0437\u0435\u0440, \u043f\u0440\u0430\u0432\u0434\u0430 \u043f\u043e\u00a0\u0444\u0430\u043a\u0442\u0443 \u043e\u043d \u043d\u0435\u00a0\u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0441\u044f. <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u0442\u0430\u0440\u044b\u0439 \u0441\u043e\u0444\u0442<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u044d\u0442\u0430 \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u0430\u044f \u043d\u0430\u00a0\u043a\u043e\u043b\u0435\u043d\u043a\u0435 \u0448\u0442\u0443\u043a\u0430 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u043b\u0430 \u043f\u043b\u043e\u0445\u043e. \u0413\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430\u00a0\u0436\u0435\u043b\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435\u0433\u043e, \u0430\u00a0\u043a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u044f\u043b\u0430 \u0431\u043e\u043b\u044c. \u0414\u0430\u00a0\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u044d\u043a\u0440\u0430\u043d\u0430 \u0442\u0443\u0442\u00a0\u0431\u044b\u043b \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435\u00a0\u0441\u0430\u043c\u044b\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c. <\/p>\n<p>\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u0438 \u0432\u043e\u0442 \u043e\u043f\u044f\u0442\u044c\u00a0\u2014 \u043d\u0430\u0434\u043e \u0432\u0441\u0451 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c. \u042f \u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041d\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0435\u043b\u0430\u043b \u044f \u0435\u0433\u043e \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u0432 2022\u20132024\u00a0\u0433\u043e\u0434\u0430\u0445, \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441\u00a0\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0435\u0439 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430. \u042d\u0442\u043e \u0443\u0436\u0435 \u043f\u043e\u043b\u043d\u043e\u0432\u0435\u0441\u043d\u043e\u0435 \u041f\u041e\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439 \u043d\u0430\u00a0\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043c\u0438\u043d\u0438\u2011\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435\u00a0\u2014 \u043e\u0442\u00a0\u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 SIMD\u2011\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0434\u043e\u00a0\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 IDE.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p><a class=\"anchor\" name=\"%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9%D0%A1%D0%BE%D1%84%D1%82\" id=\"\u041d\u043e\u0432\u044b\u0439\u0421\u043e\u0444\u0442\">\u0421\u043e\u0444\u0442&#187;<\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<h2>\u041d\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442<\/h2>\n<p>\u041d\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0438\u0431\u0440\u0438\u0434\u043e\u043c \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f.<\/p>\n<div class=\"floating-image\">\n<figure class=\"float\"><\/figure>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043d\u043e\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u0441\u043a\u0443\u0447\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0444\u0442 \u0441\u0442\u0430\u043b \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u043c \u0434\u043b\u044f <s>\u043e\u0442\u0441\u0442\u0440\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0433<\/s> \u0440\u0430\u0437\u043d\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0430\u043f\u0440\u043e\u0431\u0430\u0446\u0438\u0438 \u0438\u0434\u0435\u0439\u00a0\u2014 \u043a\u0430\u043a\u00a0\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445, \u0442\u0430\u043a \u0438 \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445\u00a0\u2014 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0434\u0430\u0432\u043d\u043e \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c. \u041e\u0442\u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d \u0432\u0441\u0451 \u0435\u0449\u0451 \u0432\u00a0\u0441\u0442\u0430\u0434\u0438\u0438 \u0430\u043b\u044c\u0444\u0430\u2011\u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u043e\u00a0\u043c\u043d\u0435 \u043d\u043e\u0440\u043c \ud83d\ude42<\/p>\n<\/div>\n<p>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043f\u043b\u043e\u0442\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445, \u043d\u043e\u00a0\u0438 \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u043e\u0434\u0438\u043b \u0441\u00a0\u043d\u0443\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0438 \u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u043d\u0430\u00a0\u043d\u0451\u043c \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u043e\u0444\u0442. <\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0421\u0442\u0430\u0440\u044b\u0439<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041d\u043e\u0432\u044b\u0439<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u043d\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u043c\u0435\u0440 \u0434\u0438\u043e\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u043d\u0430\u0435\u0442 \u043e\u00a0\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0438\u043e\u0434\u0430, \u043d\u0430\u00a0\u043a\u0430\u043a\u043e\u043c \u043e\u043d \u044d\u043a\u0440\u0430\u043d\u0435 \u0438 \u0432\u00a0\u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u043c\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442, \u0445\u0440\u0430\u043d\u0438\u0442 \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u0430\u043d\u0430\u043b\u044b \u0446\u0432\u0435\u0442\u0430 RGB \u043a\u0430\u043a \u0446\u0435\u043b\u044b\u0435 8 \u0431\u0438\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442, \u0445\u0440\u0430\u043d\u0438\u0442 \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u0430\u043d\u0430\u043b\u044b \u0446\u0432\u0435\u0442\u0430 RGB \u043a\u0430\u043a <strong>\u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 32\u00a0\u0431\u0438\u0442\u0430<\/strong> <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0422\u043e\u043b\u044c\u043a\u043e SDR, \u0432\u044b\u0448\u0435 100% \u043d\u0435 \u043f\u0440\u044b\u0433\u043d\u0435\u0448\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0423\u043c\u0435\u0435\u0442 \u0432\u00a0HDR: <\/strong>\u043f\u0440\u0438\u00a0\u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u044d\u043a\u0440\u0430\u043d\u0430, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u0434\u0430\u0436\u0435 \u0432\u044b\u0432\u043e\u0434\u0435, \u0437\u0430\u0436\u0438\u0433\u0430\u044f \u043b\u0435\u043d\u0442\u0443 \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u00ab\u044f\u0440\u0447\u0435 100%\u00bb \u0438 \u00ab\u0442\u0443\u0441\u043a\u043b\u0435\u0435 1\/255\u00bb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u042d\u0444\u0444\u0435\u043a\u0442\u044b \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0436\u0435\u0441\u0442\u043a\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432, \u0438\u0445 \u043a\u043e\u0434 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 SDR \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439, \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0448\u0438\u043d\u0443 \u0432 \u041e\u0417\u0423 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u044f\u043c\u043e\u0442\u043e\u0447\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 HDR \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043f\u0440\u044f\u043c\u043e \u043d\u0430\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0435 \u0431\u0435\u0437\u00a0\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0439 \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u0441\u00a0\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u043c\u0438, \u0432\u00a0\u041e\u0417\u0423 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e 37\u00a0\u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 <\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430\u00a0\u0441\u0432\u043e\u044e C#\u043e\u0432\u043e\u0441\u0442\u044c, \u0441\u043e\u0444\u0442 \u043f\u0440\u043e\u043d\u0438\u0437\u0430\u043d \u0440\u0443\u0447\u043d\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430\u043c\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438 \u043e\u0447\u0435\u043d\u044c \u0437\u043b\u044b\u043c\u0438, \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0438 \u0431\u0435\u0441\u043f\u043e\u0449\u0430\u0434\u043d\u044b\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u0440\u0443\u043a\u0438 \u0447\u0435\u0441\u0430\u043b\u0438\u0441\u044c. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0431\u0435\u0437\u00a0\u0433\u0440\u0430\u0444\u0438\u043a\u0438, HLSL \u0438 C++ \u0442\u043e\u0436\u0435 \u043d\u0435\u00a0\u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c. <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u043b\u0435\u0448\u0441\u043a\u0440\u0438\u043d<\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"%D0%9A%D0%B0%D0%BA%D0%AD%D1%82%D0%BE%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82\" id=\"\u041a\u0430\u043a\u042d\u0442\u043e\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442\">\u0431\u043e\u0442\u0430\u0435\u0442&#187;><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<h2>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h2>\n<p>\u041a\u0430\u043a\u00a0\u0432\u0438\u0434\u0435\u043e\u043c\u0438\u043a\u0448\u0435\u0440. \u041d\u0443 \u0438\u043b\u0438\u00a0\u0441\u043e\u0444\u0442 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0432\u0438\u0434\u0435\u043e\u00a0\u2014 <strong>\u044d\u0444\u0444\u0435\u043a\u0442\u044b<\/strong>, <strong>\u043a\u0430\u043d\u0430\u043b\u044b<\/strong>, \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u0441\u0451. \u0422\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0434\u0440\u044b\u2011\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0442\u0443\u0442 \u043d\u0435\u00a0\u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0435, \u043a\u0430\u043a\u00a0\u0432\u00a0\u0432\u0438\u0434\u0435\u043e, \u0430\u00a0\u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0435\u00a0\u2014 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0435 \u043b\u0435\u043d\u0442\u044b\u00a0\u0436\u0435. \u0412\u00a0\u043e\u0431\u0449\u0435\u043c, \u043c\u044b \u043a\u0430\u043a\u2011\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0441\u044f\u043a\u0438\u0445 \u0448\u0442\u0443\u043a <strong> 1D \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/strong>, \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0438\u0445 \u043d\u0430\u00a0\u043b\u0435\u043d\u0442\u044b. 60\u00a0\u0440\u0430\u0437 \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041d\u0443 \u0438\u043b\u0438\u00a0\u043e\u043a\u043e\u043b\u043e \u0442\u043e\u0433\u043e.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041a\u0430\u043a? \u041d\u0443, \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <strong><u>\u043a\u0430\u043d\u0430\u043b\u043e\u0432<\/u><\/strong>. \u041a\u0430\u0436\u0434\u044b\u0439 <strong>\u043a\u0430\u043d\u0430\u043b\u00a0\u2014 \u044d\u0442\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/strong> \u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e <strong><u>1D\u2011\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/u><\/strong>, \u0432\u044b\u0432\u043e\u0434\u0438\u043c\u043e\u0439 \u043d\u0430\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443. \u0422\u044b\u043a\u0430\u0435\u043c \u0432\u00a0\u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b\u00a0\u2014 \u043e\u043d \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u00a0\u043b\u0435\u043d\u0442\u044b. \u0412\u0441\u0451. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0432\u043d\u043e\u0435. <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u043d\u0430\u043b\u0430\u043c\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u0442\u044c <strong>\u043a\u0430\u043d\u0430\u043b \u00ab\u0421\u043a\u0430\u043d \u044d\u043a\u0440\u0430\u043d\u0430\u00bb<\/strong> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e \u0441\u0430\u043c\u043e\u0435 <strong>\u00ab\u0440\u0430\u0441\u043f\u043b\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d\u0435 \u043d\u0430\u00a0\u0441\u0442\u0435\u043d\u044b\u00bb <\/strong>\u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0438\u0433\u0440 \u0438 \u0444\u0438\u043b\u044c\u043c\u043e\u0432, \u0430\u00a0\u0435\u0441\u0442\u044c <strong>\u043a\u0430\u043d\u0430\u043b\u044b<\/strong>, \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0441\u0442\u0438: \u0441\u0432\u0435\u0440\u043a\u0430\u043d\u0438\u0435, \u0440\u0430\u0434\u0443\u0433\u0438\u2011\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0438\u0435 \u043d\u0438\u0448\u0442\u044f\u043a\u0438 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u042d\u0442\u0438 \u043a\u0430\u043d\u0430\u043b\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0440\u0438\u0441\u0443\u043d\u043e\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0438\u043a\u0430\u043a \u043d\u0435\u00a0\u0441\u043e\u043e\u0442\u043d\u043e\u0441\u044f\u0441\u044c \u0441\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d\u0435.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u00a0\u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u043a\u043d\u0430 \u0432\u0438\u0434\u043d\u043e \u0442\u043e, \u0447\u0442\u043e\u00a0\u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u00a0\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0435 \u043b\u0435\u043d\u0442\u044b, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u043f\u0438\u0442\u0430\u043d\u0438\u044f. <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u0440\u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0438\u0433\u0440\u044b \u0438\u043b\u0438\u00a0\u0444\u0438\u043b\u044c\u043c\u0430 \u0441\u043e\u0444\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u0441\u043a\u0430\u043d \u044d\u043a\u0440\u0430\u043d\u0430, \u043f\u0440\u0438\u00a0\u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438\u00a0\u2014 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p><strong>\u041a\u0430\u043d\u0430\u043b\u044b <\/strong>\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0443\u0434\u0430\u043b\u044f\u0442\u044c, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u043c\u044f. \u041f\u0440\u0438\u00a0\u0449\u0435\u043b\u0447\u043a\u0435 \u043f\u043e\u00a0\u043a\u0430\u043d\u0430\u043b\u0443 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u00a0\u0435\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u044b, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u00a0\u044d\u0442\u0438\u043c \u0432\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u0442\u0438\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0438 \u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 <strong>\u043a\u0430\u043d\u0430\u043b <\/strong>\u2014 \u044d\u0442\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430 <strong><u>\u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 <\/u><\/strong>\u2014 \u0448\u0442\u0443\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0442\u043e\u2011\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u00a0\u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043e\u043d\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u00a0\u043b\u0435\u043d\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0446\u0432\u0435\u0442\u043e\u043c, \u043f\u043e\u0442\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0438\u044f\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u043d\u043e\u0441\u0438\u043c \u043b\u0451\u0433\u043a\u0438\u0439 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442. <\/p>\n<figure class=\"full-width\"><\/figure>\n<p><strong>\u042d\u0444\u0444\u0435\u043a\u0442\u044b <\/strong>\u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c, \u0443\u0434\u0430\u043b\u044f\u0442\u044c, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u043c\u044f, \u0430\u00a0\u0435\u0449\u0451\u00a0\u2014 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 <strong>\u043a\u0430\u043d\u0430\u043b<\/strong>, \u043d\u0430\u043f\u0438\u0445\u0430\u0442\u044c \u0432\u00a0\u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. \u0413\u00a0\u2014 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0415\u0449\u0451 \u0435\u0441\u0442\u044c \u043e\u0441\u043e\u0431\u044b\u0439 <strong>\u043a\u0430\u043d\u0430\u043b \u0432\u044b\u0432\u043e\u0434\u0430<\/strong>\u00a0\u2014 \u0442\u0443\u0442 \u0442\u043e\u0436\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u00a0\u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435, \u043a\u0430\u043a\u043e\u0439\u00a0\u0431\u044b \u043a\u0430\u043d\u0430\u043b \u043d\u0435\u00a0\u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044f\u0440\u043a\u043e\u0441\u0442\u0438, \u0432\u044b\u0432\u043e\u0434 \u0441\u0432\u0435\u0442\u043e\u0440\u0438\u0441\u0443\u043d\u043a\u0430 \u043d\u0430\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441\u00a0\u043b\u0435\u043d\u0442\u0430\u043c\u0438, \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0448\u0442\u0443\u043a\u0438. <strong>\u042d\u0444\u0444\u0435\u043a\u0442\u044b <\/strong>\u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043a\u043e\u0440\u043e\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0442\u0443\u0442 \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u0435\u043b\u0430\u044e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u044b. \u0421\u043a\u0430\u043d \u044d\u043a\u0440\u0430\u043d\u0430\u00a0\u2014 <strong>\u044d\u0444\u0444\u0435\u043a\u0442<\/strong>, \u0432\u044b\u0432\u043e\u0434 \u043d\u0430\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u00a0\u2014 <strong>\u044d\u0444\u0444\u0435\u043a\u0442<\/strong>, \u0434\u0430\u0436\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043f\u0440\u0438\u0432\u043e\u0434\u0430\u043c\u0438 \u0442\u0435\u043b\u0438\u043a\u043e\u0432\u00a0\u2014 \u044d\u0442\u043e <strong>\u044d\u0444\u0444\u0435\u043a\u0442<\/strong>.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412\u0441\u0451 \u0435\u0441\u0442\u044c <strong>\u044d\u0444\u0444\u0435\u043a\u0442<\/strong>. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0439, \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u0439 \u043a\u0430\u043a\u00a0\u0445\u043e\u0447\u0435\u0448\u044c, \u043f\u0438\u0445\u0430\u0439 \u0432\u00a0\u043a\u0430\u043d\u0430\u043b\u044b\u00a0\u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0439 \u0441\u0432\u0435\u0440\u043a\u0430\u043d\u0438\u0435. \u0422\u0430\u043a\u0430\u044f \u0432\u043e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430. <\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0432\u0441\u044f\u043a\u0438\u0445 \u0440\u0430\u0434\u0443\u0433, \u0441\u0432\u0435\u0440\u043a\u0430\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043f\u0435\u0440\u0435\u043b\u0438\u0432\u043e\u0432, \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u043b\u0438\u043a\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 <strong>\u043d\u0430\u0439\u0442\u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043a\u0443\u0440\u0441\u043e\u0440<\/strong> \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d\u0435\u00a0\u2014 \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0418\u0420\u041b \u043e\u043d\u043e \u0441\u0432\u0435\u0442\u0438\u0442 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u0435\u0435, \u0442\u0443\u0442 \u0432\u0441\u0451 \u0432\u044b\u043a\u0440\u0443\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438. \u0418 \u043a\u0443\u0440\u0441\u043e\u0440\u044b \u0432 10 \u0441\u043c \u044f \u0442\u043e\u0436\u0435 \u043d\u0435\u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \ud83d\ude42  <\/figcaption><\/div>\n<\/figure>\n<p>\u0410\u00a0\u0442\u0443\u0442 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u0440\u0435\u043d\u0438\u0435\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0433\u0434\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u044f \u0434\u0432\u0438\u0436\u0443\u0445\u0430. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 <strong>HDR <\/strong>\u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0431\u043b\u0438\u043a \u043b\u0435\u0433\u043a\u043e\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043a\u0430\u043a\u043e\u0433\u043e\u2011\u0442\u043e <u>\u043e\u0434\u043d\u043e\u0433\u043e<\/u> \u0434\u0438\u043e\u0434\u0430 \u043d\u0430 1000%.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u044b\u0448\u0435\u043a, \u0442\u043e \u0431\u043b\u0438\u043a \u043f\u043e\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c, \u0434\u043b\u044f\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0430\u0434\u043e \u0434\u043e\u043a\u0430\u043f\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e <a href=\"https:\/\/www.mousemux.com\/\" rel=\"noopener noreferrer nofollow\">MouseMux<\/a>\u00a0\u2014 \u0441\u043e\u0444\u0442\u0430 \u0434\u043b\u044f\u00a0\u043c\u043d\u043e\u0433\u043e\u043c\u044b\u0448\u0435\u0447\u043d\u043e\u0441\u0442\u0438. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0441\u0432\u044f\u0437\u0430\u043b\u0441\u044f \u0441\u00a0\u0430\u0432\u0442\u043e\u0440\u043e\u043c, \u0438 \u043e\u043d \u0434\u0430\u043b \u043c\u043d\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043a\u00a0SDK, \u0442\u0430\u043a \u0447\u0442\u043e\u00a0\u0434\u0435\u043b\u043e \u0437\u0430\u00a0\u043c\u0430\u043b\u044b\u043c \ud83d\ude42<\/p>\n<p>\u0422\u0430\u00a0\u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e\u00a0\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u043e\u043a\u043d\u0430\u043c\u0438\u00a0\u2014 \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0433\u0434\u0435 \u043e\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0420\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e: \u0435\u0441\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430\u00a0\u043e\u043a\u043d\u0430\u043c\u0438, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0442 \u0432\u0441\u043f\u044b\u0448\u043a\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u00a0\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0433\u0434\u0435 \u043e\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u043b\u043e\u0441\u044c. <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u043e\u043e\u0431\u0449\u0430\u0435\u043c \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0437\u0440\u0435\u043d\u0438\u044e, \u0447\u0442\u043e \u0442\u0443\u0442 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u043a\u043e\u043d\u043d\u044b\u0439 \u0431\u043b\u0438\u043a\u00a0\u0431\u044b\u043b \u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f, \u043d\u043e\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430, \u0447\u0442\u043e\u00a0\u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043a\u043d\u0430, \u0438 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0438 \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u0430\u0436\u043d\u0435\u0435 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430 \u0435\u0441\u0442\u044c \u0438 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438: \u0440\u0443\u0441\u0441\u043a\u0430\u044f \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c, \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0430\u044f\u00a0\u2014 \u0441\u0438\u043d\u0438\u043c. <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0431\u043e\u043a\u043e\u0432\u044b\u0435 \u0442\u0435\u043b\u0438\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b, \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043b\u0438\u043a \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0433\u043b\u0443\u0448\u0430\u0435\u0442 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443 \u043f\u043e\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441\u00a0\u0431\u043e\u043a\u043e\u0432\u044b\u043c\u0438\u00a0\u2014 \u043e\u043d \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u043b\u0438\u0436\u0435 \u043a\u00a0\u0441\u0442\u0435\u043d\u0435. \u0410\u00a0\u0435\u0441\u043b\u0438 \u0442\u0435\u043b\u0438\u043a\u0438 \u0437\u0430\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u0434\u043e\u043b\u044c \u0441\u0442\u0435\u043d\u044b, \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u00a0\u0443\u0440\u043e\u0432\u043d\u044f \u0431\u043e\u043a\u043e\u0432\u0443\u0448\u0435\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0442\u0440\u0438 \u0441\u0432\u0435\u0442\u0438\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e. \u0412\u0441\u0451 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u043a\u043e\u0435\u2011\u0447\u0442\u043e. \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044f \u0441\u00a0\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u0432\u0435\u0442\u043e\u0432\u044b\u043c\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u043c\u0438, \u043c\u043d\u0435 \u043d\u0430\u0434\u043e\u0435\u043b\u043e \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u043b\u0430\u0437\u0438\u0442\u044c \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0432\u00a0VisualStudio.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u00a0\u043d\u043e\u0432\u043e\u043c \u0441\u043e\u0444\u0442\u0435 \u0443\u00a0\u043b\u044e\u0431\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c <strong>\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/strong> \u043f\u0440\u044f\u043c\u043e \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u0432\u00a0\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. \u0421\u00a0\u0430\u0432\u0442\u043e\u043a\u043e\u043c\u043f\u043b\u0438\u0442\u043e\u043c \u0438 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e,<strong> \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u00a0\u2014 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u043a\u043e\u0434<\/strong>. \u0412\u00a0\u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u043d\u0435\u00a0\u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438\u2011\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u0430\u00a0\u043e\u0441\u043e\u0431\u044b\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438\u00a0\u2014 <strong>\u0431\u0443\u043b\u043e\u0447\u043a\u0430\u043c\u0438<\/strong>. \u041d\u043e\u00a0\u043e\u0431\u043e\u00a0\u0432\u0441\u0451\u043c \u043f\u043e\u00a0\u043f\u043e\u0440\u044f\u0434\u043a\u0443. <\/p>\n<p><a class=\"anchor\" name=\"%D0%9F%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D0%9A%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8\" id=\"\u041f\u043e\u0434\u0445\u043e\u0434\u041a\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438\">\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438&#187;><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/902040\/#%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u041a\u00a0\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u042e \/\\<\/a><\/p>\n<h2>\u041f\u043e\u0434\u0445\u043e\u0434 \u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>\u041f\u043e\u0434\u0445\u043e\u0434 \u043a\u00a0\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430\u00a0\u0432\u0441\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0441\u043e\u0444\u0442\u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u0434\u043e\u043d\u0438\u0437\u0443. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u044f \u0441\u0435\u0431\u0435 \u044d\u0442\u043e \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u0430\u043a\u2011\u0442\u043e \u0442\u0430\u043a:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"144\" width=\"144\">\n<p align=\"left\">\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u0430\u043a \u0441\u0435\u0431\u044f \u0432\u0435\u0434\u0451\u0442 \u0441\u043e\u0444\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"144\" width=\"144\">\n<p align=\"left\"><strong>\u0418\u0433\u0440\u0430\u0435\u043c (\u0430\u043d\u0430\u043b\u0438\u0437 12\u041a \u044d\u043a\u0440\u0430\u043d\u0430 + \u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 \u2192 0%, \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430\u00a0\u043f\u0440\u043e\u0446 \u2192 0%, \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u041e\u0417\u0423 \u2192 0\u00a0\u0413\u0446<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"144\" width=\"144\">\n<p align=\"left\">\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c, \u0441\u043e\u0444\u0442 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438 \u0441\u0432\u0451\u0440\u043d\u0443\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 \u2192 0%, \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430\u00a0\u043f\u0440\u043e\u0446 &lt; 5%, \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u041e\u0417\u0423 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"144\" width=\"144\">\n<p align=\"left\">\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0441\u043e\u0444\u0442\u043e\u043c \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430\u00a0\u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 &lt; 15%, \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430\u00a0\u043f\u0440\u043e\u0446 &lt; 15%, \u041e\u0417\u0423 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u00a0\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041a\u043e\u0433\u0434\u0430 \u0441\u043e\u0444\u0442 \u043d\u0435\u00a0\u0442\u0440\u043e\u0433\u0430\u044e\u0442, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0436\u0440\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043c\u0435\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c \u0438 \u0438\u0433\u0440\u0430\u043c. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u0433\u0440\u0430\u043c.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0442\u0443\u0442 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0430\u044f \u0432\u0435\u0449\u044c. \u042d\u0442\u043e \u00b1 \u0440\u0435\u0430\u043b\u0442\u0430\u0439\u043c\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0441\u043f\u0435\u0432\u0430\u0442\u044c 40\u201360\u00a0\u0440\u0430\u0437 \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0430\u00a0\u043b\u0435\u043d\u0442\u044b. \u0410\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043e\u043d \u043d\u0430\u00a0\u0421#, \u0443\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u0441\u0451 \u0447\u0438\u0441\u0442\u0438\u0442\u044c. \u0412\u00a0\u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0443\u0442 \u043b\u0430\u0433\u0438, \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0435\u00a0\u0441\u043f\u0430\u0441\u0443\u0442, \u0447\u0442\u043e\u00a0\u0431\u044b \u0442\u0430\u043c \u043d\u0435\u00a0\u043e\u0431\u0435\u0449\u0430\u043b\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f (\u044f \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435\u00a0\u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 <s>\u0435\u043c \u044d\u0442\u043e\u0442 \u043a\u0430\u043a\u0442\u0443\u0441<\/s> \u0434\u0435\u043b\u0430\u044e \u0440\u0435\u0430\u043b\u0442\u0430\u0439\u043c\u043e\u0432\u044b\u0439 \u0441\u043e\u0444\u0442 \u043d\u0430\u00a0C#). \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u0442\u0438\u043c \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c \u043c\u0443\u0441\u043e\u0440\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043e\u0434\u043d\u043e: <s>\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u00a0\u0421++ \u043a\u0430\u043a\u00a0\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u044e<\/s> \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u043f\u0440\u043e\u0432\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u00a0\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0443\u0441\u043e\u0440:\u00a0\u043b\u0438\u0431\u043e \u043d\u0435\u00a0\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439 \u043e\u0431\u044a\u0435\u043a\u0442,\u00a0\u043b\u0438\u0431\u043e, \u0435\u0441\u043b\u0438 \u0443\u0436 \u0441\u043e\u0437\u0434\u0430\u043b\u00a0\u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0435\u0433\u043e<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-467507","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/467507","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=467507"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/467507\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=467507"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=467507"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=467507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}