Ярослав Нестеров
Уральский узел

Ярослав Нестеров

ЧАСТЬ I. ГЛАЗА

Глава 1. Закрытый автобус

Где-то на Урале. Утро. День 1.

«Дорога длиною в жизнь, но окна закрашены»

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

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

— Бесполезно, — сказал он вслух.

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

Павел откинулся на спинку кресла. Ещё на собеседовании ему объяснили: маршрут меняется, время в пути варьируется, окна закрыты не для удобства. Он кивал и думал, что всё равно запомнит. Теперь понял, что люди, придумавшие эту дорогу, знали свою работу лучше него.

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

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

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

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

Слова утонули в треске. Через секунду водитель выключил радио.

— Долго ещё? — спросил Павел у соседа.

— Когда приедем — узнаешь, — ответил тот, не поднимая глаз.

Павел замолчал. Он думал о маленькой квартире в областном центре, о матери, которая сунула ему в рюкзак термос и банку варенья, будто он уезжал не на закрытый объект, а в студенческое общежитие. Друзья говорили: «Ты с ума сошёл. Там люди месяцами наружу не выходят». Он смеялся. Сейчас смеяться не хотелось.

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

Перед отъездом она долго стояла в дверях, поправляя ему воротник. Павел раздражался, торопил, говорил, что опоздает. Теперь вспоминал её пальцы и понимал, что она не поправляла воротник. Она пыталась запомнить, как он выглядит, пока ещё стоит перед ней.

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

— Специализация? — спросил второй.

— Распределённые системы. Отказоустойчивая автоматика. Последние два года занимался синхронизацией промышленных контроллеров.

— На каком предприятии?

— На приборном заводе.

— Завод закрыт.

— Поэтому я здесь.

Мужчина задержал на нём взгляд.

— Почему вы хотите работать на закрытом объекте?

Павел ответил как учили: интерес к перспективным технологиям, профессиональное развитие, желание приносить пользу стране. Его выслушали, не перебивая.

— Это всё правильно, — сказал мужчина. — А теперь ответьте честно.

Павел помолчал и сам удивился тому, что произнёс:

— Потому что дома делать нечего. Завод стоит. В конторе предлагают перекладывать отчёты за зарплату, которой не хватает на коммуналку. А здесь работа. Настоящая. И платят нормально.

В уголках холодного взгляда мелькнуло что-то похожее на одобрение.

— Честность полезнее правильных слов. Оформляйте.

Позже Павел узнал фамилию этого человека: полковник Круглов. Тогда она ничего ему не сказала.

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

— В проходе не стоять. В окна не смотреть — всё равно не видно.

Теперь автобус сбросил скорость и остановился. Двигатель затих. В тишине стало слышно, как ветер шуршит по кузову ветками.

Двери открылись.

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

— На выход, не задерживаем, — раздался голос сбоку.

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

— Новый? Павел?

— Да.

— Корнеев. Начальник охраны. Пошли, провожу.

Они двинулись по узкой тропинке. Минут через десять Павел оглянулся — автобуса уже не было видно.

— Не пытайся запомнить дорогу, — сказал Корнеев. — Всё равно забудешь.

— Уже забыл.

— Значит, обучаемый.

Впереди склон горы будто разрезали ножом. Вход в тоннель не бросался в глаза: бетонный свод был окрашен под мох и камень, вокруг рос молодой кустарник. Если бы Корнеев не шагнул туда первым, Павел прошёл бы мимо.

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

— Добро пожаловать домой, — сказал Корнеев.

— Надолго?

Корнеев оглянулся.

— Здесь плохой вопрос не «надолго ли». Здесь плохой вопрос — «когда обратно».

Дежурное освещение включалось впереди секция за секцией. За спиной гермодверь закрылась, и вместе с полосой дневного света исчез лес.

Первый пост находился за поворотом. Здесь Павла снова проверили: лицо, отпечаток ладони, документы, вещи. Девушка за стойкой выдала серую карту без имени — только номер, уровень допуска и временный код. Телефон в запечатанном конверте отправился в металлический ящик.

— Когда вернут? — спросил Павел.

— При выезде.

— А если нужно позвонить?

— По внутренней заявке, через контролируемый канал. Если внешний сегмент работает.

