diff --git a/unpack.go b/unpack.go
index 8412ea1..abc0ca7 100644
--- a/unpack.go
+++ b/unpack.go
@@ -7,8 +7,10 @@ import (
 	"unicode"
 )
 
+// ErrInvalidString - Определение пользовательской ошибки для недопустимой строки.
 var ErrInvalidString = errors.New("invalid string")
 
+// state - Тип-перечисление для представления состояния автомата.
 type state int
 
 const (
@@ -17,6 +19,7 @@ const (
 	number
 )
 
+// Unpack - Функция для распаковки строки в заданном формате.
 func Unpack(str string) (string, error) {
 	var currentState state = start
 	var result strings.Builder
@@ -25,6 +28,7 @@ func Unpack(str string) (string, error) {
 	var runeArray = []rune(str)
 
 	if len(runeArray) > 0 && unicode.IsDigit(runeArray[0]) {
+		// Если первый символ является цифрой, возвращаем ошибку "недопустимой строки".
 		return "first rune is digit", ErrInvalidString
 	}
 
@@ -37,6 +41,7 @@ func Unpack(str string) (string, error) {
 				numOfRepeat, _ = strconv.Atoi(string(char))
 				repStr, err := repeatRune(runeArray[i-1], numOfRepeat)
 				if err != nil {
+					// Если функция repeatRune возвращает ошибку, удаляем последний символ из результата.
 					res := result.String()
 					result.Reset()
 					result.WriteString(res[0 : len(res)-1])
@@ -45,16 +50,18 @@ func Unpack(str string) (string, error) {
 			} else if char == '\\' {
 				currentState = escape
 			} else {
-				currentState = start
 				result.WriteRune(char)
+				currentState = start
 			}
 		case number:
 			if unicode.IsDigit(char) {
+				// Если после цифры идет ещё одна цифра, возвращаем ошибку "недопустимой строки".
 				return "", ErrInvalidString
 			}
-			currentState = start
 			result.WriteRune(char)
+			currentState = start
 		case escape:
+			// Если текущий символ - обратный слэш, добавляем его в результат.
 			result.WriteRune(char)
 			currentState = start
 		}
@@ -65,12 +72,16 @@ func Unpack(str string) (string, error) {
 
 }
 
+// repeatRune - Функция для повторения символа заданное количество раз.
 func repeatRune(char rune, numOfRepeat int) (string, error) {
 	if numOfRepeat > 0 {
+		// Повторяем символ заданное количество раз и возвращаем строку.
 		return strings.Repeat(string(char), numOfRepeat-1), nil
 	}
 	if numOfRepeat == 0 {
+		// Если количество повторений равно нулю, возвращаем ошибку "нулевое повторение".
 		return "", errors.New("zero repeat")
 	}
-	return "", nil
+	// Возвращаем пустую строку для отрицательных значений numOfRepeat.
+	return "", errors.New("negative repeat")
 }
diff --git a/unpack_test.go b/unpack_test.go
index 62d46a8..990298f 100644
--- a/unpack_test.go
+++ b/unpack_test.go
@@ -19,6 +19,8 @@ func TestUnpack(t *testing.T) {
 		{input: "a2", expected: "aa"},
 		{input: "aa", expected: "aa"},
 		{input: "a", expected: "a"},
+		{input: "日本語", expected: "日本語"},
+		{input: "日本語2", expected: "日本語語"},
 		{input: "d\n5abc", expected: "d\n\n\n\n\nabc"},
 		{input: `qwe\4\5`, expected: `qwe45`},
 		{input: `qwe\45`, expected: `qwe44444`},