fetch-zapret.mjs кладёт файлы через copyFile, а тот ставит текущее время:
после каждой сборки CI mtime новее при тех же байтах. Сравнение по времени
требовало UAC при каждом обновлении приложения и упиралось в занятый
WinDivert64.sys, ещё загруженный в ядро. Теперь сравниваем SHA-256, а если
файл всё же занят — уводим его в сторону переименованием.
Ожидание состояния службы переехало внутрь одного скрипта PowerShell: раньше
каждый опрос был отдельным процессом (~1 с на подъём .NET) с интервалом
300 мс, из чего и складывалась основная задержка включения.