Корнеев не торопил. Стоял рядом, пока Павел подписывал обязательство о неразглашении, согласие на досмотр и ещё несколько документов, которые было невозможно прочитать без юридического образования.

— Здесь много бумаги для места, где всё цифровое, — заметил Павел.

— Бумага не требует электричества и реже меняет владельца вместе с сервером, — ответил Корнеев.

Павел шагнул дальше. Он ещё не знал, где находится на карте. Знал только, зачем его сюда привезли: соединять элементы системы так, чтобы при отказе одного продолжали работать остальные.

Пока это казалось обычной инженерной задачей.

Глава 2. Точки на экране

Центр «Уральский». Операторский зал. День 1.

Воздух в зале был сухим и прохладным. Кондиционеры работали ровно, отводя тепло от серверных стоек, расположенных за стеклянной перегородкой. Стены почти исчезали за экранами: карты, графики, линии связи, сотни движущихся отметок.

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

— Виктор Сергеевич, — сказал Корнеев. — Ваш новый специалист.

Мужчина кивнул, не отрываясь от экрана.

— Павел?

— Да.

— Громов. Виктор Сергеевич. Садись. Только ничего не трогай, пока не скажу.

Павел сел рядом.

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

— Это всё видит один радар? — спросил Павел.

Виктор впервые посмотрел на него с интересом.

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

Он коснулся панели. На карте проступили зоны покрытия: прозрачные лепестки перекрывали друг друга, оставляя между горами узкие серые щели.

— Вот станция «Северная». Вот «Камень». Вот пассивный контур вдоль старой трассы. Ни один из них не знает всей обстановки. Вместе — почти знают.

— Почти?

— Хорошее слово для инженера. Сохрани.

Виктор приблизил участок карты. Грузовой самолёт пересёк границу двух зон. На секунду рядом с основной отметкой возникла вторая, чуть смещённая.

— Почему дубль? — спросил Павел.

— Переход между станциями. Система потом склеит.

Самолёт летел дальше, но его цифровая тень ещё дважды дрогнула.

Павел наклонился ближе.

— Временные метки можно открыть?

— Можно. Зачем?

— Вторая станция опаздывает. Не по обработке — по собственным часам.

Виктор усмехнулся.

— Ты минуту здесь.

— Отметка не просто отстаёт. Смещение одинаковое на каждом пакете. Если бы тормозил канал, задержка плавала бы.

Виктор открыл служебное окно. Два столбца времени разошлись на одну целую восемь десятых секунды.

Усмешка исчезла.

— «Камень» вчера переводили на резервный генератор, — сказал он. — После возврата синхронизацию проверяли.

— Проверяли связь с эталоном. А локальный контроллер мог остаться на резервной шкале.

Виктор вызвал инженера станции, коротко продиктовал номер узла и попросил сверить часы автономного модуля. Ответ пришёл через несколько минут.

— Подтверждаю рассогласование, — сообщил голос из динамика. — Одна целая семьдесят девять. Откуда увидели?

Виктор посмотрел на Павла.

— Новая пара глаз.

Он отключил связь и откинулся в кресле.

— Значит, распределённая автоматика не в резюме для красоты.

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

— Здесь примерно то же самое. Только вместо задвижки иногда самолёт.

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

Виктор провёл его вдоль операторских мест. На одном экране дежурный сравнивал две почти одинаковые траектории грузового самолёта; на другом алгоритм пытался отличить колонну техники от железнодорожного состава, идущего параллельно дороге. В дальнем углу инженер спорил с системой, которая упорно считала грозовой фронт группой низколетящих целей.

— Почему она не решает сама? — спросил Павел.

— Решает. Просто мы не всегда соглашаемся. И хорошо, что пока можем не соглашаться.

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

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

— А люди? — спросил он. — За наземными отметками?

— Иногда машина. Иногда группа. Иногда олень рядом с металлической оградой, если фильтр плохо настроен.

— Она не знает точно?

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

Виктор переключил экран. Появилась схема архитектуры комплекса. Десятки линий сходились к центральному ядру и расходились обратно.

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

— Насколько большого?

— В идеале — этого центра.

Павел решил, что Виктор шутит. По лицу было не понять.

После обеда его отвели в жилой сектор. Комната оказалась маленькой: койка, тумбочка, шкаф, стол, раковина. На стене висела репродукция соснового леса, слишком яркая для помещения без окон.

— Подъём в шесть, завтрак в семь, — объяснял Виктор. — Работа с восьми. Выход наружу только по заданию и с сопровождением. Связь с родными — по расписанию, если внешний канал доступен.

— Если доступен?

— В последнее время это важная оговорка.

Он положил на стол папку.

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

— Срок?

— Пока не найдёшь что-нибудь полезное или не признаешь, что ничего нет. Второе труднее.

Виктор ушёл.

Павел сел на койку и открыл папку. Таблицы, графики, пометки красным карандашом. Цифры были холодными, но за каждой стояло движение где-то наверху: самолёт, автомобиль, человек, которого система видела лишь как отражённый сигнал.

Он сделал первую отметку на полях.

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

Павлу пока казалось, что этого достаточно.

Глава 3. Зелёный скелет

Центр «Уральский». Оптико-аналитическая лаборатория. День 2.

Утром Павел пришёл раньше назначенного времени. Виктора в лаборатории ещё не было. Перед экранами сидела девушка лет двадцати восьми, в тонких очках и с тёмными волосами, собранными в хвост. Стёкла отражали зелёные строки, превращая глаза в два маленьких дисплея.

Она обернулась на скрип двери.

— Новенький? Павел?

— Да.

— Алина Ветрова. Садись. Виктор сказал показать тебе, чем радиолокация отличается от желания видеть человека насквозь.

— Он именно так сказал?

— Нет. Виктор обычно говорит короче и грубее.

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

— Ничего особенного, — сказал Павел.

— Это потому, что ты смотришь глазами.

Алина нажала несколько клавиш. Изображение замерло. Вокруг одного человека появилась зелёная рамка, поверх тела лёг схематичный скелет. Суставы обозначились точками, между ними протянулись линии. Справа побежали параметры: длина шага, угол колена, амплитуда движения плеч, период опоры.

Система иногда теряла локоть за складкой куртки, рамка мигала жёлтым, процент уверенности падал и снова поднимался. Алгоритм спорил с ветром, тенью и тканью, пытаясь восстановить то, чего камера не видела полностью.

— Оптико-поведенческий контур «Профиль», — сказала Алина. — Лицо, походка, устойчивые жесты, тепловой рисунок. Не волшебство. Просто очень много измерений.

Она выбрала другого человека. На экране остались только движущиеся точки.

Запись шла в реальном времени с внутреннего коридора. Сотрудник нёс коробку, остановился у двери, переложил груз из одной руки в другую. Система подсветила напряжение мышц, перераспределение веса и короткую задержку перед поворотом.

— Смотри, — сказала Алина. — Он заранее знает, что дверь тяжёлая, поэтому освобождает правую руку за два шага. Если человек впервые идёт по коридору, он сделает это позже. По таким мелочам можно определить, знаком ли он с помещением.

— И это работает?

— В среднем. Опасное словосочетание, да? В среднем человек предсказуем. Конкретный человек почти всегда находит способ испортить статистику.

— Походку трудно изменить надолго. Можно надеть маску, отрастить бороду, поменять голос. Но когда человек устал или думает, что его не видят, тело возвращается к привычному способу двигаться.

— Значит, система узнает любого?

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

Павел улыбнулся.

— А жесты?

— Тоже. Кто-то поправляет очки одним пальцем, кто-то разворачивает корпус раньше головы, кто-то после старой травмы бережёт левое плечо. Мелочи. Из мелочей получается профиль.

Она увеличила запись. Скелет человека стал крупнее, зелёные линии двигались точно и немного жутко.

— Красиво, — сказал Павел.

— Поэтому опасно.

Он посмотрел на неё.

— В каком смысле?

— Когда результат выглядит красиво, люди перестают спрашивать, сколько в нём неопределённости.

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

— Месяц назад «Профиль» дал девяносто восемь процентов совпадения с человеком из ориентировки, — продолжила она. — Та же хромота, тот же разворот стопы, почти одинаковая работа таза. Подняли охрану, перехватили в лесу.

— И?

