рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдЯрд╛рдЗрдк рдирд┐рд░реНрдорд╛рдг

рдорд▓реНрдЯреА-рд▓реЗрдпрд░ ("рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝") рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдЕрдХреНрд╕рд░ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ ValueObject



(рдпрд╛ рдХреЗрд╕ рдХреНрд▓рд╛рд╕реЗрд╕) рдХреЛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рд╕реА рднреА рдЗрдХрд╛рдИ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЧ



 case class Person(name: String, address: Address)
      
      







рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдЗрд╕ рддрд░реАрдХреЗ рдореЗрдВ рджреЛрдиреЛрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЧреБрдг рд╣реИрдВ:





рд╕рд╛рде рд╣реА рдХреБрдЫ рдиреБрдХрд╕рд╛рди:





рд╣рдо рдПрдХ рдРрд╕реА рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдирдИ "рдХрдХреНрд╖рд╛рдПрдВ" (рдкреНрд░рдХрд╛рд░, рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛, рдирдП рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдПрдВ) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА "рдИрдВрдЯреЛрдВ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ, рдЗрд╕ рддрдереНрдп рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЦреБрдж "рдИрдВрдЯ" рдмрдирд╛рддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдпреЛрдЧреА рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:





рдПрдХ рдирдП рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд░реНрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдк Person



рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ





Person



рд╡рд░реНрдЧ рдФрд░ рдЙрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ -





рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, "рдкреНрд░рдердо рд╢реНрд░реЗрдгреА" рдХрд╛ рд╕рд╛рд░ Person



рд╡рд░реНрдЧ Person



, рдФрд░ рдЗрд╕рдХреЗ рдЧреБрдг "рджреНрд╡рд┐рддреАрдп рд╢реНрд░реЗрдгреА" рдХрд╛ рд╕рд╛рд░ рд╣реИрдВред рд╡реЗ рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИред



рд╣рдо "рдкреНрд░рдердо рд╢реНрд░реЗрдгреА" рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдирдП "рд╡рд░реНрдЧ" рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рдЗрд╕рд▓рд┐рдП, name



рд╕рдВрдкрддреНрддрд┐ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:



 trait SlotId[T] case class SlotIdImpl[T](slotId:String, ...) extends SlotId[T] def slot[T](slotId:String, ...) = SlotIdImpl[T](slotId, ...) val name = slot[String]("name", ...)
      
      







рдЗрд╕ рддрд░рд╣ рдХреА рдШреЛрд╖рдгрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЦреБрдж рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореЗрдЯрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдмрд╛рд╣рд░реА рдорд╛рдирдЪрд┐рддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдпрд╛ рдЗрд╕реЗ рд╕реАрдзреЗ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреБрдЫ рд╕рд░рд▓реАрдХреГрдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред



рд╕реНрд▓реЙрдЯ рдХреНрд░рдо



рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдСрд░реНрдбрд░ рдХреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рдХрдИ рдЧреБрдг рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░реЛрдВ рд╕реЗ рдмрдирд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ рдХрд┐ HList рдкреНрд░рдХрд╛рд░ (рдЕрджреНрднреБрдд рдЖрдХрд╛рд░рд╣реАрди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)ред



 sealed trait SlotSeq { type ValueType <: HList } case object SNil extends SlotSeq { type ValueType = HNil } case class ::[H<:SlotId, T<:SlotSeq](head:H, tail : T) extends SlotSeq { type ValueType = H :: T#ValueType }
      
      







рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЧреБрдгреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдо рдЧреБрдгреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди ( ValueType



) рднреА ValueType



рд╣реИрдВред



рд╕рдВрдкрддреНрддрд┐ рд╕рдореВрд╣рди



рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╕ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдХрд░ред рд╣рд╛рд▓рд╛рдВрдХрд┐, "рд╕рдореВрд╣реЛрдВ" рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ - рдПрдХ рд╣реА рд╡рд░реНрдЧ / рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЧреБрдгреЛрдВ рдХреЗ рд╕реЗрдЯред



 object PersonType { val name = slot[String]("name", ...) val address ... ... }
      
      







рдпрд╣ рд╕рдореВрд╣реАрдХрд░рдг рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ "рдХреНрд▓рд╕реНрдЯрд░реНрд╕" рдореЗрдВ рд╕рдорд╛рди рдЧреБрдгреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



 trait Identifiable { val id = slot[Long]("id") } object Employee extends Identifiable
      
      







рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, "рдХреНрд▓рд╕реНрдЯрд░" рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреА рдореЗрдЯрд╛-рд╕реВрдЪрдирд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХрд╡рд░рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдореЗрдЯрд╛-рд╕реВрдЪрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдмрджрд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред



рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐



рджрд░рдЕрд╕рд▓, рдПрдХ рдЗрдХрд╛рдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рджреЛ рдореБрдЦреНрдп рд░реВрдкреЛрдВ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: Map



рдпрд╛ RecordSet



ред Map



- рдореЗрдВ рд╕рдВрдкрддреНрддрд┐-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрдмрдХрд┐ RecordSet



рдореЗрдВ рдЧреБрдгреЛрдВ рдХреА рдПрдХ рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА рдФрд░ рд╕рдорд╛рди рдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред RecordSet



рдЖрдкрдХреЛ рдЖрд░реНрдерд┐рдХ рд░реВрдк рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ Map



рдЖрдкрдХреЛ "рд╕реНрд╡рдпрдВ рдореЗрдВ рдПрдХ рдЪреАрдЬрд╝" рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдПрдХ рдЕрд▓рдЧ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рднреА рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред рдЗрди рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдЬрд░реВрд░рддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



RecordSet



рдХреЗ рддрд╛рд░ рдХреЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрджреНрднреБрдд HList



рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЖрдХрд╛рд░рд╣реАрди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)ред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕реБрд╕рдВрдЧрдд HList



рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрд░реНрдбрд░ рдХрд┐рдП рдЧрдП рд╕реНрд▓реЙрдЯ рдЕрдиреБрдХреНрд░рдо рдХреЛ HList



ред



 type ValueType = head.Type :: tail.ValueType
      
      







рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ Map



рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Map



рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп Entry



рдХреНрд▓рд╛рд╕ рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ SlotValue



рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛,



 case class SlotValue[T](slot:SlotId[T], value:T)
      
      







рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдПрдХ рд╕рдВрдЧрдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред Map



рд╕реНрд╡рдпрдВ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╕рд░рд▓рддрдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк SlotValue



рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдирд┐рдпрдорд┐рдд рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖



рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдмреБрдирд┐рдпрд╛рджреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреБрдирд┐рдпрд╛рджреА рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВред





рдРрд╕реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рд╖рдо рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:



рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдХрд╛рд░рдг, рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рднреА рдкрд╣рд▓реБрдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред



рд╡рд░реНрдгрд┐рдд рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб ред

UPD: рд╡рд┐рд╖рдп рдХреА рдирд┐рд░рдВрддрд░рддрд╛: рдЕрдзреВрд░реЗ рдбреЗрдЯрд╛ рдХреЗ рдХрдбрд╝рд╛рдИ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡



All Articles