рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреЛ рд▓реЗрдХрд░ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ - рд╡реЗрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдореЗрдВ рдЕрдиреБрднрд╡рд╣реАрди рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИред
рдореИрдВ рдХрдИ рдЪреАрдЬреЛрдВ рд╕реЗ рднреНрд░рдорд┐рдд рдерд╛ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг, рд▓реЙрдЧрд┐рди, рдЕрдзрд┐рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдореИрдВ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╣рд╛рдБ рд╕рдорд╛рдзрд╛рди рдореБрдЭреЗ рдЧреНрд░реЗрд▓реНрд╕ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛ред
рджреВрд╕рд░реА рдмрд╛рдд - рд╣реЛрд╕реНрдЯрд┐рдВрдЧред рдпрджрд┐ рдЖрдк рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЖрд░рд╛рдорджрд╛рдпрдХ рд╣реВрдВ, рддреЛ рдореИрдВ 1996 рд╕реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╣реВрдВ), рддреЛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдорд╣рдВрдЧреА рд╣реИред рдореИрдВ рдкреНрд░рдпреЛрдЧ рд╕реНрдерд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рдорд╛рд╣ 15-20 рдбреЙрд▓рд░ рдХрд╛ рднреБрдЧрддрд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ред рдпрд╣
Gaelyk рд╣реИ ред Google рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП Groovy рдврд╛рдВрдЪрд╛ред
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рджреЗрдЦреЗрдВред
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рдпрд╛
рдорд╛рд╡реЗрди рдЖрд░реНрдХрдЯрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдЧреНрд░реЗрдбреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдорд╛рд╡реЗрди рдХрд╛ рдирд╣реАрдВ, рдФрд░ рджреЛрдиреЛрдВ рд╣реА рдорд╛рдирдХ рдЧреНрд░реВрд╡реА рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХреНрд╕рд▓рд┐рдкреНрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдирд╣реАрдВ, рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдЯрдмреНрд╕ рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рджреЛрдиреЛрдВ рд╣реА Google рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдорд╛рд╡реЗрди рдХреА рд░рдЪрдирд╛ рдХреАред рдЖрдЗрдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдПрдХ Gaelyk рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ:
mvn archetype:generate -DarchetypeGroupId=org.bernshtam -DarchetypeArtifactId=gaelyk-archetype -DarchetypeRepository=http://bernshtam.name/maven2 -DgroupId=myexample -DartifactId=test1 -DarchetypeVersion=1.0
рдЕрдм рдЖрдк рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ IDEA рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк IDEA рдореЗрдВ рднреА рдПрдХ рд╢реНрд▓реЛрдХ рд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ):
рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ Facet Google App Engine рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:

рдЙрд╕рдХреЗ рдмрд╛рдж, рд▓реЙрдиреНрдЪ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬреЛрдбрд╝реЗрдВред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Google рдРрдк рдЗрдВрдЬрди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд┐рдЯ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдкрдХреА рдорд╢реАрди рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдИрдбреАрдИрдП (рдореИрдВрдиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рдмрдЯрди) рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИред рдЕрдиреНрдп рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рдорд╛рд╡реЗрди рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдИ рдЬрд╛рдПрдЧреАред


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

рдФрд░ рднрд╛рдЧреЛ!

рд╣реБрд░реНрд░реЗ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдиреЛрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ (рдиреЛрдЯреНрд╕ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ - рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ :))
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реИред
web.xml рдЧреНрд░реВрд╡рд▓реЗрдЯреНрд╕ рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ (gtpl) рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рдбрд╛рд▓рддрд╛ рд╣реИ
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"> <listener> <listener-class>groovyx.gaelyk.GaelykServletContextListener</listener-class> </listener> <servlet> <servlet-name>GroovletServlet</servlet-name> <servlet-class>groovyx.gaelyk.GaelykServlet</servlet-class> <init-param> <param-name>verbose</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>TemplateServlet</servlet-name> <servlet-class>groovyx.gaelyk.GaelykTemplateServlet</servlet-class> <init-param> <param-name>generated.by</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>verbose</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <filter> <filter-name>RoutesFilter</filter-name> <filter-class>groovyx.gaelyk.routes.RoutesFilter</filter-class> </filter> <servlet-mapping> <servlet-name>GroovletServlet</servlet-name> <url-pattern>*.groovy</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>TemplateServlet</servlet-name> <url-pattern>*.gtpl</url-pattern> </servlet-mapping> <filter-mapping> <filter-name>RoutesFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.gtpl</welcome-file> </welcome-file-list> </web-app>
Google рдРрдк рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП appengine-web.xml рд╣реИрдВрдбрд▓ред рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдРрдк рдЗрдВрдЬрди рдХрдВрд╕реЛрд▓ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдЕрдкрдиреЗ рдРрдк рдЗрдВрдЬрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде test1-archetype рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0-SNAPSHOT"> <application>test1-archetype</application> <version>1</version> <threadsafe>true</threadsafe> <system-properties> <property name="file.encoding" value="UTF-8"/> <property name="groovy.source.encoding" value="UTF-8"/> <property name="java.util.logging.config.file" value="WEB-INF/logging.properties" /> </system-properties> <precompilation-enabled>true</precompilation-enabled> <static-files> <exclude path="/WEB-INF/**.groovy" /> <exclude path="**.gtpl" /> </static-files> </appengine-web-app>
рдЕрдм рдЧреИрд▓реАрдХ рдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВред рдорд╛рд░реНрдЧреЛрдВ .groovy рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ рдЬреЛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╣рд╛рдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВ
get "/", redirect: "listnotes.groovy" get "/favicon.ico", redirect: "/images/favicon.png"
рдЧреИрд▓реАрдХ рдПрдХ рдПрдорд╡реАрд╕реА рдврд╛рдВрдЪрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрдХреНрд╕рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЦрд╛рдВрдЪреЗ рджреНрд╡рд╛рд░рд╛ рдЦреЗрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред Path.groovy рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдбреАрдПрд╕рдПрд▓ рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдЕрдм рдиреЛрдЯ рд╡рд░реНрдЧ рдХреЛ рджреЗрдЦреЗрдВ:
package myexample import groovyx.gaelyk.datastore.Entity import groovyx.gaelyk.datastore.Key import groovyx.gaelyk.datastore.Unindexed @Entity(unindexed=false) class Note { @Key long id String login @Unindexed int priority String text }
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Gaelyk Google App Engine datastore рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдХреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдПрдХ рдкреВрд░реНрдг ORM рдирд╣реАрдВ рд╣реИ, JPA рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдЖрдк рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
Note note = new Note(priority:priority, text: text, login: email) note.save() ... def note = Note.get(id) note.delete() .. def notes = Note.findAll { login == email }
рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг, рд╣реИ рдирд╛?
рдЕрдм рдЗрд╕реЗ рджреЗрдЦреЗрдВ:
def email = user.email ... log.fine("$notes ${notes.size()}") ... String text = request.getParameter("text")
рдЪрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЕрдиреБрд░реЛрдз рдФрд░ рд▓реЙрдЧ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рдЗрдВрдЬреЗрдХреНрд╢рди рд╣реИрдВ, рдЬреИрд╕реЗ рдХрдИ рдЕрдиреНрдпред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрд╢рдХреНрдд рд╣реЛрдЧрд╛ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд▓реЙрдЧрд┐рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрдЧрд╛ рдпрджрд┐ рдЙрд╕рдиреЗ рдХрд┐рдпрд╛ред рд▓реЙрдЧ рдореЗрдВ рдПрдХ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рд╣реЛрддрд╛ рд╣реИред
рдЕрдиреБрд░реЛрдз HttpRequest рд╣реИ
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░,
рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рддрдирд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд╣реИ (рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдореЗрдВ)
рдореЙрдбрд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рд╕реЗ рдЕрдиреБрд░реЛрдз рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
request['notes'] = notes forward "index.gtpl"
рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред рд╡реЗ jsp рдХреЗ рд╕рдорд╛рди рд╣реИрдВ,% рдореЗрдВ%, рдХреЛрдб рд╕рдореНрдорд┐рд▓рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
<% include '/WEB-INF/includes/header.gtpl' %> <h1>My notes</h1> <% if (user) { %> <p> <table width="50%" border="1"> <tr><th width="30%">Note</th><th>Priority</th><th></th></tr> <% request.notes.each { note -> %> <tr><td>${note.text}</td><td align="left"> ${note.priority}</td><td><A href="deletenote.groovy?id=${note.id}">X</A> </td></tr> <% } %> </table> </p> <div class="add"> <h2>Add a new note</h2> <p> <form name="addnote" action="addnote.groovy" method="post"> Priority: <input name="priority" id="priority" type="number" value="1" min="1" max="10"/><br/> <br/> Text: <input name="text" id="text" type="text"/> <input type="submit" value=" Add Note "/></form> </p> </div> <% } else { %> <p><A href="${users.createLoginURL("/")}">Login</A> </p> to access your notes <% } %> <% include '/WEB-INF/includes/footer.gtpl' %>
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ (
if (user)
) рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдореЙрдбрд▓ рдХреЛ рдЕрдиреБрд░реЛрдз (
request.notes.each
) рд╕реЗ рдмрд╛рд╣рд░ рдЦреАрдВрдЪрдХрд░, рд╢реИрд▓реА
${note.priority}
рдХреЗ рдЦрд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд▓реЙрдЧрд┐рди рдХрд╛ рд▓рд┐рдВрдХ рдмрдирд╛рдХрд░:
${users.createLoginURL("/")}
(рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдФрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИ)ред
рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд▓реЙрдЧрд┐рди рд╡рд╛рд▓рд╛ рдкреГрд╖реНрда Google App Engine рдореЗрдВ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рдмрд╛рдж рд╕рднреА рдкрд░ рдПрдХ рд╕рдорд╛рди рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреА рддрд░рд╣ рд╡рд┐рднрд┐рдиреНрди рдкрддреЗ рдХреЗ рддрд╣рдд рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдХрд┐рд╕реА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреА рддрд░рд╣
рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛, рддреЛ
рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