Copyright (c) 2014-2025 Denis Pushkarev