Очень больший метод, лучше разбить на несколько.