— Пенсионер. Бывший пожарный. Колено раздробило при обрушении перекрытия. Походка совпала с разыскиваемым не потому, что это один человек, а потому, что обоих неправильно собрали после травмы.

— Его отпустили?

— Конечно. После трёх часов на земле лицом вниз и проверки, которая убедила всех, кроме него, что система в целом работает правильно.

Павел перестал улыбаться.

Алина повернула кресло к нему.

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

— Значит, технике нельзя доверять?

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

Дверь открылась, вошёл Виктор с двумя папками.

— Уже пугаешь человека?

— Обучаю ограничениям.

— Тогда покажи ему его собственный профиль. Для закрепления материала.

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

Система вывела строки:

«Эмоциональное состояние: напряжение».

«Поведенческая стратегия: повышенный контроль окружения».

«Вероятность сокрытия намерений: 34%».

— Я что-то скрывал? — спросил Павел.

— Ты пытался запомнить дорогу, — сказала Алина. — Система увидела повышенный контроль окружения. Формально верно. А что именно ты хотел сделать с этой информацией — сбежать, вернуться или просто успокоиться — она не знает.

— Но написала про сокрытие намерений.

— Потому что кто-то попросил её оценивать именно это.

Она закрыла окно.

— Запомни: алгоритм отвечает не на вопрос мира. Он отвечает на вопрос, который мы сумели ему задать.

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

— Мы исправляем его постепенно, — сказала она. — Добавляем контекст, новые признаки, новые исключения.

— И когда он поймёт намерение?

Алина улыбнулась.

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

Виктор положил перед Павлом папку.

— А теперь скучная часть. Протоколы классификации за прошлый месяц. Найди случаи, где один и тот же человек получил разные оценки в разных камерах.

— Зачем?

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

Они склонились над экранами. Зелёные скелеты продолжали ходить, поворачиваться, поднимать ящики. Машина разбирала движения на углы и интервалы.

Павел впервые подумал, что увидеть человека целиком, возможно, труднее именно тогда, когда умеешь измерить почти каждую его часть.

Глава 4. Глухой телефон

Центр «Уральский». Штаб. День 2.

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

Когда Виктор вошёл, Круглов поднял голову.

— Павла привёл?

— Он нашёл рассогласование на «Камне». Думаю, должен объяснить сам.

Круглов кивнул на свободный стул.

— Заходи. Здесь сегодня всё равно нет ничего, что можно считать нормальной тайной.

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

— Докладывай, — сказал Круглов.

Павел коротко объяснил ошибку синхронизации. Круглов слушал внимательно, задавая вопросы не о формулах, а о последствиях.

— Если такое произойдёт одновременно на трёх станциях?

— Система начнёт создавать ложные траектории. Или склеит два объекта в один.

— Восстановится сама?

— Железо — да. Общая картина может остаться неправильной, пока кто-нибудь не заметит.

— Значит, резервирование сохраняет работу, но не гарантирует истину.

Павел не сразу понял, был ли это вопрос.

— Получается, так.

Круглов перевёл взгляд на Виктора.

— Дайте ему доступ к журналам КОР. Ограниченный, но настоящий. Не держите стажёром, если он уже полезен.

Виктор кивнул.

Разговор мог закончиться, но Круглов не отпустил их. Он развернул первый планшет.

— Посмотрите.

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

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

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

Третье письмо сообщало, что государственные контракты по снабжению стратегических объектов переходят под управление временного промышленного консорциума. Для продолжения поставок требовалось подтвердить имущественный состав и дать удалённый доступ к складским реестрам.

Там же содержалось обещание: топливо, медикаменты, комплектующие, эвакуация семей сотрудников. Всё то, чего прежнее ведомство уже не могло гарантировать. Цена выглядела умеренной — доступ к данным, которые позволили бы новому оператору понять, что именно он берётся снабжать.

— Они предлагают решение, — сказал Павел.

— Предлагают, — согласился Круглов. — И если я дам доступ, решение станет зависимостью. Кто контролирует обновления, топливо и запасные части, тот однажды сможет объяснить государству, на каких условиях государству разрешено пользоваться собственной системой.

— Все три документа подлинные, — сказал Круглов. — По крайней мере, проходят проверку на тех ключах, которыми располагаем мы.

— Они противоречат друг другу, — заметил Павел.

— Поэтому я и показываю.

Виктор медленно пролистал бумаги.

— Снабжение?

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

Круглов подошёл к карте. На ней красным карандашом были перечёркнуты два железнодорожных узла, чёрным обведены участки, где связь работала нестабильно.

— Государство не исчезает в один день, — сказал он. — Оно сначала продолжает существовать в документах. Потом каждый документ начинает утверждать, что только он настоящий.

— Что вы будете делать? — спросил Павел.

— Пока — не отдавать удалённый доступ никому.

— А если один из приказов законный?

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

Он вернулся за стол и открыл окно связи. На экране появилось уведомление: «Абонент недоступен. Повторить через 30 минут».

Круглов закрыл его слишком быстро, но Виктор успел увидеть имя.

— Дочь? — тихо спросил он.

Круглов ничего не ответил. Взял кружку, обнаружил, что чай давно остыл, и поставил обратно.

— Две недели назад говорила, что у них спокойно. Потом местную сеть передали новому оператору. Старый номер перестал существовать, новый реестр не отвечает. Я знаю, сколько воздушных целей пересекло область за последние сутки. Знаю, где стоят колонны и какие мосты перегружены. А жива ли моя семья — не знаю.

Никто не нашёл подходящих слов.

Круглов снова посмотрел на три планшета.

— До появления подтверждённого командования работаем по прежнему назначению. Не потому, что прежний приказ вечен. Потому что другого основания у нас пока нет.

— А если подтверждённого командования не будет? — спросил Павел.

Круглов задержал на нём взгляд.

— Тогда вопрос станет не техническим.

Он отпустил их.

В коридоре Виктор некоторое время шёл молча. Павел думал о матери и о том, что её телефон тоже мог однажды превратиться в номер из несуществующего реестра.

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

Глава 5. Сквозь землю

Полигон в горах. День 3.

Виктор разбудил Павла до подъёма.

— Одевайся теплее. Через пятнадцать минут у служебного шлюза.

— На поверхность?

— Пока она ещё существует.

В коридоре их ждали Корнеев и коренастый мужчина с рыжей щетиной, державший под мышкой катушку кабеля.

— Олег Минин, энергетик, — представил его Виктор. — Если что-нибудь не включается, виноват он. Если включается и горит — обычно тоже.

— Не слушай, — сказал Минин. — Главный инженер считает электричество природным явлением, которое появляется по его просьбе.

У шлюза к ним присоединилась Елена Савина, инженер жизнеобеспечения. Невысокая, собранная, с короткими светлыми волосами. Она проверила герметизацию, давление и датчики влажности, прежде чем разрешить открыть внешнюю дверь.

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

— Вот видишь, Павел, — вздохнул Виктор. — У каждого здесь своя форма власти.

Служебный тоннель петлял в толще горы. Павел снова пытался запоминать повороты, но быстро бросил. Здесь не было указателей; кабельные муфты, пятна сырости и номера аварийных отсеков повторялись слишком часто.

— Почему столько развилок? — спросил он.

— Часть — старые выработки, часть — ложные ходы, — ответил Корнеев. — Если кто-то войдёт без схемы, у него будет много времени подумать о неправильном выборе.

— А если проводник предаст?

Корнеев посмотрел на Виктора.

— Тогда никакая геометрия не поможет.

После получаса ходьбы впереди появился дневной свет. Замаскированная створка открылась в лесной склон. Влажный воздух пах хвоей, мхом и водой. Павел вдохнул глубоко, почти жадно.

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

— Сегодня испытываем не прибор, — сказал Виктор. — Связку.

Он показал на схему. Бортовой радар работал в диапазоне, который частично проходил сквозь листву и позволял замечать крупный металл и движение. Две наземные станции принимали отражённый сигнал с разных углов. «Узел» должен был объединить их данные и построить траектории объектов, которых не было видно обычной оптикой.

— Лес не становится прозрачным, — предупредил Виктор. — Он становится менее непрозрачным. Влажные ветки дают шум, склон отражает волну, вода в ручье выглядит убедительнее некоторых машин. Если кто-то скажет, что радар видит сквозь всё, покажи ему гору. Она быстро объяснит пределы технологии.

