Калькулятор матрицы 2 на 2
Вычислите определитель, след, обратную матрицу и собственные значения матрицы 2×2 за пару секунд. Просто введите четыре элемента — и получите полный анализ.
—
Собственное значение λ₁
—
Собственное значение λ₂
—
Характеристический многочлен
Как пользоваться калькулятором
1
Введите четыре числа в поля матрицы: a₁₁ (верхний левый), a₁₂ (верхний правый), a₂₁ (нижний левый), a₂₂ (нижний правый). Можно использовать целые числа, десятичные дроби и отрицательные значения — например, 3, -1.5, 0, 4.
2
Нажмите фиолетовую кнопку «Рассчитать». Калькулятор мгновенно вычислит определитель, след, обратную матрицу и собственные значения.
3
Изучите результаты в правой панели. Если определитель не равен нулю, появится обратная матрица. Собственные значения отображаются всегда — в виде действительных или комплексных чисел.
4
Чтобы ввести новые данные, нажмите «Сбросить» — все поля очистятся, и вы сможете начать заново.
Примеры расчёта
Пример 1: Единичная матрица
Элементы: a₁₁=1, a₁₂=0, a₂₁=0, a₂₂=1. Определитель: 1. След: 2. Обратная матрица совпадает с исходной. Собственные значения: λ₁=1, λ₂=1.
Пример 2: Матрица поворота
Элементы: a₁₁=2, a₁₂=3, a₂₁=1, a₂₂=4. Определитель: 5. След: 6. Обратная матрица: [[0.8, -0.6], [-0.2, 0.4]]. Собственные значения: λ₁≈5.193, λ₂≈0.807.
Пример 3: Вырожденная матрица
Элементы: a₁₁=1, a₁₂=2, a₂₁=2, a₂₂=4. Определитель: 0. След: 5. Обратной матрицы не существует. Собственные значения: λ₁=5, λ₂=0.
Формулы расчёта
Для матрицы A размера 2×2 с элементами a₁₁, a₁₂, a₂₁, a₂₂ справедливы следующие формулы:
det(A) = a₁₁ × a₂₂ − a₁₂ × a₂₁
Определитель — скалярная величина, показывающая, обратима ли матрица (если det ≠ 0) и как она масштабирует площадь.
tr(A) = a₁₁ + a₂₂
След — сумма элементов на главной диагонали. Совпадает с суммой собственных значений.
A⁻¹ = (1 / det(A)) × [[a₂₂, -a₁₂], [-a₂₁, a₁₁]]
Обратная матрица существует только при det(A) ≠ 0. Формула получена из метода алгебраических дополнений.
det(A − λI) = λ² − tr(A)·λ + det(A) = 0
Характеристический многочлен. Его корни — собственные значения. Дискриминант: D = tr² − 4·det. Если D ≥ 0 — корни действительные; если D < 0 — комплексно-сопряжённые.
λ₁,₂ = (tr(A) ± √(tr² − 4·det)) / 2
Прямая формула для собственных значений матрицы 2×2 через след и определитель (теорема Виета).
Пошаговое объяснение
Разберём вычисление на конкретном примере матрицы с элементами a₁₁=2, a₁₂=3, a₂₁=1, a₂₂=4.
Шаг 1 — определитель: перемножаем главную диагональ (2 × 4 = 8) и побочную (3 × 1 = 3). Вычитаем: 8 − 3 = 5. Определитель положительный — матрица обратима и не меняет ориентацию.
Шаг 2 — след: складываем элементы главной диагонали: 2 + 4 = 6. Это число пригодится для собственных значений.
Шаг 3 — обратная матрица: так как det ≠ 0, применяем формулу. Делим 1 на 5, получаем коэффициент 0.2. Умножаем его на матрицу [[4, -3], [-1, 2]]. Результат: [[0.8, -0.6], [-0.2, 0.4]].
Шаг 4 — собственные значения: решаем квадратное уравнение λ² − 6λ + 5 = 0. Дискриминант: 36 − 20 = 16, √16 = 4. Корни: (6 + 4)/2 = 5 и (6 − 4)/2 = 1.
Все четыре характеристики получены за четыре простых арифметических действия.
Где применяется
- Школьная и вузовская математика — решение систем двух линейных уравнений, проверка обратимости матриц, задания по линейной алгебре.
- Компьютерная графика — матрицы 2×2 описывают поворот, масштабирование и отражение объектов на плоскости. Определитель показывает изменение площади фигуры.
- Физика — тензоры напряжений и деформаций в двумерных задачах, расчёт главных напряжений через собственные значения.
- Экономика и теория игр — матрицы выигрышей 2×2, анализ равновесий, модель «ястребы и голуби».
- Анализ данных — ковариационные матрицы 2×2 для двух переменных, метод главных компонент на плоскости.
- Программирование — аффинные преобразования в 2D-движках, расчёт обратных трансформаций для обработки кликов и коллизий.
Важные нюансы
- Определитель может быть нулевым — тогда обратной матрицы не существует, а одно собственное значение равно нулю. Калькулятор предупредит об этом.
- При отрицательном дискриминанте собственные значения становятся комплексными числами вида a ± bi. Это нормально и означает, что матрица задаёт поворот с масштабированием.
- Результаты округляются до четырёх знаков после запятой. Для точных аналитических выкладок используйте дроби.
- Калькулятор работает с вещественными числами. Комплексные элементы матрицы не поддерживаются в данной версии.
- Собственные значения всегда упорядочены: λ₁ ≥ λ₂ для действительных корней. Для комплексных сначала идёт корень со знаком «плюс».
- При очень больших или очень маленьких числах возможна потеря точности из-за формата чисел с плавающей запятой (стандарт IEEE 754).
Частые ошибки
- Забыли знак при вычислении определителя: det = a₁₁a₂₂ − a₁₂a₂₁. Минус стоит именно перед произведением побочной диагонали. Ошибка в знаке переворачивает результат.
- Деление на ноль: если определитель равен нулю, формула обратной матрицы неприменима. Калькулятор показывает сообщение вместо некорректного результата.
- Путаница с индексами: a₁₂ — это первая строка, второй столбец (верхний правый). a₂₁ — вторая строка, первый столбец (нижний левый). Перестановка элементов меняет матрицу.
- Игнорирование комплексных собственных значений: многие считают, что собственные значения всегда действительные. Для матрицы [[0, -1], [1, 0]] они равны ±i.
- Неправильная проверка обратимости: недостаточно, чтобы все элементы были ненулевыми. Матрица [[1, 2], [2, 4]] необратима, хотя нулей в ней нет.
- Округление на промежуточных шагах: при ручном счёте не округляйте определитель до подстановки в формулу обратной матрицы — накапливается ошибка.
Ответы на частые вопросы
Что делать, если определитель равен нулю?
Это вырожденная матрица. Обратной матрицы не существует. Одно или оба собственных значения равны нулю. В геометрическом смысле матрица «сжимает» плоскость в прямую или точку.
Почему собственные значения комплексные?
Если дискриминант характеристического уравнения отрицателен, корни содержат мнимую единицу i. Это означает, что матрица задаёт вращение. Комплексные собственные значения — норма для матриц поворота.
Как проверить правильность обратной матрицы?
Умножьте исходную матрицу на обратную — должна получиться единичная матрица [[1, 0], [0, 1]]. Калькулятор использует точную формулу, поэтому результат корректен в пределах округления.
Можно ли вводить дроби, например 1/3?
Поля принимают десятичные дроби. Введите 0.3333 для 1/3. Для точных рациональных расчётов используйте калькулятор с поддержкой символьных вычислений.
Зачем нужен след матрицы?
След — инвариант относительно смены базиса. Он равен сумме собственных значений и входит в характеристический многочлен. В физике след тензора напряжений связан с гидростатическим давлением.
Подходит ли калькулятор для ЕГЭ и ОГЭ?
Да, для типовых задач на определитель, обратную матрицу и собственные значения матриц 2×2. При решении систем уравнений обратите внимание: калькулятор не решает СЛАУ напрямую, но даёт обратную матрицу, через которую можно найти решение.
Источники и справочные данные
Расчёт основан на стандартных формулах линейной алгебры из школьного и вузовского курса математики. Используются: определение детерминанта через перестановки, метод алгебраических дополнений для обращения матриц, теорема Виета для связи следа и определителя с собственными значениями.
Все вычисления выполняются на стороне клиента с двойной точностью (64-битные числа с плавающей запятой). Для учебных и справочных целей; при ответственных инженерных расчётах проверяйте результат вручную или в специализированном ПО (MATLAB, Wolfram Mathematica, библиотеки линейной алгебры на Python).
Матрицы 2 на 2: полное руководство для практического применения
Что такое матрица 2×2 и почему она важна
Матрица 2×2 — это квадратная таблица из четырёх чисел, расположенных в две строки и два столбца. Несмотря на скромный размер, она описывает огромное количество реальных процессов: от поворота изображения на экране до расчёта прибыли в бизнес-моделях.
Каждая матрица 2×2 полностью определяется четвёркой чисел: a₁₁, a₁₂, a₂₁, a₂₂. Первый индекс — номер строки, второй — номер столбца. Элемент a₂₁ находится на пересечении второй строки и первого столбца.
В линейной алгебре матрица 2×2 — простейший нетривиальный случай, на котором удобно изучать все ключевые понятия: определитель, собственные векторы, обращение. Освоив матрицы 2×2, вы легко перейдёте к матрицам любого размера.
Определитель: геометрический смысл и вычисление
Определитель матрицы 2×2 равен a₁₁a₂₂ − a₁₂a₂₁. Геометрически это площадь параллелограмма, построенного на столбцах матрицы как на векторах. Если определитель равен 5, матрица растягивает площадь в 5 раз. Если определитель отрицательный — меняется ориентация (левое становится правым, как в зеркале).
Нулевой определитель означает, что столбцы линейно зависимы — они лежат на одной прямой, параллелограмм вырождается в отрезок, площадь равна нулю. Такая матрица необратима и называется вырожденной.
Практический пример: матрица [[2, 3], [1, 4]] имеет определитель 5. Это значит, что фигура площадью 1 кв. единица после умножения на эту матрицу будет иметь площадь 5 кв. единиц.
След матрицы: простое сложение с глубоким смыслом
След — сумма диагональных элементов: tr = a₁₁ + a₂₂. Это второй по важности инвариант матрицы (после определителя). След не меняется при переходе к другому базису и всегда равен сумме собственных значений.
В физике след тензора напряжений 2×2 даёт удвоенное среднее напряжение. В теории вероятностей след ковариационной матрицы — сумма дисперсий двух случайных величин. Всё это делает след исключительно полезной характеристикой.
Обратная матрица: когда она существует и как её найти
Обратная матрица A⁻¹ — такая, что A × A⁻¹ = I (единичная матрица). Для матрицы 2×2 формула элементарна: меняем местами a₁₁ и a₂₂, меняем знаки у a₁₂ и a₂₁, и делим всё на определитель.
Важнейшее условие: определитель не должен равняться нулю. Если det = 0, обратной матрицы не существует — система уравнений, соответствующая матрице, либо не имеет решений, либо имеет их бесконечно много.
Пример из жизни: вы знаете, как объект трансформировался (матрица A), и хотите вернуть его в исходное состояние. Применяете A⁻¹ — и объект возвращается к первоначальной форме. На этом построены все операции undo в графических редакторах.
Собственные значения: ключ к пониманию матрицы
Собственные значения λ — числа, для которых существует ненулевой вектор v такой, что A×v = λ×v. Для матрицы 2×2 они находятся из квадратного уравнения λ² − tr·λ + det = 0. Дискриминант D = tr² − 4det определяет, будут ли корни действительными или комплексными.
Если D > 0 — два различных действительных собственных значения. Матрица растягивает пространство вдоль двух разных направлений. Если D = 0 — одно собственное значение кратности 2. Если D < 0 — комплексно-сопряжённая пара, что говорит о наличии вращения.
Собственные значения — главные герои во многих прикладных задачах. В анализе главных компонент (PCA) они показывают, сколько информации несёт каждая компонента. В механике — это главные напряжения, определяющие прочность конструкции.
Практические приёмы работы с матрицами 2×2
- Быстрая проверка обратимости: достаточно вычислить определитель. Занимает 2 умножения и 1 вычитание — меньше секунды.
- Умножение матриц 2×2: результирующая матрица C = A × B вычисляется по правилу «строка на столбец». Для позиции c₁₁ берём первую строку A и первый столбец B: c₁₁ = a₁₁b₁₁ + a₁₂b₂₁. Всего 8 умножений и 4 сложения.
- Транспонирование: меняем местами a₁₂ и a₂₁. Определитель и след при транспонировании не меняются.
- Возведение в степень: для диагонализуемых матриц удобно использовать собственные значения: Aⁿ = P × diag(λ₁ⁿ, λ₂ⁿ) × P⁻¹.
Реальные применения в разных областях
Компьютерная графика: матрицы 2×2 — основа всех двумерных трансформаций. Матрица [[cos θ, -sin θ], [sin θ, cos θ]] поворачивает изображение на угол θ. Матрица [[sx, 0], [0, sy]] масштабирует по осям. Их определители дают изменение площади спрайта.
Экономика: модель «затраты-выпуск» Леонтьева для двух отраслей описывается матрицей 2×2. Собственные значения показывают темпы роста отраслей. Обратная матрица даёт мультипликаторы — насколько вырастет выпуск при увеличении спроса.
Биология: модели популяций двух видов (хищник-жертва, конкуренция) используют матрицы перехода 2×2. Собственные значения определяют, вымрут ли виды или достигнут равновесия.
Криптография: шифр Хилла использует матрицу 2×2 как ключ. Обратная матрица служит для расшифровки. Без знания ключа взлом требует перебора, сложность которого растёт с размером алфавита.
Типичные учебные задачи и как их решать
В школьном курсе алгебры матрицы 2×2 появляются в теме «Системы линейных уравнений». Система из двух уравнений с двумя неизвестными записывается как A×x = b, где A — матрица 2×2 коэффициентов. Решение: x = A⁻¹×b, если определитель не ноль.
На ЕГЭ по математике (профильный уровень) задачи на определитель и обратную матрицу встречаются в заданиях по линейной алгебре. Типичное задание: найти определитель матрицы [[3, -2], [5, 1]] — ответ 13. Или решить систему методом обратной матрицы.
В вузовском курсе к этому добавляются собственные векторы, жорданова форма и приложения к дифференциальным уравнениям. Матрица 2×2 — полигон для отработки всех базовых навыков линейной алгебры.
Советы по использованию калькулятора в учёбе
Используйте калькулятор для проверки своих ручных вычислений, а не вместо них. Решите задачу на бумаге — получите определитель, след, собственные значения — и только потом сверьтесь с калькулятором. Так вы разовьёте вычислительные навыки и интуицию.
Экспериментируйте с разными матрицами: попробуйте матрицы с нулевым следом, с отрицательным определителем, с комплексными собственными значениями. Наблюдайте закономерности — как меняются собственные значения при добавлении числа к диагонали, как ведёт себя определитель при перестановке строк.
Помните: калькулятор даёт численный ответ с округлением. Для аналитического решения (в радикалах, с корнями) используйте символьные пакеты или решайте вручную. Численный ответ удобен для прикладных задач, где важна конкретная величина с заданной точностью.
CihmdW5jdGlvbigpewogICAgdmFyIGExMUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ20tYTExJyk7CiAgICB2YXIgYTEySW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbS1hMTInKTsKICAgIHZhciBhMjFJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtLWEyMScpOwogICAgdmFyIGEyMklucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ20tYTIyJyk7CiAgICB2YXIgY2FsY0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxjLWJ0bicpOwogICAgdmFyIHJlc2V0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc2V0LWJ0bicpOwogICAgdmFyIGVycm9yU3BhbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXRyaXgtZXJyb3InKTsKCiAgICB2YXIgcmVzRGV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlcy1kZXQnKTsKICAgIHZhciByZXNUcmFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXMtdHJhY2UnKTsKICAgIHZhciBjYXJkSW52ZXJzZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQtY2FyZC1pbnZlcnNlJyk7CiAgICB2YXIgaW52QTExID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludi1hMTEnKTsKICAgIHZhciBpbnZBMTIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW52LWExMicpOwogICAgdmFyIGludkEyMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnYtYTIxJyk7CiAgICB2YXIgaW52QTIyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludi1hMjInKTsKICAgIHZhciBjYXJkRWlnZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0LWNhcmQtZWlnZW4nKTsKICAgIHZhciByZXNFdjEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzLWV2MScpOwogICAgdmFyIHJlc0V2MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXMtZXYyJyk7CiAgICB2YXIgcmVzQ2hhclBvbHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzLWNoYXJwb2x5Jyk7CgogICAgZnVuY3Rpb24gcGFyc2VWYWx1ZShpbnB1dCkgewogICAgICAgIHZhciByYXcgPSBpbnB1dC52YWx1ZS50cmltKCk7CiAgICAgICAgaWYgKHJhdyA9PT0gJycpIHJldHVybiBOYU47CiAgICAgICAgdmFyIG51bSA9IE51bWJlcihyYXcpOwogICAgICAgIHJldHVybiBudW07CiAgICB9CgogICAgZnVuY3Rpb24gZm9ybWF0TnVtYmVyKG51bSkgewogICAgICAgIGlmIChpc05hTihudW0pIHx8ICFpc0Zpbml0ZShudW0pKSByZXR1cm4gJ+KAlCc7CiAgICAgICAgdmFyIHJvdW5kZWQgPSBNYXRoLnJvdW5kKG51bSAqIDEwMDAwKSAvIDEwMDAwOwogICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHJvdW5kZWQpKSByZXR1cm4gcm91bmRlZC50b1N0cmluZygpOwogICAgICAgIHJldHVybiByb3VuZGVkLnRvRml4ZWQoNCkucmVwbGFjZSgvXC4/MCskLywgZnVuY3Rpb24obWF0Y2gpIHsKICAgICAgICAgICAgaWYgKG1hdGNoID09PSAnLicpIHJldHVybiAnJzsKICAgICAgICAgICAgaWYgKG1hdGNoLmxlbmd0aCA+IDAgJiYgbWF0Y2hbMF0gPT09ICcuJykgcmV0dXJuIG1hdGNoLnN1YnN0cmluZygwLCAzKTsKICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGZvcm1hdENvbXBsZXgocmVhbCwgaW1hZykgewogICAgICAgIHZhciByID0gZm9ybWF0TnVtYmVyKHJlYWwpOwogICAgICAgIHZhciBpbSA9IGZvcm1hdE51bWJlcihNYXRoLmFicyhpbWFnKSk7CiAgICAgICAgaWYgKGltID09PSAnMCcgfHwgaW0gPT09ICfigJQnKSByZXR1cm4gcjsKICAgICAgICB2YXIgc2lnbiA9IGltYWcgPj0gMCA/ICcrJyA6ICfiiJInOwogICAgICAgIHJldHVybiByICsgJyAnICsgc2lnbiArICcgacK3JyArIGltOwogICAgfQoKICAgIGZ1bmN0aW9uIHNob3dFcnJvcihtc2cpIHsKICAgICAgICBlcnJvclNwYW4udGV4dENvbnRlbnQgPSBtc2c7CiAgICAgICAgZXJyb3JTcGFuLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgfQoKICAgIGZ1bmN0aW9uIGhpZGVFcnJvcigpIHsKICAgICAgICBlcnJvclNwYW4udGV4dENvbnRlbnQgPSAnJzsKICAgICAgICBlcnJvclNwYW4uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIH0KCiAgICBmdW5jdGlvbiByZXNldFJlc3VsdHMoKSB7CiAgICAgICAgcmVzRGV0LnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICAgICAgcmVzVHJhY2UudGV4dENvbnRlbnQgPSAn4oCUJzsKICAgICAgICBjYXJkSW52ZXJzZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgIGludkExMS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgIGludkExMi50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgIGludkEyMS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgIGludkEyMi50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgIGNhcmRFaWdlbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgIHJlc0V2MS50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgIHJlc0V2Mi50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgIHJlc0NoYXJQb2x5LnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsY3VsYXRlKCkgewogICAgICAgIGhpZGVFcnJvcigpOwogICAgICAgIHZhciBhMTEgPSBwYXJzZVZhbHVlKGExMUlucHV0KTsKICAgICAgICB2YXIgYTEyID0gcGFyc2VWYWx1ZShhMTJJbnB1dCk7CiAgICAgICAgdmFyIGEyMSA9IHBhcnNlVmFsdWUoYTIxSW5wdXQpOwogICAgICAgIHZhciBhMjIgPSBwYXJzZVZhbHVlKGEyMklucHV0KTsKCiAgICAgICAgaWYgKGlzTmFOKGExMSkgfHwgaXNOYU4oYTEyKSB8fCBpc05hTihhMjEpIHx8IGlzTmFOKGEyMikpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCfQn9C+0LbQsNC70YPQudGB0YLQsCwg0LfQsNC/0L7Qu9C90LjRgtC1INCy0YHQtSDRh9C10YLRi9GA0LUg0L/QvtC70Y8g0YfQuNGB0LvQvtCy0YvQvNC4INC30L3QsNGH0LXQvdC40Y/QvNC4LicpOwogICAgICAgICAgICByZXNldFJlc3VsdHMoKTsKICAgICAgICAgICAgY2FyZEVpZ2VuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgICAgIGNhcmRJbnZlcnNlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICghaXNGaW5pdGUoYTExKSB8fCAhaXNGaW5pdGUoYTEyKSB8fCAhaXNGaW5pdGUoYTIxKSB8fCAhaXNGaW5pdGUoYTIyKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ9CX0L3QsNGH0LXQvdC40Y8g0LTQvtC70LbQvdGLINCx0YvRgtGMINC60L7QvdC10YfQvdGL0LzQuCDRh9C40YHQu9Cw0LzQuC4g0KHQu9C40YjQutC+0Lwg0LHQvtC70YzRiNC40LUg0LjQu9C4INC80LDQu9C10L3RjNC60LjQtSDRh9C40YHQu9CwINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDRjtGC0YHRjy4nKTsKICAgICAgICAgICAgcmVzZXRSZXN1bHRzKCk7CiAgICAgICAgICAgIGNhcmRFaWdlbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICBjYXJkSW52ZXJzZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB2YXIgZGV0ID0gYTExICogYTIyIC0gYTEyICogYTIxOwogICAgICAgIHZhciB0cmFjZSA9IGExMSArIGEyMjsKCiAgICAgICAgcmVzRGV0LnRleHRDb250ZW50ID0gZm9ybWF0TnVtYmVyKGRldCk7CiAgICAgICAgcmVzVHJhY2UudGV4dENvbnRlbnQgPSBmb3JtYXROdW1iZXIodHJhY2UpOwoKICAgICAgICAvLyDQntCx0YDQsNGC0L3QsNGPINC80LDRgtGA0LjRhtCwCiAgICAgICAgaWYgKE1hdGguYWJzKGRldCkgPCAxZS0xMikgewogICAgICAgICAgICBjYXJkSW52ZXJzZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgICAgaW52QTExLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICAgICAgICAgIGludkExMi50ZXh0Q29udGVudCA9ICfigJQnOwogICAgICAgICAgICBpbnZBMjEudGV4dENvbnRlbnQgPSAn4oCUJzsKICAgICAgICAgICAgaW52QTIyLnRleHRDb250ZW50ID0gJ+KAlCc7CiAgICAgICAgICAgIHZhciBpbnZOb3RlID0gY2FyZEludmVyc2UucXVlcnlTZWxlY3RvcignZGl2JykgfHwgbnVsbDsKICAgICAgICAgICAgaWYgKGludk5vdGUpIGludk5vdGUudGV4dENvbnRlbnQgPSAn0J7QsdGA0LDRgtC90L7QuSDQvNCw0YLRgNC40YbRiyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIChkZXQgPSAwKSc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY2FyZEludmVyc2Uuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgICAgIHZhciBpbnZOb3RlID0gY2FyZEludmVyc2UucXVlcnlTZWxlY3RvcignZGl2Jyk7CiAgICAgICAgICAgIGlmIChpbnZOb3RlKSBpbnZOb3RlLnRleHRDb250ZW50ID0gJ9Ce0LHRgNCw0YLQvdCw0Y8g0LzQsNGC0YDQuNGG0LAgQeKBu8K5JzsKICAgICAgICAgICAgaW52QTExLnRleHRDb250ZW50ID0gZm9ybWF0TnVtYmVyKGEyMiAvIGRldCk7CiAgICAgICAgICAgIGludkExMi50ZXh0Q29udGVudCA9IGZvcm1hdE51bWJlcigtYTEyIC8gZGV0KTsKICAgICAgICAgICAgaW52QTIxLnRleHRDb250ZW50ID0gZm9ybWF0TnVtYmVyKC1hMjEgLyBkZXQpOwogICAgICAgICAgICBpbnZBMjIudGV4dENvbnRlbnQgPSBmb3JtYXROdW1iZXIoYTExIC8gZGV0KTsKICAgICAgICB9CgogICAgICAgIC8vINCh0L7QsdGB0YLQstC10L3QvdGL0LUg0LfQvdCw0YfQtdC90LjRjyDQuCDRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjRh9C10YHQutC40Lkg0LzQvdC+0LPQvtGH0LvQtdC9CiAgICAgICAgY2FyZEVpZ2VuLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgIHZhciBkaXNjcmltaW5hbnQgPSB0cmFjZSAqIHRyYWNlIC0gNCAqIGRldDsKCiAgICAgICAgLy8g0KXQsNGA0LDQutGC0LXRgNC40YHRgtC40YfQtdGB0LrQuNC5INC80L3QvtCz0L7Rh9C70LXQvTogzrvCsiAtIHRywrfOuyArIGRldCA9IDAKICAgICAgICB2YXIgcG9seVBhcnRzID0gW107CiAgICAgICAgcG9seVBhcnRzLnB1c2goJ867wrInKTsKICAgICAgICBpZiAoTWF0aC5hYnModHJhY2UpID4gMWUtMTIpIHsKICAgICAgICAgICAgdmFyIHNpZ24gPSB0cmFjZSA+IDAgPyAnIOKIkiAnIDogJyArICc7CiAgICAgICAgICAgIHZhciBhYnNUciA9IGZvcm1hdE51bWJlcihNYXRoLmFicyh0cmFjZSkpOwogICAgICAgICAgICBwb2x5UGFydHMucHVzaChzaWduICsgYWJzVHIgKyAnzrsnKTsKICAgICAgICB9CiAgICAgICAgaWYgKE1hdGguYWJzKGRldCkgPiAxZS0xMikgewogICAgICAgICAgICB2YXIgc2lnbkRldCA9IGRldCA+IDAgPyAnICsgJyA6ICcg4oiSICc7CiAgICAgICAgICAgIHZhciBhYnNEZXQgPSBmb3JtYXROdW1iZXIoTWF0aC5hYnMoZGV0KSk7CiAgICAgICAgICAgIHBvbHlQYXJ0cy5wdXNoKHNpZ25EZXQgKyBhYnNEZXQpOwogICAgICAgIH0KICAgICAgICBwb2x5UGFydHMucHVzaCgnID0gMCcpOwogICAgICAgIHJlc0NoYXJQb2x5LnRleHRDb250ZW50ID0gcG9seVBhcnRzLmpvaW4oJycpOwoKICAgICAgICBpZiAoZGlzY3JpbWluYW50ID49IC0xZS0xMikgewogICAgICAgICAgICB2YXIgZCA9IE1hdGgubWF4KDAsIGRpc2NyaW1pbmFudCk7CiAgICAgICAgICAgIHZhciBzcXJ0RCA9IE1hdGguc3FydChkKTsKICAgICAgICAgICAgdmFyIGxhbWJkYTEgPSAodHJhY2UgKyBzcXJ0RCkgLyAyOwogICAgICAgICAgICB2YXIgbGFtYmRhMiA9ICh0cmFjZSAtIHNxcnREKSAvIDI7CiAgICAgICAgICAgIGlmIChsYW1iZGExIDwgbGFtYmRhMikgeyB2YXIgdG1wID0gbGFtYmRhMTsgbGFtYmRhMSA9IGxhbWJkYTI7IGxhbWJkYTIgPSB0bXA7IH0KICAgICAgICAgICAgcmVzRXYxLnRleHRDb250ZW50ID0gZm9ybWF0TnVtYmVyKGxhbWJkYTEpOwogICAgICAgICAgICByZXNFdjIudGV4dENvbnRlbnQgPSBmb3JtYXROdW1iZXIobGFtYmRhMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHJlYWxQYXJ0ID0gdHJhY2UgLyAyOwogICAgICAgICAgICB2YXIgaW1hZ1BhcnQgPSBNYXRoLnNxcnQoLWRpc2NyaW1pbmFudCkgLyAyOwogICAgICAgICAgICByZXNFdjEudGV4dENvbnRlbnQgPSBmb3JtYXRDb21wbGV4KHJlYWxQYXJ0LCBpbWFnUGFydCk7CiAgICAgICAgICAgIHJlc0V2Mi50ZXh0Q29udGVudCA9IGZvcm1hdENvbXBsZXgocmVhbFBhcnQsIC1pbWFnUGFydCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHJlc2V0QWxsKCkgewogICAgICAgIGExMUlucHV0LnZhbHVlID0gJyc7CiAgICAgICAgYTEySW5wdXQudmFsdWUgPSAnJzsKICAgICAgICBhMjFJbnB1dC52YWx1ZSA9ICcnOwogICAgICAgIGEyMklucHV0LnZhbHVlID0gJyc7CiAgICAgICAgaGlkZUVycm9yKCk7CiAgICAgICAgcmVzZXRSZXN1bHRzKCk7CiAgICB9CgogICAgY2FsY0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNhbGN1bGF0ZSk7CiAgICByZXNldEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlc2V0QWxsKTsKCiAgICAvLyDQmNC90LjRhtC40LDQu9C40LfQsNGG0LjRjzog0YHQutGA0YvQstCw0LXQvCDQutCw0YDRgtC+0YfQutC4INGA0LXQt9GD0LvRjNGC0LDRgtC+0LIg0L/RgNC4INC30LDQs9GA0YPQt9C60LUKICAgIGNhcmRJbnZlcnNlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICBjYXJkRWlnZW4uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKfSkoKTsK