В пять сорок две утра автобус № 407 ушел с автостанции «Северная» пустым. Лида Крылова видела это на камере: водитель Виктор Сафронов поднял капот, постучал по колесу, вернулся в кабину и закрыл дверь. Ни одного пассажира.

В шесть ноль семь на мониторе диспетчерской появились данные поездки. На остановке «Речная» сразу отметились четыре посадки, через двенадцать секунд еще три — на «Кирпичной», хотя между остановками было почти два километра. Затем система показала пенсионеров, школьника и пассажира с инвалидной коляской. Все будто вошли в одну минуту, на разных концах поселка.

GPS говорил, что автобус в это время стоял у старого моста. Валидатор насчитал тринадцать пассажиров. Лида открыла карточки: имена настоящие, но три карты не использовались годами, одна принадлежала человеку, лежавшему в районной больнице, а школьный проездной был заблокирован месяц назад.

— Виктор Андреевич, у вас люди ехали? — спросила она по рации.

— Людей не было, — ответил он.

— Тогда откуда посадки?

— Не знаю.

Начальник смены посмотрел на экран и сказал, что Сафронов списал топливо и теперь свалит всё на терминал. У водителя был доступ к ручному режиму. До обеда ему приготовили объяснительную.

Лида не спешила. Она девять лет работала с маршрутами и знала: в ручном режиме можно закрыть поездку при неисправности, но нельзя создать тринадцать пассажиров. В архиве ночных обновлений она нашла строку: «Синхронизация пакета льготных карт. Режим отладки — активирован».

Виктору Сафронову было шестьдесят восемь. Он водил осторожно, но не любил новые системы. На вопрос о ручном режиме ответил, что утром проверял дорогу: на мосту автобус повело вправо, и он хотел отметить гололед. Канал связи был занят, поэтому он включил режим безопасности на планшете.

— Вы могли просто позвонить.

— Звонил. Не прошел вызов.

Лида проверила запись. В шесть восемь автобус действительно пытался выйти на связь, а канал занимал тестовый вызов тарифного отдела. Но это еще не объясняло имена пассажиров.

Она поставила камеру на замедление. В шесть одиннадцать в салоне на секунду включился свет, хотя дверь не открывалась. В стекле кабины отразился экран планшета. Виктор что-то набирал, а через минуту начались невозможные посадки.

Начальник потребовал подпись водителя. Лида запросила журнал валидатора и увидела предупреждение: «Память устройства заполнена. Восстановление последнего сеанса». Последний сеанс относился к учениям по эвакуации, где в автобус загрузили список условных пассажиров: имена, льготы, ограничения по здоровью.

Программа должна была стереть список, но после ночной прошивки и ручного режима воспроизвела его поверх реального маршрута. Вот только оставалась строка: «Подтверждение водителя: 06:09:31». Ее отправили не с планшета, а с внешнего пульта в кабине.

В дверь диспетчерской постучали. На пороге стоял Сафронов. В прозрачном пакете он держал черный блок с двумя проводами.

— Нашел под сиденьем, — сказал он. — Утром его там не было. И я, кажется, знаю, кто его поставил, но если скажу, вы решите, что я оправдываюсь…

Лида не стала брать пакет сразу. Внутри лежал черный блок размером с пачку сигарет, залитый прозрачным компаундом. Из одного торца выходили два тонких провода, из другого — короткий штекер. Такие устройства ставили на старых автобусах, когда нужно было подключить внешнюю кнопку тревоги или дополнительный маяк. На корпусе не было ни номера, ни пломбы.

— Кто поставил?

— Не человек, — сказал Виктор. — Система.

Он положил пакет на край стола и сел. Лида включила диктофон, предупредила его об этом. Виктор кивнул. Он не боялся записи; он боялся, что запись снова истолкуют удобнее, чем его слова.

Два месяца назад автобус 407 участвовал в учениях по эвакуации. В районном управлении тогда проверяли, как транспорт получит список людей из пункта сбора, если мобильная сеть ляжет. На каждый автобус временно поставили переходник: тот соединял аварийный пульт со старым терминалом и передавал в него учебный список. После учений переходники должны были снять. Сняли не все — один автобус вернули в парк с чужим блоком под обивкой сиденья.

— Почему вы сразу не сказали? — спросила Лида.

— Потому что утром я его не видел. А когда увидел после рейса, понял: меня всё равно не услышат. Подумают, что сам подключил, чтобы спрятать поездку.

Лида позвонила в техническую службу и на этот раз не стала ждать. Попросила зарегистрировать официальный запрос, назвала номер блока и потребовала письменный ответ. Через десять минут техник Денис Лапшин перезвонил на внутреннюю линию. Он говорил быстро, почти шепотом: переходник действительно использовали на учениях, но его маркировка не совпадала с той, что должна была находиться в автобусе. У оригинального блока был зеленый разъем, у найденного — серый.

— Значит, кто-то поменял, — сказала Лида.

— Или мы получили не тот комплект. Вчера ночью прошивку накатывали с тестового сервера. Я предупреждал, что он видит архивы учений.

— Вы предупреждали кого?

— Всех, кто должен был услышать. Но начальник проекта сказал, что до запуска осталось три дня и «потом разберемся».

На экране у Лиды висел акт на Сафронова. Она сняла его с принтера, разорвала пополам и положила в папку «технические сбои». Потом запросила весь маршрут данных за утро. В журнале нашлась еще одна странность: после подтверждения водителя блок отправлял не только список условных пассажиров, но и координаты автобуса каждые десять секунд. Это объясняло, почему точки посадок шли почти ровной цепочкой. Система брала координаты движения, а имена — из старого списка.

Но переходник не мог сам появиться под сиденьем. И он не объяснял, почему его поставили именно перед поездкой.

Виктор сказал, что на конечной видел у автобуса мужчину в серой куртке. Тот стоял у задней двери и держал планшет. Виктор решил, что это инженер. Лицо не рассмотрел: в пять утра снег летел горизонтально. Мужчина спросил, исправен ли аварийный пульт, и услышал, что исправен.

Лида просмотрела запись с внешней камеры. Между пятью двадцатью и пятью сорока в кадр действительно попал человек в серой куртке. Он подошел к автобусу с коробкой, открыл люк для инструментов и пробыл там меньше минуты. Камера не различала лица, зато на рукаве был виден белый прямоугольник — знак подрядчика, который обслуживал систему оплаты.

Начальник смены попытался закрыть экран.

— Не надо устраивать охоту. Подрядчик скажет, что тестировал оборудование.

Она впервые повысила голос. Начальник посмотрел на нее, потом на папку. В его кабинете звонил телефон, но он не брал трубку. Позже Лида узнала, что звонил руководитель проекта: утром в администрации должны были показывать новую систему оплаты, и никто не хотел объяснять, почему демонстрационный релиз подтянул данные учений.

Тем временем Денис прислал расшифровку служебного журнала. Блок был подключен в 05:37:48 — до отправления автобуса. Подключение зарегистрировали под учетной записью не водителя и не техника, а «оператора полигона». Такой учетной записи в действующем списке уже не было. Ее оставили после учений, чтобы никто не ломал старые настройки.

Лида попросила проверить, где еще использовалась эта учетная запись.

Пропущенные в журнале строки она восстановила по времени и видеозаписи. Оказалось, что той же ночью тестовый сервер отправил похожие пакеты на четыре автобуса. Три машины стояли в парке и не выходили на линию. На четвертом, маршрут 407, система получила реальное движение и превратила его в невозможную поездку.

К обеду подрядчик признал: инженер подключил переходник по просьбе руководителя проекта, чтобы проверить передачу аварийных сообщений, но не сообщил диспетчерам. Он не собирался создавать пассажиров — хотел показать, что автобус виден на карте. Учебная база и реальный маршрут сошлись в одном незащищенном месте. Никакой тайной схемы не было, только слишком уверенные люди, которые считали тестовые данные безобидными.

Лида думала, что после этого ей станет легче. Но вечером, когда она закрывала смену, в журнале снова появилась строка «Подтверждение водителя: 06:09:31». Теперь она знала: ее нельзя было связывать с Сафроновым. Подтверждение отправил внешний блок.

Она открыла подробности и увидела новый статус: «Событие вручную признано оператором». Оператором была указана ее собственная учетная запись.

Лида проверила пароль, хотя уже понимала, что это ничего не даст. В тот момент, когда ночью она увеличивала подпись на экране, система автоматически сохранила ее просмотр как подтверждение события. Программа не различала расследование и согласие. Для нее Лида не изучала ошибку — она ее подтвердила.

На следующий день начальство предложило ей подписать служебную записку о «некорректной интерпретации данных диспетчером». Формулировка была мягкой, почти заботливой. В ней не упоминался ни подрядчик, ни старый сервер, ни человек в серой куртке. Предлагалось лишь признать, что Лида поспешно связала технический сбой с действиями водителя.

Она взяла записку домой, но не подписала. Утром снова приехала в парк. Сафронов стоял у автобуса 407 и рассматривал лед на ступеньках. Он сказал, что ночью мост посыпали лучше, однако на обочине осталась тонкая полоса.

— Значит, не зря остановились, — ответила Лида.

— Я не останавливался, чтобы оказаться правым.

— Знаю.

Она передала ему копию журнала, где его фамилия была удалена из списка подозреваемых. Он долго читал, водя пальцем по строкам, и спросил, оставят ли теперь ручной режим.

— Оставят, но с нормальной кнопкой для дорожных отметок.

— Это хорошо.

Виктор вернул лист. На обороте была напечатана схема маршрута, и на ней красным кружком отмечался старый мост. Лида уже собиралась уходить, когда ее телефон коротко завибрировал. На сервер пришел новый пакет: тот же идентификатор «оператора полигона», то же время подключения, но теперь — с автобуса, который стоял запертым в дальнем ряду.