рдлрд┐рд░ рд╕реЗ рдирдорд╕реНрдХрд╛рд░! рдПрдВрдбреНрд░реЙрдЗрдб рд╡рд┐рдХрд╛рд╕ рдкрд░ рдмреБрдирд┐рдпрд╛рджреА рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ, рд╣рдо рд▓реЗрдЦ рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ "рдХреЛрдЯрд▓рд┐рди рднрд╛рд╖рд╛ рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП 16 рд╡рд┐рдХрд╛рд╕ рдЯрд┐рдкреНрд╕" рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред
рдкрд╣рд▓рд╛ рднрд╛рдЧ рдкрдврд╝реЗрдВрджреВрд╕рд░рд╛ рднрд╛рдЧ рдкрдврд╝реЗрдВLATEINIT
рдХреЛрдЯрд▓рд┐рди рдХреА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╢реВрдиреНрдп рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рд╣реИред рд▓реЗрдЯреАрдирд┐рдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╢реВрдиреНрдп рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдорд╣рд╛рди рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕рдХреА рдЖрджрдд рдбрд╛рд▓ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рддреБрд░рдВрдд рдЕрд╢рдХреНрдд рд╣реЛрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
var total = 0 var toolbar: Toolbar? = null
рдпрд╣ рднрд╛рд╖рд╛ рдлрд╝рдВрдХреНрд╢рди рдПрдВрдбреНрд░реЙрдЗрдб рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓реЗрдЖрдЙрдЯ рдШреЛрд╖рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ
Activity
рдпрд╛
Fragment
рдореЗрдВ рдХрд╣рд╛рдБ рдореМрдЬреВрдж рд╣реЛрдВрдЧреЗред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рди рдкрд░ рдПрдХ рд╢реВрдиреНрдп рдорд╛рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдореБрдЖрд╡рдЬрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдмрд╡рд╛рд╕реАрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП,
lateinit
рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ:
lateinit var toolbar: Toolbar
рдЕрдм, рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рдЯреВрд▓рдмрд╛рд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд░рдВрднрд┐рдХ рди рд╣реЛред
рдмрдЯрд░ рдирд╛рдЗрдл рдЬреИрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдкрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
@BindView(R.id.toolbar) lateinit var toolbar: Toolbar override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) ButterKnife.bind(this)
рд╕реБрд░рдХреНрд╖рд╛ рд▓рд┐рдЦреЗрдВ
рдХреБрдЫ рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдорд┐рдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЗрдВ рдХреЛрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реАрдХрд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ FragmentManager рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдБрдЪ рд╢рд╛рдорд┐рд▓ рд╣реИред рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
var feedFragment: FeedFragment? = supportFragmentManager .findFragmentByTag(TAG_FEED_FRAGMENT) as FeedFragment . as , . : var feedFragment: FeedFragment? = supportFragmentManager .findFragmentByTag(TAG_FEED_FRAGMENT) as? FeedFragment if (feedFragment == null) { feedFragment = FeedFragment.newInstance() supportFragmentManager.beginTransaction() .replace(R.id.root_fragment, feedFragment, TAG_FEED_FRAGMENT) .commit() }
рдкрдЯреНрдЯреЗ рдкрд░ рджреЗрдирд╛
рдпрджрд┐ рд╡рд╕реНрддреБ рдХрд╛ рдореВрд▓реНрдп рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИ, рддреЛ рд▓реЗрд╡рд░реЗрдЬрд┐рдВрдЧ рдЖрдкрдХреЛ рдПрдХ рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЕрд╢рдХреНрдд рдЬрд╛рдВрдЪ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
if (currentUser != null) { text.setText(currentUser.name) } Kotlin : user?.let { println(it.name) }
рдпрд╣ рдХреЛрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИ, рд╕рд╛рде рд╣реА рдпрд╣ рд╢реВрдиреНрдп рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЗ рдмрд┐рдирд╛ рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рди рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЪрд░ рдмрдирд╛рддрд╛ рд╣реИред
SNULLOREMPTY | ISNULLORBLANK
рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╣рдореЗрдВ рдХрдИ рдмрд╛рд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдХреЛрдЯрд▓рд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж Android рдореЗрдВ TextUtils рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред TextUtils рд╡рд░реНрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
if (TextUtils.isEmpty(name)) {
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдХрд░реЗрдЧрд╛ред
TextUtils.isEmpty
рдФрд░
TextUtils.isEmpty
рднрд╛рд╖рд╛ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ,
TextUtils.isEmpty
(
TextUtils.isEmpty
) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЦреЗрддреЛрдВ рдореЗрдВ рднрд░рдиреЗ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдЕрдХреНрд╕рд░ рдЖрд╡реЗрджрди рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп рдкрд╛рдИ рдЬрд╛рддреА рд╣реИред рдпреЗ рдмрд┐рд▓реНрдЯ-рдЗрди рд╡рд┐рдзрд┐рдпрд╛рдБ рдХреНрд╖реЗрддреНрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реЛрдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдЪреЗрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рд╣реИрдВред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЬрд╛рдВрдЪреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдИрдореЗрд▓ рдкрддреЛрдВ рдХреЗ рд▓рд┐рдП:
fun TextInputLayout.isValidForEmail(): Boolean { val input = editText?.text.toString() if (input.isNullOrBlank()) { error = resources.getString(R.string.required) return false } else if (emailPattern.matcher(input).matches()) { error = resources.getString(R.string.invalid_email) return false } else { error = null return true } }
рдЙрдиреНрдирдд рдХреЗ рд▓рд┐рдП рдпреБрдХреНрддрд┐рдпрд╛рдБ
рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреНрд▓реАрдирд░ рдФрд░ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╢реНрд░реЛрддрд╛ рд╡рд░реНрдЧ рд╣реЛрдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдЬреИрд╕реЗ:
public interface OnClickListener { void onClick(View v); }
рдХреЛрдЯрд▓рд┐рди рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрдПрдо (рдПрдХрд▓ рд╕рд╛рд░ рд╡рд┐рдзрд┐) рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рдХреНрд▓рд┐рдХ рд╢реНрд░реЛрддрд╛ рдЬреЛ рджрд┐рдЦрддрд╛ рд╣реИ:
textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {
рд╡рд┐рдЪрд┐рддреНрд░ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдПрд╕рдПрдПрдо рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд░реВрдкрд╛рдВрддрд░рдг рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирдП рдХреЛрдЯрд▓рд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдирд┐рд░рд╛рд╢ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╢реНрд░реЛрддрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
view.setOnClickListener(object : OnClickListener { override fun onClick(v: View?) {
рдРрд╕реЗ рдХреЛрдб рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрдХреНрд╖рд╛ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
private var onClickListener: ((View) -> Unit)? = null fun setOnClickListener(listener: (view: View) -> Unit) { onClickListener = listener }
рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓реИрдореНрдмреНрдбрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдПрд╕рдПрдПрдо рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВрдиреЗ рдХреЛрдЯрд▓рд┐рди рднрд╛рд╖рд╛ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рднреА рд╕реАрдЦрд╛ рд╣реИ, рдЙрд╕рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдЬреАрд╡рди рд╣реИрдХ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрди рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЬреНрдЮрд╛рди рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рдорджрдж рдорд┐рд▓реЗрдЧреАред
рд╡рд╣ рд╕рдм рд╣реИред
рдХреЛрд░реНрд╕ рдкрд░
рдорд┐рд▓рддреЗ рд╣реИрдВ !