Испытание началось с задержкой. Минин ругался на нестабильный преобразователь, Савина по внутренней связи требовала не превышать лимит нагрузки, а Корнеев сообщал, что один из условных нарушителей потерял перчатку и отказывается быть невидимым без неё.

Пока устраняли неисправность, Павел помогал Минину закреплять силовой кабель. Земля под мхом была промёрзшей, металлические разъёмы обжигали пальцы холодом. Минин работал без спешки, каждый контакт проверял дважды.

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

— А если есть слишком много?

— Тогда превращается быстрее.

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

Павел помогал подключать КОР-модуль — блок оперативного резервирования размером с небольшой чемодан. Внутри находились вычислительные платы, защищённая память и независимый тактовый генератор.

— Если бортовой блок потеряет связь, он продолжит писать данные, — объяснил Виктор. — Когда канал восстановится, КОР должен встроить пропущенный участок в общую картину.

— По каким часам?

— По своим и по опорной станции.

— А если они расходятся?

Виктор посмотрел на него.

— Именно это ты сегодня и проверишь.

Беспилотник поднялся над лесом. На экране появились серые облака отражений. Сквозь них проступили два движущихся объекта: вездеход и пешая группа.

Через минуту рядом с людьми возникла третья траектория. Потом четвёртая.

— У Корнеева там только двое, — сказал Минин.

— Я умею размножаться, — отозвался Корнеев по рации. — Но не настолько быстро.

Виктор увеличил сектор. Две лишние отметки повторяли движение людей с небольшим запозданием.

— Многолучевое отражение от склона, — предположил он.

Павел просмотрел временные метки.

— Не похоже. Отражение меняло бы задержку при движении. Здесь она постоянная.

— Опять часы?

— Бортовой блок пишет по собственной шкале. Наземная станция — по внешнему эталону. После потери связи КОР добавляет пакет в конец текущего окна, а не туда, где он был получен. Получается один человек сейчас и его копия сорок миллисекунд назад.

— Сорок миллисекунд не создадут отдельную траекторию.

— Если фильтр считает скорость по нескольким пакетам, создадут. Особенно на повороте.

Виктор молча подвинул ему клавиатуру.

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

— Хорошо, — сказал Виктор. — Теперь второй маршрут.

Корнеев повёл людей глубже в лес. На этот раз система уверенно показала три объекта.

— У меня двое, — сообщил он.

— Третий стоит, — сказала Савина, наблюдавшая с пульта. — В трёх метрах от них.

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

На экране уверенность классификации составляла девяносто четыре процента.

Павел долго смотрел на цифру.

— После исправления она стала выше, — сказал он.

— Мы убрали ошибку времени, — ответил Виктор. — Система перестала сомневаться между настоящей целью и её копией. И увереннее назвала канистры человеком.

— Значит, мы сделали её точнее и одновременно не правее.

— Привыкай. Это две разные величины.

До обеда они меняли фильтры, повторяли проходы, сравнивали показания. Павел носил ящики, держал антенну на ветру, записывал числа и впервые чувствовал усталость, которая не казалась пустой.

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

— Ты учишь систему сомневаться в вернувшемся свидетеле, — заметил Виктор.

— Свидетель мог проспать часть события.

— Или вернуться с неправильными часами. Хорошо. Оставляем в тестовом контуре.

На коротком перерыве он достал термос. Виктор попробовал чай.

— Смородиновый лист?

— Мать добавляет.

— Береги термос. Здесь некоторые вещи сложнее заменить, чем вычислительный модуль.

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

Но именно эти сорок миллисекунд могли однажды решить, увидит система реальную угрозу или созданную ею самой.

На обратном пути Виктор сказал:

— Завтра включим твою сшивку на одном секторе основной сети.

— После одного испытания?

— После одного удачного и одного поучительного. У нас нет роскоши ждать идеального мира.

Павел хотел спросить, что именно заставляет их спешить. Но впереди шёл Корнеев, за спиной закрывалась замаскированная дверь, а в голове всё ещё стояла цифра девяносто четыре процента над двумя канистрами воды.

Глава 6. Эхо в тишине

Центр «Уральский». Операторская. Вечер. День 3.

Алина сидела за пультом шестой час. Спина затекла, кофе остыл, а свет экранов придал рукам болезненно-серый оттенок.

После истории с пожарным она перестала воспринимать высокий процент как разрешение перестать думать. Теперь каждый неопознанный сигнал сначала проходил через её недоверие, и только потом — через журнал тревог.

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

Каждая проверка убирала одно безопасное объяснение и оставляла несколько опасных.

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

Она не была похожа на обычный самолёт. Слишком малая отражающая поверхность, слишком низкая высота, слишком короткое время контакта. Объект возникал там, где лепесток станции «Камень» пересекался с пассивным контуром, и почти сразу уходил за хребет.

Система присвоила ему жёлтую метку:

«КЛАССИФИКАЦИЯ НЕДОСТАТОЧНА».

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

Дверь открылась. Павел поставил на стол термос и два бутерброда.

— Ты с обеда не выходила.

— Выходила.

— В соседний ряд стоек не считается.

Она не ответила.

Павел подошёл ближе.

— Что там?

— Пока ничего.

— Ничего обычно не получает отдельную метку.

Алина показала три коротких фрагмента.

— Малый объект. Идёт ниже линии хребта. Появляется только на стыке зон. Может быть помеха после сегодняшнего обновления.

— Моя сшивка?

— Не всё в мире связано с тобой, но я проверила. Временные метки чистые.

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

— Уже два разных канала, — сказал Павел.

— Два неполных канала. Это не то же самое, что подтверждение.

Алина запустила поиск по архиву. За последние сутки система нашла ещё четыре похожих всплеска, разбросанных по соседним секторам. Каждый по отдельности выглядел незначительно. Вместе они начинали напоминать чьё-то осторожное присутствие.

— Почему тревогу не поднимаешь? — спросил Павел.

— Потому что тревога — это не способ избавиться от сомнений. Если я подниму объект по каждому совпадению, через неделю мне перестанут верить. А если промолчу сейчас и это окажется угрозой, цена будет другой.

Она налила чай. Обожглась и поставила кружку обратно.

На экране появилась новая отметка. На этот раз — севернее, в зоне другой станции. Через две секунды пассивный приёмник снова зафиксировал короткий пакет.

Алина выпрямилась.

— Вот теперь у нас есть повторение в независимом секторе.

Она открыла служебный канал и отправила запрос на полную выгрузку исходных данных за ночь. Запрос требовал повышенного приоритета и автоматически попадал в журнал. Алина несколько секунд держала палец над подтверждением. После отправки её сомнение переставало быть личным: оно становилось фактом системы, который утром увидит Виктор, а при определённой оценке — и Круглов.

Павел заметил паузу.

— Боишься ошибиться?

— Боюсь, что однажды мы настроим всё так, чтобы система никогда не пропускала угрозу. Тогда она будет находить угрозу в каждом, кто ведёт себя не по шаблону.

— А сейчас?

— Сейчас боюсь обратного. Что я слишком хорошо научилась объяснять себе, почему тревогу можно не поднимать.

Она нажала подтверждение.

— Виктору позвонишь?

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

Павел остался рядом. Они молча собирали временные метки, уровни сигнала, границы радиотеней. За стенами операторской гудела вентиляция. Где-то далеко в горах небольшой объект появлялся на несколько секунд и снова исчезал.

Перед полуночью система выдала очередной пакет.

На карте стало пять точек.

Алина соединила их в хронологическом порядке. Линия получилась неровной и пока ничего не доказывала.

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

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

Но случайным шумом она уже не выглядела.

Глава 7. Холодный расчёт

Центр «Уральский». Операторская. Ночь. День 3–4.

Алина пыталась уснуть в кресле, но каждый раз, когда закрывала глаза, перед ней всплывали пять отметок. Они не складывались в маршрут — пока.

В два часа ночи пришли ещё три.

Она наложила на карту сетку, разделила сектор на квадраты и запустила анализ покрытия территории. Алгоритм перебрал варианты, отбросил прямолинейный маршрут, случайное патрулирование и погодный перенос.

На экране появилась ломаная линия.

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

— Газонокосилка, — сказала Алина вслух.

Так называли поиск с последовательным перекрытием полос. Не самый быстрый способ. Зато надёжный, если не знаешь точных координат цели.

Она позвонила Виктору.

Он ответил после третьего гудка: