рд╕рд░реНрд╡реНрд╣рд░-рд╕рд╛рдЗрдб JavaScript Node.js 17.0 рд░рд┐рд▓реАрдЬ

Node.js 17.0, JavaScript рдордзреНрдпреЗ рдиреЗрдЯрд╡рд░реНрдХ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо, рд░рд┐рд▓реАрдЬ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛. Node.js 17.0 рд╣реА рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рдорд░реНрдерди рд╢рд╛рдЦрд╛ рдЖрд╣реЗ рдЬреА рдЬреВрди 2022 рдкрд░реНрдпрдВрдд рдЕрджреНрдпрддрдиреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдд рд░рд╛рд╣реАрд▓. рдпреЗрддреНрдпрд╛ рдХрд╛рд╣реА рджрд┐рд╡рд╕рд╛рдВрдд, Node.js 16 рд╢рд╛рдЦреЗрдЪреЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдкреВрд░реНрдг рдХреЗрд▓реЗ рдЬрд╛рдИрд▓, рдЬреНрдпрд╛рд▓рд╛ LTS рджрд░реНрдЬрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдИрд▓ рдЖрдгрд┐ рдПрдкреНрд░рд┐рд▓ 2024 рдкрд░реНрдпрдВрдд рд╕рдорд░реНрдерд┐рдд рдЕрд╕реЗрд▓. Node.js 14.0 рдЪреНрдпрд╛ рдкреВрд░реНрд╡реАрдЪреНрдпрд╛ LTS рд╢рд╛рдЦреЗрдЪреА рджреЗрдЦрднрд╛рд▓ рдПрдкреНрд░рд┐рд▓ 2023 рдкрд░реНрдпрдВрдд рдЖрдгрд┐ рд╢реЗрд╡рдЯрдЪреА LTS рд╢рд╛рдЦрд╛ 12.0 рдЪреНрдпрд╛ рдЖрдзреАрдЪреНрдпрд╛ рд╡рд░реНрд╖реА рдПрдкреНрд░рд┐рд▓ 2022 рдкрд░реНрдпрдВрдд рдЪрд╛рд▓реЗрд▓.

рдкреНрд░рдореБрдЦ рд╕реБрдзрд╛рд░рдгрд╛:

  • V8 рдЗрдВрдЬрд┐рди рдЖрд╡реГрддреНрддреА 9.5 рд╡рд░ рдЕрдкрдбреЗрдЯ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ.
  • рдкреНрд░реЙрдорд┐рд╕ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрдВрдкреНрдпреБрдЯрд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдореВрд▓рднреВрдд API рдЪреНрдпрд╛ рд░реВрдкрд╛рдВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдЪрд╛рд▓реВ рдареЗрд╡рд▓реА рдЖрд╣реЗ. рдкреВрд░реНрд╡реА рдСрдлрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЯрд╛рдЗрдорд░ рдкреНрд░реЙрдорд┐рд╕реЗрд╕ рдЖрдгрд┐ рд╕реНрдЯреНрд░реАрдореНрд╕ рдкреНрд░реЙрдорд┐рд╕реЗрд╕ API рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, Node.js 17.0 рд░реАрдбрд▓рд╛рдЗрди рдореЙрдбреНрдпреВрд▓рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдбреЗрдЯрд╛ рд▓рд╛рдЗрди рд╡рд╛рдЪрдгреНрдпрд╛рд╕рд╛рдареА рд░реАрдбрд▓рд╛рдЗрди рдкреНрд░реЙрдорд┐рд╕ API рд╕рд╛рджрд░ рдХрд░рддреЗ. 'node:readline/promises' рд╡рд░реВрди * рд░реАрдбрд▓рд╛рдЗрди рдореНрд╣рдгреВрди рдЖрдпрд╛рдд рдХрд░рд╛; 'рдкреНрд░реЛрд╕реЗрд╕'рдордзреВрди { stdin рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди, рдЖрдЙрдЯрдкреБрдЯ рдореНрд╣рдгреВрди stdout} рдЖрдпрд╛рдд рдХрд░рд╛; const rl = readline.createInterface({ рдЗрдирдкреБрдЯ, рдЖрдЙрдЯрдкреБрдЯ }); const рдЙрддреНрддрд░ = рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛ rl.question('рддреБрдореНрд╣рд╛рд▓рд╛ Node.js рдмрджреНрджрд▓ рдХрд╛рдп рд╡рд╛рдЯрддреЗ?'); console.log('рддреБрдордЪреНрдпрд╛ рдореМрд▓реНрдпрд╡рд╛рди рдЕрднрд┐рдкреНрд░рд╛рдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж: ${answer}'); rl.close();
  • рдкреБрд░рд╡рд▓реЗрд▓реА OpenSSL рд▓рд╛рдпрдмреНрд░рд░реА рдЖрд╡реГрддреНрддреА 3.0 рд╡рд░ рдЕрдкрдбреЗрдЯ рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ (QUIC рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдорд░реНрдерди рд╕рдХреНрд╖рдо рдЕрд╕рд▓реЗрд▓рд╛ quictls/openssl рдлреЛрд░реНрдХ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ).
  • рд╕реНрдЯреЕрдХ рдЯреНрд░реЗрд╕рдордзреНрдпреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Node.js рдЖрд╡реГрддреНрддреА рд╕рдХреНрд╖рдо рдХреЗрд▓реА рдЬреА рдШрд╛рддрдХ рддреНрд░реБрдЯреАрдВрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдЖрдЙрдЯрдкреБрдЯ рдЖрд╣реЗ рдЬреНрдпрд╛рдореБрд│реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдорд╛рдкреНрдд рд╣реЛрддреЛ.

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣реА Node.js (CVE-2021-22959, CVE-2021-22960) рдЪреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рд╢рд╛рдЦрд╛рдВрдордзреАрд▓ рджреЛрди рднреЗрджреНрдпрддрд╛ рджреВрд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВ рд╢рдХрддреЛ, рдЬреНрдпрд╛рдореБрд│реЗ тАЬHTTP рд╡рд┐рдирдВрддреА рддрд╕реНрдХрд░реАтАЭ (HRS) рд╣рд▓реНрд▓реЗ рдХрд░рдгреЗ рд╢рдХреНрдп рд╣реЛрддреЗ. рдлреНрд░рдВрдЯрдПрдВрдб рдЖрдгрд┐ рдмреЕрдХрдПрдВрдб рджрд░рдореНрдпрд╛рди рд╕рдорд╛рди рдереНрд░реЗрдбрдордзреНрдпреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЗрддрд░ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рд╛рдордЧреНрд░реАрдордзреНрдпреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рд╡реЗрдЬ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг JavaScript рдХреЛрдб рджреБрд╕рд░реНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рд╕рддреНрд░рд╛рдд рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ). рддрдкрд╢реАрд▓ рдирдВрддрд░ рдЙрдШрдб рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓, рдкрд░рдВрддреБ рдЖрддреНрддрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рд╣реЗ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХреА HTTP рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЖрдгрд┐ рдХреЛрд▓рдирдордзреАрд▓ рд░рд┐рдХреНрдд рд╕реНрдерд╛рдирд╛рдВрдЪреНрдпрд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рд╣рд╛рддрд╛рд│рдгреАрдореБрд│реЗ, рддрд╕реЗрдЪ рдЯреНрд░рд╛рдиреНрд╕рдорд┐рдЯ рдХрд░рддрд╛рдирд╛ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░ рдмреНрд▓реЙрдХрдордзреАрд▓ рдХреЕрд░реЗрдЬ рд░рд┐рдЯрд░реНрди рдЖрдгрд┐ рд▓рд╛рдЗрди рдлреАрдб рд╡рд░реНрдгрд╛рдВрдЪреНрдпрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╣рд╛рддрд╛рд│рдгреАрдореБрд│реЗ рд╕рдорд╕реНрдпрд╛ рдЙрджреНрднрд╡рддрд╛рдд. "рдЪрдВрдХреНрдб" рдореЛрдбрдордзреАрд▓ рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рд╡рд┐рдирдВрддреА рдореБрдЦреНрдп рднрд╛рдЧ "

рдЖрдореНрд╣рд╛рд▓рд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡реВрдпрд╛ рдХреА Node.js рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рд╡реЗрдм рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░-рд╕рд╛рдЗрдб рд╕рдорд░реНрдердирд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд▓рд╛рдпрдВрдЯ рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреЛрдиреНрд╣реА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. Node.js рд╕рд╛рдареА рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдЪреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд╛рдврд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдореЙрдбреНрдпреВрд▓реНрд╕рдЪрд╛ рдПрдХ рдореЛрдард╛ рд╕рдВрдЧреНрд░рд╣ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рддреБрдореНрд╣рд╛рд▓рд╛ HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 рд╕рд░реНрд╡реНрд╣рд░ рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯрдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╣ рдореЙрдбреНрдпреВрд▓реНрд╕, рдПрдХрддреНрд░реАрдХрд░рдгрд╛рд╕рд╛рдареА рдореЙрдбреНрдпреВрд▓реНрд╕ рдорд┐рд│реВ рд╢рдХрддрд╛рдд. рд╡рд┐рд╡рд┐рдз рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХрд╕рд╣, WebSocket рдЖрдгрд┐ Ajax рд╣рдБрдбрд▓рд░реНрд╕, DBMS (MySQL, PostgreSQL, SQLite, MongoDB), рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрд┐рди, CSS рдЗрдВрдЬрд┐рди, рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЖрдгрд┐ рдЕрдзрд┐рдХреГрддрддрд╛ рдкреНрд░рдгрд╛рд▓реА (OAuth), XML рдкрд╛рд░реНрд╕рд░рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА.

рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рд╕рдорд╛рдВрддрд░ рд╡рд┐рдирдВрддреНрдпрд╛ рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА, Node.js рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдЗрд╡реНрд╣реЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЖрдгрд┐ рдХреЙрд▓рдмреЕрдХ рд╣рдБрдбрд▓рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдПрдХреНрдЭрд┐рдХреНрдпреВрд╢рди рдореЙрдбреЗрд▓ рд╡рд╛рдкрд░рддреЗ. рдорд▓реНрдЯрд┐рдкреНрд▓реЗрдХреНрд╕рд┐рдВрдЧ рдХрдиреЗрдХреНрд╢рдирд╕рд╛рдареА рд╕рдорд░реНрдерд┐рдд рдкрджреНрдзрддреАрдВрдордзреНрдпреЗ epoll, kqueue, /dev/poll рдЖрдгрд┐ рд╕рд┐рд▓реЗрдХреНрдЯ рдпрд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рд╣реЛрддреЛ. рдХрдиреЗрдХреНтАНрд╢рди рдорд▓реНрдЯрд┐рдкреНрд▓реЗрдХреНтАНрд╕рд┐рдВрдЧрд╕рд╛рдареА, libuv рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ, рдЬреА рдпреБрдирд┐рдХреНрд╕ рд╕рд┐рд╕реНтАНрдЯрдорд╡рд░ libev рдЖрдгрд┐ Windows рд╡рд░реАрд▓ IOCP рд╡рд░ рдЕреЕрдб-рдСрди рдЖрд╣реЗ. libeio рд▓рд╛рдпрдмреНрд░рд░реАрдЪрд╛ рд╡рд╛рдкрд░ рдереНрд░реЗрдб рдкреВрд▓ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ c-ares рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдореЛрдбрдордзреНрдпреЗ DNS рдХреНрд╡реЗрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХрддреНрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рдмреНрд▓реЙрдХрд┐рдВрдЧрд▓рд╛ рдХрд╛рд░рдгреАрднреВрдд рдЕрд╕рд▓реЗрд▓реЗ рд╕рд░реНрд╡ рд╕рд┐рд╕реНрдЯреАрдо рдХреЙрд▓ рдереНрд░реЗрдб рдкреВрд▓рдордзреНрдпреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдирдВрддрд░, рд╕рд┐рдЧреНрдирд▓ рд╣рдБрдбрд▓рд░реНрд╕рдкреНрд░рдорд╛рдгреЗ, рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХрд╛рдорд╛рдЪрд╛ рдирд┐рдХрд╛рд▓ рдЕрдЬреНрдЮрд╛рдд рдкрд╛рдИрдкрджреНрд╡рд╛рд░реЗ рдкрд░рдд рджреЗрддрд╛рдд. Google рдиреЗ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ V8 рдЗрдВрдЬрд┐рдирдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рджреНрд╡рд╛рд░реЗ JavaScript рдХреЛрдбрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ (рдпрд╛рд╢рд┐рд╡рд╛рдп, рдорд╛рдпрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдЪрдХреНрд░-рдХреЛрд░ рдЗрдВрдЬрд┐рдирд╕рд╣ Node.js рдЪреА рдЖрд╡реГрддреНрддреА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдд рдЖрд╣реЗ).

рддреНрдпрд╛рдЪреНрдпрд╛ рдореБрд│рд╛рдд, Node.js рд╣реЗ Perl AnyEvent, Ruby Event Machine, Python Twisted рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдгрд┐ Tcl рдордзреАрд▓ рдЗрд╡реНрд╣реЗрдВрдЯреНрд╕рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ Node.js рдордзреАрд▓ рдЗрд╡реНрд╣реЗрдВрдЯ рд▓реВрдк рд╡рд┐рдХрд╕рдХрд╛рдкрд╛рд╕реВрди рд▓рдкрд▓реЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рд╡реЗрдм рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреАрд▓ рдЗрд╡реНрд╣реЗрдВрдЯ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╛рд░рдЦреЗ рджрд┐рд╕рддреЗ. рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдЪрд╛рд▓реВ рдЖрд╣реЗ. node.js рд╕рд╛рдареА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд┐рд╣рд┐рддрд╛рдирд╛, рдЗрд╡реНрд╣реЗрдВрдЯ-рдЪрд╛рд▓рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, тАЬvar result = db.query(тАЬselect..тАЭ);тАЭ рдХрд░рдгреНрдпрд╛рдРрд╡рдЬреА. рдХрд╛рдо рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реВрди рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдорд╛рдВрдЪреНрдпрд╛ рддреНрдпрд╛рдирдВрддрд░рдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╣, Node.js рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреЗ рддрддреНрддреНрд╡ рд╡рд╛рдкрд░рддреЗ, рдЙрджрд╛. рдХреЛрдбрдЪреЗ рд░реВрдкрд╛рдВрддрд░ тАЬdb.query(тАЬselect..тАЭ, function (result) {result processing});тАЭ рдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдирд┐рдпрдВрддреНрд░рдг рддрд╛рдмрдбрддреЛрдм рдкреБрдвреАрд▓ рдХреЛрдбрдХрдбреЗ рдЬрд╛рдИрд▓ рдЖрдгрд┐ рдбреЗрдЯрд╛ рдЖрд▓реНрдпрд╛рд╡рд░ рдХреНрд╡реЗрд░реА рдирд┐рдХрд╛рд▓рд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реА рдЬрд╛рдИрд▓.

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