pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/security/zoneminder



Module Name:    pkgsrc
Committed By:   gdt
Date:           Thu Jul 30 12:36:00 UTC 2026

Modified Files:
        pkgsrc/security/zoneminder: Makefile PLIST distinfo
        pkgsrc/security/zoneminder/patches: patch-CMakeLists.txt
            patch-scripts_ZoneMinder_lib_ZoneMinder_ConfigData.pm.in
            patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm
            patch-scripts_ZoneMinder_lib_ZoneMinder_Memory_Shared.pm
            patch-scripts_zm_in patch-scripts_zmpkg_pl_in
            patch-src_zm__rtp__source.cpp patch-src_zm__utils.cpp
            patch-src_zm_signal_cpp
Added Files:
        pkgsrc/security/zoneminder/patches: patch-src_zm__comms.h
            patch-src_zm__remote__camera__nvsocket.cpp
            patch-web_includes_database.php
Removed Files:
        pkgsrc/security/zoneminder/patches: patch-src_zm__event.cpp
            patch-src_zm__eventstream.cpp patch-src_zm__image.cpp
            patch-src_zm__monitor.cpp patch-src_zm__packet.h
            patch-src_zm__packetqueue.cpp patch-src_zm__regexp.cpp
            patch-src_zm__rtsp__server__fifo__source.cpp patch-src_zm__time.h
            patch-src_zm_comms_h patch-src_zm_logger_cpp
            patch-src_zm_remote_camera_h patch-src_zmu.cpp

Log Message:
security/zoneminder: Update to 1.38.3

Upstream NEWS, less bugfixes and minor improvements:

ZoneMinder 1.38.x Release Notes
TL;DR - Key Highlights

  - Role-Based Access Control - Enterprise-grade permission system with user roles
  - Modern Streaming - WebRTC, Go2RTC, RTSP2Web support with hardware acceleration
  - Monitor Function Redesign - Granular control with separate Capturing, Analysing, and Recording settings
  - Enhanced Protocols - ONVIF Events, MQTT, Amcrest API integration
  -Event Tagging - Flexible labeling and organization system
  - Server Monitoring - Real-time CPU, memory, and performance metrics
  - Geolocation - Geographic tracking for events and servers
  - Hardware Encoding - GPU acceleration for video encoding

Overview

ZoneMinder 1.38.x represents a major evolution from version 1.36.x,
introducing significant architectural improvements, new streaming
capabilities, enhanced security features, and extensive monitoring
enhancements. This release focuses on modernizing the platform with
support for contemporary streaming protocols, implementing
enterprise-grade access control, and improving performance and
scalability.

Major Feature Areas

1. Advanced User Access Control & Security

Role-Based Access Control (RBAC)

    Introduced comprehensive role-based permission system with
    reusable role templates New database tables: User_Roles,
    Role_Groups_Permissions, Role_Monitors_Permissions Replaced legacy
    comma-separated monitor ID strings with normalized permission
    tables Fine-grained permissions for both monitor groups and
    individual monitors

Enhanced User Management

    Added user profile fields: Name, Email, Phone User-specific
    montage layouts for personalized dashboards Improved security
    controls with private and system configuration flags

2. Modern Streaming & Multi-Protocol Support

WebRTC Integration

    Janus WebRTC Gateway support with audio streaming capabilities
    Go2RTC protocol support for alternative streaming RTSP2Web
    streaming with WebRTC/MSE/HLS options Configurable codec selection
    and stream profiles

Hardware-Accelerated Encoding

    Hardware acceleration support for video encoding (GPU encoding)
    New encoder configuration options: EncoderHWAccelName and
    EncoderHWAccelDevice Human-readable codec names replacing
    integer-based codec selection Optimized encoding for reduced CPU
    usage

3. Monitor Function Redesign

One of the most significant architectural changes in 1.38.x is the
redesign of the monitor Function field into three independent control
parameters. This provides much more granular control over monitor
behavior.

Legacy Function Field (1.36.x and earlier)

The traditional Function field was a single enum that controlled all aspects of a monitor's operation:

    None - Monitor disabled
    Monitor - Capture video only (no recording, no motion detection)
    Modect - Motion detection with recording on motion
    Record - Continuous recording without motion detection
    Mocord - Continuous recording with motion detection
    Nodect - Recording on external trigger, no built-in motion detection

New Granular Control (1.38.x)

The Function field has been split into three independent settings,
allowing fine-grained control:

Capturing enum (None/Ondemand/Always)

    Controls whether the monitor captures video from the camera
    None - No video capture (monitor effectively disabled)
    Ondemand - Capture only when needed (e.g., when viewing live or triggered by events)
    Always - Continuous video capture from the camera

Analysing enum (None/Always)

    Controls whether motion detection and analysis is performed
    None - No motion detection or analysis (equivalent to Monitor or Record modes)
    Always - Perform motion detection and analysis (equivalent to Modect or Mocord modes)

Recording enum (None/OnMotion/Always)

    Controls when video is saved to disk
    None - No recording (live viewing only)
    OnMotion - Record only when motion is detected or triggered
    Always - Continuous recording

Migration from Legacy Functions

The database automatically migrates old Function values to the new settings:

    None → Capturing: None, Analysing: None, Recording: None
    Monitor → Capturing: Always, Analysing: None, Recording: None
    Modect → Capturing: Always, Analysing: Always, Recording: OnMotion
    Record → Capturing: Always, Analysing: None, Recording: Always
    Mocord → Capturing: Always, Analysing: Always, Recording: Always
    Nodect → Capturing: Always, Analysing: None, Recording: OnMotion

Benefits of the New Design

    More flexible monitor configurations (e.g., analyze but don't record, or record without analysis)
    Better resource management by independently controlling capture, analysis, and storage
    Clearer separation of concerns for troubleshooting
    Foundation for future enhancements like conditional recording policies
    Easier to understand monitor behavior at a glance

4. Enhanced Camera Integration

Extended Protocol Support

    ONVIF Event Listener for direct camera event notifications
    Amcrest API support for Amcrest-branded cameras
    MQTT integration for IoT device communication and message handling

Camera Management

    Camera manufacturer and model database integration

5. Advanced Event Management

Event Tagging System

    Flexible event labeling with custom tags
    Many-to-many relationship between events and tags
    Improved event organization and filtering

Event Automation & Triggers

    Event start and end command execution
    Multiple event close modes: system, time, duration, idle, alarm-based
    Section length warnings for long recordings
    Filter execution intervals for scheduled automation

Event Metadata & Analytics

    Event data extensibility with custom metadata storage
    Geolocation tracking (latitude/longitude) for events
    Enhanced event reporting system with historical analytics

6. Performance & Infrastructure

Server Monitoring

    Comprehensive server statistics tracking
    CPU usage monitoring (User, Nice, System, Idle percentages)
    Memory and swap utilization metrics
    Timestamped performance data collection

Optimization Features

    Monitor startup delay to stagger initialization and reduce system load
    Enhanced status tracking with update timestamps
    Analysis image channel optimization (Full Color vs. Y-Channel) (reduces cpu use)
    Improved monitor soft delete with logical deletion flags
    Monitor importance levels (Normal/Less/Not) for stream prioritization
    Wall clock timestamp synchronization when doing passthrough

7. Display & User Interface

Montage Enhancements

    Expanded grid layouts: 1/2/4/5/6/7/8/9/10/12/16 Wide configurations
    User-specific montage layouts with personalized views
    options to locate/hide status information to fully use space

Playback Improvements

    Default player selection for preferred streaming client
    Enhanced video playback controls
    Improved event viewing experience
    Optimal mjpeg scaling to reduce cpu/bandwidth use while maintaining fidelity

** New file explorer view **

    limited to defined storage areas

** Watch and Cycle views merged **

    PTZ controls improved, with toggling of visibility

8. Storage & Recording

Granular Recording Control

With the redesign of the monitor Function field (see section 3),
recording behavior is now controlled independently through the
Recording, Capturing, and Analysing settings. This provides much
greater flexibility:

    Recording modes: None/OnMotion/Always
    Capturing modes: None/Ondemand/Always
    Analysis modes: None/Always

This allows configurations that weren't possible with the old Function
field, such as:

    Capture and analyze without recording (for alerting only)
    Record without analysis (for compliance/archival)
    On-demand capture with triggered recording

Email Notifications

    Email format options: Individual or Summary
    Improved event notification formatting
    Configurable alert delivery

9. Geographic & Metadata Features

Geolocation Support

    Geographic coordinates for monitors, events, and servers
    Location-based event tracking and analysis

10. Development & Integration

Database Schema Evolution

The 1.37.x series includes approximately 79 database schema updates
from 1.37.1 through 1.37.79, each introducing targeted improvements
and new capabilities. Key architectural changes include:

    Migration from string-based configuration to normalized relational tables
    Introduction of extensible metadata storage systems
    Enhanced foreign key relationships for referential integrity
    Improved indexing for query performance

Upgrade Considerations

Breaking Changes

    Permission system migration from comma-separated strings to normalized tables
    Some configuration parameters have been renamed or restructured
    Monitor soft delete may require updates to custom scripts that query monitor data


To generate a diff of this commit:
cvs rdiff -u -r1.104 -r1.105 pkgsrc/security/zoneminder/Makefile
cvs rdiff -u -r1.12 -r1.13 pkgsrc/security/zoneminder/PLIST
cvs rdiff -u -r1.28 -r1.29 pkgsrc/security/zoneminder/distinfo
cvs rdiff -u -r1.4 -r1.5 \
    pkgsrc/security/zoneminder/patches/patch-CMakeLists.txt \
    pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm \
    pkgsrc/security/zoneminder/patches/patch-src_zm__utils.cpp \
    pkgsrc/security/zoneminder/patches/patch-src_zm_signal_cpp
cvs rdiff -u -r1.2 -r1.3 \
    pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_ConfigData.pm.in \
    pkgsrc/security/zoneminder/patches/patch-scripts_zmpkg_pl_in
cvs rdiff -u -r1.3 -r1.4 \
    pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_Memory_Shared.pm
cvs rdiff -u -r1.6 -r1.7 \
    pkgsrc/security/zoneminder/patches/patch-scripts_zm_in \
    pkgsrc/security/zoneminder/patches/patch-src_zm__rtp__source.cpp
cvs rdiff -u -r0 -r1.1 \
    pkgsrc/security/zoneminder/patches/patch-src_zm__comms.h \
    pkgsrc/security/zoneminder/patches/patch-src_zm__remote__camera__nvsocket.cpp \
    pkgsrc/security/zoneminder/patches/patch-web_includes_database.php
cvs rdiff -u -r1.7 -r0 \
    pkgsrc/security/zoneminder/patches/patch-src_zm__event.cpp
cvs rdiff -u -r1.1 -r0 \
    pkgsrc/security/zoneminder/patches/patch-src_zm__eventstream.cpp \
    pkgsrc/security/zoneminder/patches/patch-src_zm__packet.h \
    pkgsrc/security/zoneminder/patches/patch-src_zm__packetqueue.cpp \
    pkgsrc/security/zoneminder/patches/patch-src_zm__regexp.cpp \
    pkgsrc/security/zoneminder/patches/patch-src_zm__rtsp__server__fifo__source.cpp \
    pkgsrc/security/zoneminder/patches/patch-src_zm__time.h
cvs rdiff -u -r1.3 -r0 \
    pkgsrc/security/zoneminder/patches/patch-src_zm__image.cpp
cvs rdiff -u -r1.5 -r0 \
    pkgsrc/security/zoneminder/patches/patch-src_zm__monitor.cpp \
    pkgsrc/security/zoneminder/patches/patch-src_zm_remote_camera_h \
    pkgsrc/security/zoneminder/patches/patch-src_zmu.cpp
cvs rdiff -u -r1.6 -r0 \
    pkgsrc/security/zoneminder/patches/patch-src_zm_comms_h
cvs rdiff -u -r1.9 -r0 \
    pkgsrc/security/zoneminder/patches/patch-src_zm_logger_cpp

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/security/zoneminder/Makefile
diff -u pkgsrc/security/zoneminder/Makefile:1.104 pkgsrc/security/zoneminder/Makefile:1.105
--- pkgsrc/security/zoneminder/Makefile:1.104   Fri Jul 24 15:48:18 2026
+++ pkgsrc/security/zoneminder/Makefile Thu Jul 30 12:35:59 2026
@@ -1,33 +1,32 @@
-# $NetBSD: Makefile,v 1.104 2026/07/24 15:48:18 taca Exp $
+# $NetBSD: Makefile,v 1.105 2026/07/30 12:35:59 gdt Exp $
 
-# (1st-parent) commits past 1.36.37 on release-1.36
-#   git log --first-parent --oneline --reverse 1.36.37..
-VERSION=       1.36.37.10
+# This is a twisty maze of variables.  The plan is to edit VERSION
+# (the zoneminder version) on upgrades, and have everything flow from
+# there.
+VERSION=       1.38.3
 # Distfile is ZoneMinder but package and tarball contents are zoneminder.
 NAME_DIST=     ZoneMinder
 NAME_LOWER=    zoneminder
-
 PKGNAME=       ${DISTNAME:S/${NAME_DIST}-/${NAME_LOWER}-/}
-PKGREVISION=   6
+PKGREVISION=   1
 DISTNAME=      ${NAME_DIST}-${VERSION}
-#WRKSRC=               ${WRKDIR}/${NAME_LOWER}-${VERSION}
 WRKSRC=                ${WRKDIR}/${NAME_LOWER}-${GITHUB_TAG}
 CATEGORIES=    security
 MASTER_SITES=  ${MASTER_SITE_GITHUB:=${NAME_DIST}/}
 GITHUB_PROJECT=        ${NAME_DIST}
 GITHUB_TYPE=   tag
-#GITHUB_TAG=   ${PKGVERSION_NOREV}
-GITHUB_TAG=    5ca31d88f7069ec4a4cc758e7ea05353573d3304
+GITHUB_TAG=    ${VERSION}
 
 ## Submodules (from ZoneMinder's .gitmodules file)
 # We use a specific commit on each branch, to avoid distfile versioning woes
 # and to meet pkgsrc expectations that a fixed version is fixed software.
-# Beware that RtspServer might get updates and should be checked.
+# Upstream checks in submodules but this is not apparent in git tarballs.
+#   https://github.com/ZoneMinder/zoneminder/issues/5010
+# Check for updates every release.
 GITHUB_SUBMODULES+=    FriendsOfCake crud 14292374ccf1328f2d5db20897bd06f99ba4d938 web/api/app/Plugin/Crud
 GITHUB_SUBMODULES+=    ZoneMinder CakePHP-Enum-Behavior ea90c0cd7f6e24333a90885e563b5d30b793db29 web/api/app/Plugin/CakePHP-Enum-Behavior
-# cherry-pick https://github.com/ZoneMinder/RtspServer/pull/12
-#GITHUB_SUBMODULES+=   ZoneMinder RtspServer 055d81fe1293429e496b19104a9ed3360755a440 dep/RtspServer
-GITHUB_SUBMODULES+=    gdt RtspServer 2719899a3f74ef0a9bb213d34998bcc74cc1f17f dep/RtspServer
+GITHUB_SUBMODULES+=    ZoneMinder RtspServer a071599575f60a6f1f424e1f9b408dad7da734a8 dep/RtspServer
+GITHUB_SUBMODULES+=    chmike CxxUrl eaf46c0207df24853a238d4499e7f4426d9d234c dep/CxxUrl
 
 MAINTAINER=    dsainty%NetBSD.org@localhost
 #MAINTAINER+=  gdt%NetBSD.org@localhost
@@ -35,10 +34,9 @@ HOMEPAGE=    https://www.zoneminder.com/
 COMMENT=       Video camera security and surveillance solution
 LICENSE=       gnu-gpl-v2
 
-# ZoneMinder without a web server does not really make sense (and if
-# it did, what is omitted is surely not right).  Require a webserver
-# (until someone wanting to not have one provides rationale and a
-# patch).
+# ZoneMinder without a web server does not really make sense.  Require
+# a webserver (until someone wanting to not have one provides
+# rationale and a patch).
 PKG_OPTIONS_VAR=               PKG_OPTIONS.zoneminder
 PKG_OPTIONS_REQUIRED_GROUPS=   webserver
 PKG_OPTIONS_GROUP.webserver=   apache nginx
@@ -48,6 +46,7 @@ PKG_SUGGESTED_OPTIONS=                apache
 # package supports mysql and MariaDB, which must be handled separately
 # because p5-DBD-mysql is (2026-01) mysql only, with p5-DBD-MariaDB
 # for MariaDB.
+#   https://github.com/ZoneMinder/zoneminder/issues/5008
 PKG_OPTIONS_REQUIRED_GROUPS+=  database
 PKG_OPTIONS_GROUP.database=    mysql mariadb
 PKG_SUGGESTED_OPTIONS+=                mariadb
@@ -114,16 +113,19 @@ OWN_DIRS_PERMS+=  ${VARBASE}/run/zm ${REA
 # NB: Startup script must create /var/run/zm.
 CMAKE_CONFIGURE_ARGS+= -DZM_SOCKDIR=${VARBASE}/run/zm
 
-# ZM_TMPDIR might or might not be used.
 CMAKE_CONFIGURE_ARGS+= -DZM_TMPDIR=${VARBASE}/tmp/zm
 OWN_DIRS_PERMS+=       ${VARBASE}/tmp/zm ${REAL_ROOT_USER} ${APACHE_GROUP} 775
 
-# In some configs, ZM_LOGDIR is apparently unused.
+# Probably, one can configure logging to ZM_LOGDIR.
 CMAKE_CONFIGURE_ARGS+= -DZM_LOGDIR=${VARBASE}/log/zm
 OWN_DIRS_PERMS+=       ${VARBASE}/log/zm ${REAL_ROOT_USER} ${APACHE_GROUP} 775
 
+# Remediate cmake searching for rm in the build environment, finding
+# tools wrappers, and assuming that is that way in the runtime environment.
+CMAKE_CONFIGURE_ARGS+= -DZM_PATH_RM=/bin/rm
+
 # Choose directory where zoneminder can create shm files (for zmc).
-# \todo Define this per-OS.
+# \todo Define this per-OS, perhaps hoisting to mk.
 ZM_SHM=                        /var/shm        # NetBSD
 CMAKE_CONFIGURE_ARGS+= -DZM_PATH_MAP=${ZM_SHM}
 
@@ -219,14 +221,12 @@ ZM_PERL_PATH+=    scripts/zmx10.pl.in
 
 ## DATABASE
 
-# In case of trouble, see files/upstream-PR-3914 for p5-DBD-mysql woes
-# and changes to address them.n
-
-# There is no reason to suspect that any version in pkgsrc is
+# There is no reason to suspect that any MariaDB version in pkgsrc is
 # problematic, but most have not been tested.
 .if !empty(PKG_OPTIONS:Mmariadb)
 # 2026-01: 1.36 works with mariadb 10.6 on NetBSD
 # 2024-01: 1.36 works with mariadb 11.2 on GNU/Linux
+# 2026-07: 1.38 works with mariadb 10.6 on NetBSD
 DEPENDS+=                      p5-DBD-MariaDB-[0-9]*:../../databases/p5-DBD-MariaDB
 MYSQL_VERSIONS_ACCEPTED=       mariadb118 mariadb114 mariadb1011 mariadb106 mariadb105
 CMAKE_CONFIGURE_ARGS+=         -DZM_DB_TYPE=MariaDB
@@ -235,18 +235,23 @@ CMAKE_CONFIGURE_ARGS+=            -DZM_DB_TYPE=Mar
 DEPENDS+=                      p5-DBD-mysql-[0-9]*:../../databases/p5-DBD-mysql
 MYSQL_VERSIONS_ACCEPTED=       80
 CMAKE_CONFIGURE_ARGS+=         -DZM_DB_TYPE=mysql
+# WARNING: Omit the mysql hunk in the CMakeLists patch, if wanting to
+# use mysql, and feel free to send in a cleaner solution -- omitted
+# for now because there appear to be zero mysql users.
 .endif
 
 .include "../../mk/mysql.buildlink3.mk"
 
 ## PHP
 
+# php-apcu fails with 56, and there's no reason to think about 56.
 # 20250103 1.36.37:
 #   74 has not been tested recently, but there's no reason to try to use it.
 #   81 has not been tested recently; probably it works.
-#   82 and 83 work.  
+#   82 and 83 work.
 #   84 has not been tested, but FreeBSD ports seems to think it works.
-# php-apcu fails with 56, and there's no reason to think about 56.
+# 202060729 1.38.2:
+#   83 works
 PHP_VERSIONS_INCOMPATIBLE=     56
 
 .include "../../lang/php/phpversion.mk"
@@ -277,7 +282,9 @@ CMAKE_CONFIGURE_ARGS+=      -DZM_WEB_GROUP=${
 # other random cgi scripts have been installed by other packages.
 # This sets the path to be used, and httpd/nginx config must alias
 # that path to $PREFIX/libexec/zoneminder/cgi-bin/.
-CMAKE_CONFIGURE_ARGS+= -DZM_PATH_ZMS=zm/cgi-bin/nph-zms
+# \todo Add a leading / to avoid cmake deciding to make it absolute by
+# prepending workdir.
+CMAKE_CONFIGURE_ARGS+= -DZM_PATH_ZMS=/zm/cgi-bin/nph-zms
 
 .if !empty(PKG_OPTIONS:Mapache)
 .include "../../mk/apache.mk"
@@ -324,10 +331,9 @@ PRINT_PLIST_AWK+=  { gsub(/^.+\/examples\
 ## PKGSRC PHASE FIXUPS
 
 # Copy the example config to WRKSRC because we SUBST it, and files/ should be read only.
-# Avoid conflict with C++20 <version> - intertwined with patch-CMakeLists.txt
+
 post-extract:
        ${CP} ${FILESDIR}/httpd-zoneminder.conf ${WRKSRC}/httpd-zoneminder.conf
-       ${MV} ${WRKSRC}/version ${WRKSRC}/version.txt
 
 # Omit patchfiles from PLIST if present.  The pre-configure step below
 # should prevent this from being necessary.
@@ -340,17 +346,34 @@ pre-configure:
 
 EGDIR=                 share/examples/${PKGBASE}
 DOCDIR=                        share/doc/${PKGBASE}
-INSTALLATION_DIRS+=    ${EGDIR} ${EGDIR}/config ${EGDIR}/apache
+INSTALLATION_DIRS+=    ${EGDIR} ${EGDIR}/config ${EGDIR}/config/conf.d ${EGDIR}/apache
 CONF_FILES+=           ${PREFIX}/${EGDIR}/config/zm.conf ${PKG_SYSCONFDIR}/zm.conf
+CONF_FILES+=           ${PREFIX}/${EGDIR}/config/conf.d/01-system-paths.conf ${PKG_SYSCONFDIR}/conf.d/01-system-paths.conf
+CONF_FILES+=           ${PREFIX}/${EGDIR}/config/conf.d/02-multiserver.conf ${PKG_SYSCONFDIR}/conf.d/02-multiserver.conf
+CONF_FILES+=           ${PREFIX}/${EGDIR}/config/conf.d/README ${PKG_SYSCONFDIR}/conf.d/README
 INSTALLATION_DIRS+=    bin share/examples/rc.d share/zoneminder/db
 INSTALLATION_DIRS+=    ${DOCDIR}
+
 post-install:
+       # Remediate bundled deps installing things.
+       ${RM}           -rf ${DESTDIR}${PREFIX}/include/jwt-cpp
+       ${RM}           -rf ${DESTDIR}${PREFIX}/include/picojson
+       ${RM}           -rf ${DESTDIR}${PREFIX}/cmake
+       ${RM}           -rf ${DESTDIR}${PREFIX}/include/CxxUrl
+       ${RM}           -rf ${DESTDIR}${PREFIX}/lib/cmake
+       ${RM}           -f ${DESTDIR}${PREFIX}/lib/libCxxUrl.a
+       ${RMDIR}        ${DESTDIR}${PREFIX}/include
+       # Config files to EGDIR.
        ${INSTALL_DATA} ${WRKSRC}/httpd-zoneminder.conf ${DESTDIR}${PREFIX}/${EGDIR}/apache/httpd-zoneminder.conf
        ${INSTALL_DATA} ${WRKSRC}/${CMAKE_BUILD_DIR}/zm.conf ${DESTDIR}${PREFIX}/${EGDIR}/config/zm.conf
+       ${INSTALL_DATA} ${WRKSRC}/${CMAKE_BUILD_DIR}/conf.d/* ${DESTDIR}${PREFIX}/${EGDIR}/config/conf.d
+       # rc.d to examples
 .if ${INIT_SYSTEM} == "rc.d"
        ${INSTALL_SCRIPT} ${WRKSRC}/${CMAKE_BUILD_DIR}/scripts/zm ${DESTDIR}${PREFIX}/share/examples/rc.d/zoneminder
 .endif
+       # Install SQL data files.   \todo Check and fix upstream.
        ${INSTALL_DATA} ${WRKSRC}/db/*.sql ${DESTDIR}${PREFIX}/share/zoneminder/db/
+       # Install pkgsrc README.
        ${INSTALL_DATA} files/README-pkgsrc.md ${DESTDIR}${PREFIX}/${DOCDIR}
 
 .include "../../devel/cmake/build.mk"

Index: pkgsrc/security/zoneminder/PLIST
diff -u pkgsrc/security/zoneminder/PLIST:1.12 pkgsrc/security/zoneminder/PLIST:1.13
--- pkgsrc/security/zoneminder/PLIST:1.12       Mon Jan  5 16:02:44 2026
+++ pkgsrc/security/zoneminder/PLIST    Thu Jul 30 12:35:59 2026
@@ -1,10 +1,11 @@
-@comment $NetBSD: PLIST,v 1.12 2026/01/05 16:02:44 gdt Exp $
+@comment $NetBSD: PLIST,v 1.13 2026/07/30 12:35:59 gdt Exp $
 bin/zm_rtsp_server
 bin/zmaudit.pl
 bin/zmc
 bin/zmcamtool.pl
 bin/zmcontrol.pl
 bin/zmdc.pl
+bin/zmeventtool.pl
 bin/zmfilter.pl
 bin/zmonvif-probe.pl
 bin/zmonvif-trigger.pl
@@ -2206,6 +2207,7 @@ ${PERL5_SUB_INSTALLVENDORLIB}/ONVIF/PTZ/
 ${PERL5_SUB_INSTALLVENDORLIB}/ONVIF/PTZ/Elements/VideoEncoderConfiguration.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ONVIF/PTZ/Elements/VideoSourceConfiguration.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ONVIF/PTZ/Interfaces/PTZ/PTZPort.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ONVIF/PTZ/PTZ.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ONVIF/PTZ/Typemaps/PTZ.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ONVIF/PTZ/Types/AACDecOptions.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ONVIF/PTZ/Types/AbsoluteFocus.pm
@@ -2924,6 +2926,7 @@ ${PERL5_SUB_INSTALLVENDORLIB}/WSNotifica
 ${PERL5_SUB_INSTALLVENDORLIB}/WSNotification/Elements/GetCurrentMessageResponse.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/WSNotification/Elements/GetMessages.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/WSNotification/Elements/GetMessagesResponse.pm
+${PERL5_SUB_INSTALLVENDORLIB}/WSNotification/Elements/Header.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/WSNotification/Elements/InvalidFilterFault.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/WSNotification/Elements/InvalidMessageContentExpressionFault.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/WSNotification/Elements/InvalidProducerPropertiesExpressionFault.pm
@@ -3053,25 +3056,32 @@ ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/FOSCAMR2C.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Floureon.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/FoscamCGI.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Grandstream.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/HikVision.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/IPCAMIOS.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/IPCC7210W.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Instar720p.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Keekoon.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/LoftekSentinel.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/M8640.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/MaginonIPC.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Ncs370.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Netcat.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/ONVIF.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/PSIA.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/PanasonicIP.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/PelcoD.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/PelcoP.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Reolink.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Reolink_HTTP.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/SPP1802SWPTZ.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Serial_HEX_PelcoD.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/SkyIPCam7xx.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Sony.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/TapoC520WS_ONVIF.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Toshiba_IK_WB11A.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Trendnet.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Uniview.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Visca.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Vivotek_ePTZ.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Wanscam.pm
@@ -3081,19 +3091,27 @@ ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Database.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Event.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Event_Summary.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Event_Tag.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Filter.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Frame.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/General.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Group.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Logger.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Manufacturer.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Memory.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Memory/Mapped.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Memory/Shared.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Model.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Monitor.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Monitor_Status.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Network.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/ONVIF.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Object.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Object_Type.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Server.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/State.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Storage.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Tag.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Trigger/Channel.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Trigger/Channel/File.pm
 ${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Trigger/Channel/Handle.pm
@@ -5289,6 +5307,7 @@ ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ONVIF:
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ONVIF::PTZ::Elements::VideoEncoderConfiguration.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ONVIF::PTZ::Elements::VideoSourceConfiguration.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ONVIF::PTZ::Interfaces::PTZ::PTZPort.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ONVIF::PTZ::PTZ.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ONVIF::PTZ::Typemaps::PTZ.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ONVIF::PTZ::Types::AACDecOptions.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ONVIF::PTZ::Types::AbsoluteFocus.3
@@ -6129,7 +6148,9 @@ ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMi
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::FI9831W.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::FOSCAMR2C.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::Floureon.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::Grandstream.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::IPCC7210W.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::Instar720p.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::M8640.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::MaginonIPC.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::Ncs370.3
@@ -6137,7 +6158,9 @@ ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMi
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::PanasonicIP.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::PelcoD.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::PelcoP.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::Reolink_HTTP.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::SPP1802SWPTZ.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::Serial_HEX_PelcoD.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::SkyIPCam7xx.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::Sony.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::Toshiba_IK_WB11A.3
@@ -6150,17 +6173,24 @@ ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMi
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Database.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Event.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Event_Summary.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Event_Tag.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Filter.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Frame.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::General.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Group.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Logger.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Manufacturer.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Memory.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Model.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Monitor.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Monitor_Status.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Network.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::ONVIF.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Object.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Server.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::State.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Storage.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Tag.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Trigger::Channel.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Trigger::Channel::File.3
 ${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Trigger::Channel::Handle.3
@@ -6179,6 +6209,7 @@ man/man8/zmc.8
 man/man8/zmcamtool.pl.8
 man/man8/zmcontrol.pl.8
 man/man8/zmdc.pl.8
+man/man8/zmeventtool.pl.8
 man/man8/zmfilter.pl.8
 man/man8/zmonvif-probe.pl.8
 man/man8/zmonvif-trigger.pl.8
@@ -6198,7 +6229,16 @@ share/applications/zoneminder.desktop
 share/doc/zoneminder/README-pkgsrc.md
 ${PLIST.rcd}share/examples/rc.d/zoneminder
 share/examples/zoneminder/apache/httpd-zoneminder.conf
+share/examples/zoneminder/config/conf.d/01-system-paths.conf
+share/examples/zoneminder/config/conf.d/02-multiserver.conf
+share/examples/zoneminder/config/conf.d/README
 share/examples/zoneminder/config/zm.conf
+share/zoneminder/MacVendors.json
+share/zoneminder/db/Object_Types.sql
+share/zoneminder/db/User_Preferences.sql
+share/zoneminder/db/manufacturers.sql
+share/zoneminder/db/models.sql
+share/zoneminder/db/monitors_dbupdate.sql
 share/zoneminder/db/test.monitor.sql
 share/zoneminder/db/triggers.sql
 share/zoneminder/db/zm_create.sql
@@ -6368,6 +6408,7 @@ share/zoneminder/db/zm_update-1.35.25.sq
 share/zoneminder/db/zm_update-1.35.26.sql
 share/zoneminder/db/zm_update-1.35.27.sql
 share/zoneminder/db/zm_update-1.35.28.sql
+share/zoneminder/db/zm_update-1.35.29.sql
 share/zoneminder/db/zm_update-1.35.3.sql
 share/zoneminder/db/zm_update-1.35.4.sql
 share/zoneminder/db/zm_update-1.35.5.sql
@@ -6375,12 +6416,84 @@ share/zoneminder/db/zm_update-1.35.6.sql
 share/zoneminder/db/zm_update-1.35.7.sql
 share/zoneminder/db/zm_update-1.35.8.sql
 share/zoneminder/db/zm_update-1.35.9.sql
-share/zoneminder/db/zm_update-1.36.16.sql
-share/zoneminder/db/zm_update-1.36.18.sql
-share/zoneminder/db/zm_update-1.36.34.sql
-share/zoneminder/db/zm_update-1.36.37.sql
+share/zoneminder/db/zm_update-1.36.20.sql
 share/zoneminder/db/zm_update-1.36.6.sql
-share/zoneminder/db/zm_update-1.36.9.sql
+share/zoneminder/db/zm_update-1.37.1.sql
+share/zoneminder/db/zm_update-1.37.10.sql
+share/zoneminder/db/zm_update-1.37.11.sql
+share/zoneminder/db/zm_update-1.37.12.sql
+share/zoneminder/db/zm_update-1.37.13.sql
+share/zoneminder/db/zm_update-1.37.14.sql
+share/zoneminder/db/zm_update-1.37.15.sql
+share/zoneminder/db/zm_update-1.37.16.sql
+share/zoneminder/db/zm_update-1.37.17.sql
+share/zoneminder/db/zm_update-1.37.18.sql
+share/zoneminder/db/zm_update-1.37.19.sql
+share/zoneminder/db/zm_update-1.37.2.sql
+share/zoneminder/db/zm_update-1.37.20.sql
+share/zoneminder/db/zm_update-1.37.21.sql
+share/zoneminder/db/zm_update-1.37.22.sql
+share/zoneminder/db/zm_update-1.37.23.sql
+share/zoneminder/db/zm_update-1.37.25.sql
+share/zoneminder/db/zm_update-1.37.26.sql
+share/zoneminder/db/zm_update-1.37.27.sql
+share/zoneminder/db/zm_update-1.37.28.sql
+share/zoneminder/db/zm_update-1.37.29.sql
+share/zoneminder/db/zm_update-1.37.3.sql
+share/zoneminder/db/zm_update-1.37.30.sql
+share/zoneminder/db/zm_update-1.37.31.sql
+share/zoneminder/db/zm_update-1.37.32.sql
+share/zoneminder/db/zm_update-1.37.34.sql
+share/zoneminder/db/zm_update-1.37.35.sql
+share/zoneminder/db/zm_update-1.37.36.sql
+share/zoneminder/db/zm_update-1.37.37.sql
+share/zoneminder/db/zm_update-1.37.38.sql
+share/zoneminder/db/zm_update-1.37.39.sql
+share/zoneminder/db/zm_update-1.37.4.sql
+share/zoneminder/db/zm_update-1.37.40.sql
+share/zoneminder/db/zm_update-1.37.41.sql
+share/zoneminder/db/zm_update-1.37.42.sql
+share/zoneminder/db/zm_update-1.37.43.sql
+share/zoneminder/db/zm_update-1.37.44.sql
+share/zoneminder/db/zm_update-1.37.45.sql
+share/zoneminder/db/zm_update-1.37.46.sql
+share/zoneminder/db/zm_update-1.37.47.sql
+share/zoneminder/db/zm_update-1.37.48.sql
+share/zoneminder/db/zm_update-1.37.49.sql
+share/zoneminder/db/zm_update-1.37.5.sql
+share/zoneminder/db/zm_update-1.37.50.sql
+share/zoneminder/db/zm_update-1.37.51.sql
+share/zoneminder/db/zm_update-1.37.52.sql
+share/zoneminder/db/zm_update-1.37.53.sql
+share/zoneminder/db/zm_update-1.37.54.sql
+share/zoneminder/db/zm_update-1.37.55.sql
+share/zoneminder/db/zm_update-1.37.56.sql
+share/zoneminder/db/zm_update-1.37.57.sql
+share/zoneminder/db/zm_update-1.37.58.sql
+share/zoneminder/db/zm_update-1.37.59.sql
+share/zoneminder/db/zm_update-1.37.6.sql
+share/zoneminder/db/zm_update-1.37.60.sql
+share/zoneminder/db/zm_update-1.37.62.sql
+share/zoneminder/db/zm_update-1.37.63.sql
+share/zoneminder/db/zm_update-1.37.66.sql
+share/zoneminder/db/zm_update-1.37.67.sql
+share/zoneminder/db/zm_update-1.37.68.sql
+share/zoneminder/db/zm_update-1.37.69.sql
+share/zoneminder/db/zm_update-1.37.7.sql
+share/zoneminder/db/zm_update-1.37.70.sql
+share/zoneminder/db/zm_update-1.37.71.sql
+share/zoneminder/db/zm_update-1.37.72.sql
+share/zoneminder/db/zm_update-1.37.73.sql
+share/zoneminder/db/zm_update-1.37.74.sql
+share/zoneminder/db/zm_update-1.37.75.sql
+share/zoneminder/db/zm_update-1.37.76.sql
+share/zoneminder/db/zm_update-1.37.77.sql
+share/zoneminder/db/zm_update-1.37.78.sql
+share/zoneminder/db/zm_update-1.37.79.sql
+share/zoneminder/db/zm_update-1.37.8.sql
+share/zoneminder/db/zm_update-1.37.80.sql
+share/zoneminder/db/zm_update-1.37.9.sql
+share/zoneminder/db/zm_update-1.38.1.sql
 share/zoneminder/fonts/default.zmfnt
 ${ZM_HTTPD_ROOT}/ajax/add_monitors.php
 ${ZM_HTTPD_ROOT}/ajax/alarm.php
@@ -6394,6 +6507,8 @@ ${ZM_HTTPD_ROOT}/ajax/events.php
 ${ZM_HTTPD_ROOT}/ajax/frames.php
 ${ZM_HTTPD_ROOT}/ajax/log.php
 ${ZM_HTTPD_ROOT}/ajax/modal.php
+${ZM_HTTPD_ROOT}/ajax/modals/add_monitors_import.php
+${ZM_HTTPD_ROOT}/ajax/modals/areyoustillwatching.php
 ${ZM_HTTPD_ROOT}/ajax/modals/controlpreset.php
 ${ZM_HTTPD_ROOT}/ajax/modals/delconfirm.php
 ${ZM_HTTPD_ROOT}/ajax/modals/device.php
@@ -6402,6 +6517,7 @@ ${ZM_HTTPD_ROOT}/ajax/modals/download.ph
 ${ZM_HTTPD_ROOT}/ajax/modals/enoperm.php
 ${ZM_HTTPD_ROOT}/ajax/modals/eventdetail.php
 ${ZM_HTTPD_ROOT}/ajax/modals/eventrename.php
+${ZM_HTTPD_ROOT}/ajax/modals/eventunarchive.php
 ${ZM_HTTPD_ROOT}/ajax/modals/filterdebug.php
 ${ZM_HTTPD_ROOT}/ajax/modals/function.php
 ${ZM_HTTPD_ROOT}/ajax/modals/group.php
@@ -6409,16 +6525,22 @@ ${ZM_HTTPD_ROOT}/ajax/modals/log_export.
 ${ZM_HTTPD_ROOT}/ajax/modals/logout.php
 ${ZM_HTTPD_ROOT}/ajax/modals/objdetect.php
 ${ZM_HTTPD_ROOT}/ajax/modals/optionhelp.php
+${ZM_HTTPD_ROOT}/ajax/modals/saveconfirm.php
 ${ZM_HTTPD_ROOT}/ajax/modals/server.php
 ${ZM_HTTPD_ROOT}/ajax/modals/settings.php
 ${ZM_HTTPD_ROOT}/ajax/modals/shutdown.php
 ${ZM_HTTPD_ROOT}/ajax/modals/state.php
 ${ZM_HTTPD_ROOT}/ajax/modals/storage.php
+${ZM_HTTPD_ROOT}/ajax/models.php
+${ZM_HTTPD_ROOT}/ajax/reports.php
 ${ZM_HTTPD_ROOT}/ajax/shutdown.php
 ${ZM_HTTPD_ROOT}/ajax/snapshots.php
 ${ZM_HTTPD_ROOT}/ajax/stats.php
 ${ZM_HTTPD_ROOT}/ajax/status.php
 ${ZM_HTTPD_ROOT}/ajax/stream.php
+${ZM_HTTPD_ROOT}/ajax/tags.php
+${ZM_HTTPD_ROOT}/ajax/trigger.php
+${ZM_HTTPD_ROOT}/ajax/v4l2_settings.php
 ${ZM_HTTPD_ROOT}/ajax/watch.php
 ${ZM_HTTPD_ROOT}/ajax/zone.php
 ${ZM_HTTPD_ROOT}/api/.editorconfig
@@ -6444,40 +6566,58 @@ ${ZM_HTTPD_ROOT}/api/app/Console/cake
 ${ZM_HTTPD_ROOT}/api/app/Console/cake.bat
 ${ZM_HTTPD_ROOT}/api/app/Console/cake.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/AppController.php
+${ZM_HTTPD_ROOT}/api/app/Controller/CameraModelsController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/Component/ConfigParserComponent.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/Component/FilterComponent.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/Component/ImageComponent.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/Component/ScalerComponent.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/ConfigsController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/ControlsController.php
+${ZM_HTTPD_ROOT}/api/app/Controller/EventDataController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/EventsController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/FramesController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/GroupsController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/HostController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/LogsController.php
+${ZM_HTTPD_ROOT}/api/app/Controller/ManufacturersController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/MonitorsController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/PagesController.php
+${ZM_HTTPD_ROOT}/api/app/Controller/RolesController.php
+${ZM_HTTPD_ROOT}/api/app/Controller/ServerStatsController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/ServersController.php
+${ZM_HTTPD_ROOT}/api/app/Controller/SnapshotsController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/StatesController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/StorageController.php
+${ZM_HTTPD_ROOT}/api/app/Controller/TagsController.php
+${ZM_HTTPD_ROOT}/api/app/Controller/UserPreferenceController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/UsersController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/ZonePresetsController.php
 ${ZM_HTTPD_ROOT}/api/app/Controller/ZonesController.php
 ${ZM_HTTPD_ROOT}/api/app/Model/AppModel.php
+${ZM_HTTPD_ROOT}/api/app/Model/CameraModel.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Config.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Control.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Event.php
+${ZM_HTTPD_ROOT}/api/app/Model/EventData.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Event_Summary.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Frame.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Group.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Host.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Log.php
+${ZM_HTTPD_ROOT}/api/app/Model/Manufacturer.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Monitor.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Monitor_Status.php
+${ZM_HTTPD_ROOT}/api/app/Model/Role.php
+${ZM_HTTPD_ROOT}/api/app/Model/RoleGroupPermission.php
+${ZM_HTTPD_ROOT}/api/app/Model/RoleMonitorPermission.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Server.php
+${ZM_HTTPD_ROOT}/api/app/Model/ServerStat.php
+${ZM_HTTPD_ROOT}/api/app/Model/Snapshot.php
 ${ZM_HTTPD_ROOT}/api/app/Model/State.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Storage.php
+${ZM_HTTPD_ROOT}/api/app/Model/Tag.php
 ${ZM_HTTPD_ROOT}/api/app/Model/User.php
+${ZM_HTTPD_ROOT}/api/app/Model/UserPreference.php
 ${ZM_HTTPD_ROOT}/api/app/Model/Zone.php
 ${ZM_HTTPD_ROOT}/api/app/Model/ZonePreset.php
 ${ZM_HTTPD_ROOT}/api/app/Plugin/CakePHP-Enum-Behavior/Model/Behavior/EnumBehavior.php
@@ -6557,6 +6697,14 @@ ${ZM_HTTPD_ROOT}/api/app/View/Emails/htm
 ${ZM_HTTPD_ROOT}/api/app/View/Emails/text/default.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Errors/error400.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Errors/error500.ctp
+${ZM_HTTPD_ROOT}/api/app/View/EventData/json/add.ctp
+${ZM_HTTPD_ROOT}/api/app/View/EventData/json/edit.ctp
+${ZM_HTTPD_ROOT}/api/app/View/EventData/json/index.ctp
+${ZM_HTTPD_ROOT}/api/app/View/EventData/json/view.ctp
+${ZM_HTTPD_ROOT}/api/app/View/EventData/xml/add.ctp
+${ZM_HTTPD_ROOT}/api/app/View/EventData/xml/edit.ctp
+${ZM_HTTPD_ROOT}/api/app/View/EventData/xml/index.ctp
+${ZM_HTTPD_ROOT}/api/app/View/EventData/xml/view.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Events/json/index.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Events/json/view.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Events/xml/index.ctp
@@ -6582,6 +6730,12 @@ ${ZM_HTTPD_ROOT}/api/app/View/Logs/edit.
 ${ZM_HTTPD_ROOT}/api/app/View/Logs/index.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Logs/json/index.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Logs/view.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Manufacturers/json/edit.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Manufacturers/json/index.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Manufacturers/json/view.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Manufacturers/xml/edit.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Manufacturers/xml/index.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Manufacturers/xml/view.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Monitors/json/add.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Monitors/json/daemon_control.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Monitors/json/edit.ctp
@@ -6593,12 +6747,39 @@ ${ZM_HTTPD_ROOT}/api/app/View/Monitors/x
 ${ZM_HTTPD_ROOT}/api/app/View/Monitors/xml/index.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Monitors/xml/view.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Pages/home.ctp
+${ZM_HTTPD_ROOT}/api/app/View/ServerStats/json/edit.ctp
+${ZM_HTTPD_ROOT}/api/app/View/ServerStats/json/index.ctp
+${ZM_HTTPD_ROOT}/api/app/View/ServerStats/json/view.ctp
+${ZM_HTTPD_ROOT}/api/app/View/ServerStats/xml/edit.ctp
+${ZM_HTTPD_ROOT}/api/app/View/ServerStats/xml/index.ctp
+${ZM_HTTPD_ROOT}/api/app/View/ServerStats/xml/view.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Servers/json/edit.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Servers/json/index.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Servers/json/view.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Servers/xml/edit.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Servers/xml/index.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Servers/xml/view.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Snapshots/json/add.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Snapshots/json/edit.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Snapshots/json/index.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Snapshots/json/view.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Snapshots/xml/edit.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Snapshots/xml/index.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Snapshots/xml/view.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Tags/json/edit.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Tags/json/index.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Tags/json/view.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Tags/xml/edit.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Tags/xml/index.ctp
+${ZM_HTTPD_ROOT}/api/app/View/Tags/xml/view.ctp
+${ZM_HTTPD_ROOT}/api/app/View/UserPreference/json/add.ctp
+${ZM_HTTPD_ROOT}/api/app/View/UserPreference/json/edit.ctp
+${ZM_HTTPD_ROOT}/api/app/View/UserPreference/json/index.ctp
+${ZM_HTTPD_ROOT}/api/app/View/UserPreference/json/view.ctp
+${ZM_HTTPD_ROOT}/api/app/View/UserPreference/xml/add.ctp
+${ZM_HTTPD_ROOT}/api/app/View/UserPreference/xml/edit.ctp
+${ZM_HTTPD_ROOT}/api/app/View/UserPreference/xml/index.ctp
+${ZM_HTTPD_ROOT}/api/app/View/UserPreference/xml/view.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Users/json/add.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Users/json/edit.ctp
 ${ZM_HTTPD_ROOT}/api/app/View/Users/json/index.ctp
@@ -7735,18 +7916,30 @@ ${ZM_HTTPD_ROOT}/graphics/spinner.png
 ${ZM_HTTPD_ROOT}/graphics/transparent.png
 ${ZM_HTTPD_ROOT}/includes/Control.php
 ${ZM_HTTPD_ROOT}/includes/Event.php
+${ZM_HTTPD_ROOT}/includes/Event_Data.php
+${ZM_HTTPD_ROOT}/includes/Event_Tag.php
 ${ZM_HTTPD_ROOT}/includes/Filter.php
 ${ZM_HTTPD_ROOT}/includes/FilterTerm.php
 ${ZM_HTTPD_ROOT}/includes/Frame.php
 ${ZM_HTTPD_ROOT}/includes/Group.php
 ${ZM_HTTPD_ROOT}/includes/Group_Monitor.php
+${ZM_HTTPD_ROOT}/includes/Group_Permission.php
+${ZM_HTTPD_ROOT}/includes/Manufacturer.php
+${ZM_HTTPD_ROOT}/includes/Model.php
 ${ZM_HTTPD_ROOT}/includes/Monitor.php
+${ZM_HTTPD_ROOT}/includes/Monitor_Permission.php
 ${ZM_HTTPD_ROOT}/includes/MontageLayout.php
 ${ZM_HTTPD_ROOT}/includes/Object.php
+${ZM_HTTPD_ROOT}/includes/Report.php
+${ZM_HTTPD_ROOT}/includes/Role_Group_Permission.php
+${ZM_HTTPD_ROOT}/includes/Role_Monitor_Permission.php
 ${ZM_HTTPD_ROOT}/includes/Server.php
 ${ZM_HTTPD_ROOT}/includes/Snapshot.php
 ${ZM_HTTPD_ROOT}/includes/Storage.php
+${ZM_HTTPD_ROOT}/includes/Tag.php
 ${ZM_HTTPD_ROOT}/includes/User.php
+${ZM_HTTPD_ROOT}/includes/User_Preference.php
+${ZM_HTTPD_ROOT}/includes/User_Role.php
 ${ZM_HTTPD_ROOT}/includes/Zone.php
 ${ZM_HTTPD_ROOT}/includes/actions/bandwidth.php
 ${ZM_HTTPD_ROOT}/includes/actions/console.php
@@ -7759,6 +7952,7 @@ ${ZM_HTTPD_ROOT}/includes/actions/donate
 ${ZM_HTTPD_ROOT}/includes/actions/event.php
 ${ZM_HTTPD_ROOT}/includes/actions/eventdetail.php
 ${ZM_HTTPD_ROOT}/includes/actions/events.php
+${ZM_HTTPD_ROOT}/includes/actions/files.php
 ${ZM_HTTPD_ROOT}/includes/actions/filter.php
 ${ZM_HTTPD_ROOT}/includes/actions/function.php
 ${ZM_HTTPD_ROOT}/includes/actions/group.php
@@ -7770,13 +7964,15 @@ ${ZM_HTTPD_ROOT}/includes/actions/monito
 ${ZM_HTTPD_ROOT}/includes/actions/montage.php
 ${ZM_HTTPD_ROOT}/includes/actions/options.php
 ${ZM_HTTPD_ROOT}/includes/actions/privacy.php
+${ZM_HTTPD_ROOT}/includes/actions/report.php
+${ZM_HTTPD_ROOT}/includes/actions/role.php
 ${ZM_HTTPD_ROOT}/includes/actions/server.php
+${ZM_HTTPD_ROOT}/includes/actions/settings.php
 ${ZM_HTTPD_ROOT}/includes/actions/snapshot.php
 ${ZM_HTTPD_ROOT}/includes/actions/state.php
 ${ZM_HTTPD_ROOT}/includes/actions/storage.php
 ${ZM_HTTPD_ROOT}/includes/actions/user.php
 ${ZM_HTTPD_ROOT}/includes/actions/version.php
-${ZM_HTTPD_ROOT}/includes/actions/watch.php
 ${ZM_HTTPD_ROOT}/includes/actions/zone.php
 ${ZM_HTTPD_ROOT}/includes/actions/zones.php
 ${ZM_HTTPD_ROOT}/includes/auth.php
@@ -7788,15 +7984,53 @@ ${ZM_HTTPD_ROOT}/includes/csrf/README.tx
 ${ZM_HTTPD_ROOT}/includes/csrf/csrf-magic.js
 ${ZM_HTTPD_ROOT}/includes/csrf/csrf-magic.php
 ${ZM_HTTPD_ROOT}/includes/database.php
+${ZM_HTTPD_ROOT}/includes/download_functions.php
 ${ZM_HTTPD_ROOT}/includes/functions.php
 ${ZM_HTTPD_ROOT}/includes/lang.php
 ${ZM_HTTPD_ROOT}/includes/logger.php
+${ZM_HTTPD_ROOT}/includes/monitor_probe.php
 ${ZM_HTTPD_ROOT}/includes/session.php
 ${ZM_HTTPD_ROOT}/index.php
+${ZM_HTTPD_ROOT}/js/Map.js
+${ZM_HTTPD_ROOT}/js/MonitorLinkExpression.js
 ${ZM_HTTPD_ROOT}/js/MonitorStream.js
 ${ZM_HTTPD_ROOT}/js/Server.js
+${ZM_HTTPD_ROOT}/js/adapter.min.js
 ${ZM_HTTPD_ROOT}/js/ajaxQueue.js
+${ZM_HTTPD_ROOT}/js/dms.js
+${ZM_HTTPD_ROOT}/js/dms.js.URL
+${ZM_HTTPD_ROOT}/js/fontfaceobserver.standalone.js
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls-demo.js
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls-demo.js.map
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.d.mts
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.d.ts
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.js
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.js.d.ts
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.js.map
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.light.js
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.light.js.map
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.light.min.js
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.light.min.js.map
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.light.mjs
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.light.mjs.map
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.min.js
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.min.js.map
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.mjs
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.mjs.map
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.worker.js
+${ZM_HTTPD_ROOT}/js/hls-1.6.13/hls.worker.js.map
 ${ZM_HTTPD_ROOT}/js/logger.js
+${ZM_HTTPD_ROOT}/js/noUiSlider-15.8.1/README.md
+${ZM_HTTPD_ROOT}/js/noUiSlider-15.8.1/dist/nouislider.css
+${ZM_HTTPD_ROOT}/js/noUiSlider-15.8.1/dist/nouislider.d.ts
+${ZM_HTTPD_ROOT}/js/noUiSlider-15.8.1/dist/nouislider.js
+${ZM_HTTPD_ROOT}/js/noUiSlider-15.8.1/dist/nouislider.min.css
+${ZM_HTTPD_ROOT}/js/noUiSlider-15.8.1/dist/nouislider.min.js
+${ZM_HTTPD_ROOT}/js/noUiSlider-15.8.1/dist/nouislider.min.mjs
+${ZM_HTTPD_ROOT}/js/noUiSlider-15.8.1/dist/nouislider.mjs
+${ZM_HTTPD_ROOT}/js/panzoom.js
+${ZM_HTTPD_ROOT}/js/video-rtc.js
+${ZM_HTTPD_ROOT}/js/video-stream.js
 ${ZM_HTTPD_ROOT}/js/videojs.zoomrotate.js
 ${ZM_HTTPD_ROOT}/lang/ba_ba.php
 ${ZM_HTTPD_ROOT}/lang/big5_big5.php
@@ -7808,6 +8042,7 @@ ${ZM_HTTPD_ROOT}/lang/en_gb.php
 ${ZM_HTTPD_ROOT}/lang/en_us.php
 ${ZM_HTTPD_ROOT}/lang/es_ar.php
 ${ZM_HTTPD_ROOT}/lang/es_es.php
+${ZM_HTTPD_ROOT}/lang/es_la.php
 ${ZM_HTTPD_ROOT}/lang/et_ee.php
 ${ZM_HTTPD_ROOT}/lang/fr_fr.php
 ${ZM_HTTPD_ROOT}/lang/he_il.php
@@ -7815,18 +8050,354 @@ ${ZM_HTTPD_ROOT}/lang/hu_hu.php
 ${ZM_HTTPD_ROOT}/lang/it_it.php
 ${ZM_HTTPD_ROOT}/lang/ja_jp.php
 ${ZM_HTTPD_ROOT}/lang/nl_nl.php
+${ZM_HTTPD_ROOT}/lang/no_nb.php
 ${ZM_HTTPD_ROOT}/lang/pl_pl.php
 ${ZM_HTTPD_ROOT}/lang/pt_br.php
 ${ZM_HTTPD_ROOT}/lang/ro_ro.php
 ${ZM_HTTPD_ROOT}/lang/ru_ru.php
 ${ZM_HTTPD_ROOT}/lang/se_se.php
+${ZM_HTTPD_ROOT}/lang/tr_tr.php
 ${ZM_HTTPD_ROOT}/lang/updateLangs.php
 ${ZM_HTTPD_ROOT}/lang/zh_cn.php
 ${ZM_HTTPD_ROOT}/lang/zh_tw.php
 ${ZM_HTTPD_ROOT}/robots.txt
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/bootstrap-table-locale-all.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/bootstrap-table-locale-all.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/bootstrap-table-vue.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/bootstrap-table-vue.umd.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/bootstrap-table.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/bootstrap-table.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/bootstrap-table.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/bootstrap-table.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/addrbar/bootstrap-table-addrbar.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/addrbar/bootstrap-table-addrbar.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/auto-refresh/bootstrap-table-auto-refresh.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/auto-refresh/bootstrap-table-auto-refresh.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/cookie/bootstrap-table-cookie.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/cookie/bootstrap-table-cookie.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/copy-rows/bootstrap-table-copy-rows.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/copy-rows/bootstrap-table-copy-rows.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/custom-view/bootstrap-table-custom-view.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/custom-view/bootstrap-table-custom-view.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/defer-url/bootstrap-table-defer-url.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/defer-url/bootstrap-table-defer-url.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/editable/bootstrap-table-editable.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/editable/bootstrap-table-editable.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/export/bootstrap-table-export.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/export/bootstrap-table-export.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/filter-control/bootstrap-table-filter-control.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/filter-control/bootstrap-table-filter-control.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/filter-control/bootstrap-table-filter-control.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/filter-control/bootstrap-table-filter-control.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/filter-control/utils.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/filter-control/utils.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/fixed-columns/bootstrap-table-fixed-columns.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/fixed-columns/bootstrap-table-fixed-columns.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/fixed-columns/bootstrap-table-fixed-columns.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/fixed-columns/bootstrap-table-fixed-columns.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/group-by-v2/bootstrap-table-group-by.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/group-by-v2/bootstrap-table-group-by.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/group-by-v2/bootstrap-table-group-by.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/group-by-v2/bootstrap-table-group-by.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/i18n-enhance/bootstrap-table-i18n-enhance.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/i18n-enhance/bootstrap-table-i18n-enhance.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/key-events/bootstrap-table-key-events.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/key-events/bootstrap-table-key-events.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/mobile/bootstrap-table-mobile.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/mobile/bootstrap-table-mobile.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/multiple-sort/bootstrap-table-multiple-sort.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/multiple-sort/bootstrap-table-multiple-sort.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/page-jump-to/bootstrap-table-page-jump-to.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/page-jump-to/bootstrap-table-page-jump-to.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/page-jump-to/bootstrap-table-page-jump-to.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/pipeline/bootstrap-table-pipeline.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/pipeline/bootstrap-table-pipeline.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/print/bootstrap-table-print.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/print/bootstrap-table-print.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/reorder-columns/bootstrap-table-reorder-columns.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/reorder-columns/bootstrap-table-reorder-columns.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/reorder-rows/bootstrap-table-reorder-rows.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/reorder-rows/bootstrap-table-reorder-rows.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/reorder-rows/bootstrap-table-reorder-rows.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/reorder-rows/bootstrap-table-reorder-rows.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/resizable/bootstrap-table-resizable.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/resizable/bootstrap-table-resizable.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/sticky-header/bootstrap-table-sticky-header.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/sticky-header/bootstrap-table-sticky-header.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/sticky-header/bootstrap-table-sticky-header.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/sticky-header/bootstrap-table-sticky-header.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/toolbar/bootstrap-table-toolbar.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/toolbar/bootstrap-table-toolbar.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/treegrid/bootstrap-table-treegrid.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/extensions/treegrid/bootstrap-table-treegrid.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-af-ZA.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-af-ZA.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ar-SA.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ar-SA.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-bg-BG.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-bg-BG.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ca-ES.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ca-ES.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-cs-CZ.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-cs-CZ.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-da-DK.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-da-DK.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-de-DE.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-de-DE.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-el-GR.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-el-GR.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-en-US.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-en-US.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-AR.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-AR.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-CL.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-CL.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-CR.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-CR.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-ES.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-ES.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-MX.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-MX.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-NI.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-NI.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-SP.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-es-SP.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-et-EE.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-et-EE.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-eu-EU.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-eu-EU.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-fa-IR.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-fa-IR.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-fi-FI.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-fi-FI.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-fr-BE.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-fr-BE.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-fr-CH.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-fr-CH.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-fr-FR.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-fr-FR.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-fr-LU.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-fr-LU.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-he-IL.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-he-IL.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-hi-IN.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-hi-IN.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-hr-HR.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-hr-HR.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-hu-HU.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-hu-HU.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-id-ID.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-id-ID.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-it-IT.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-it-IT.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ja-JP.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ja-JP.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ka-GE.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ka-GE.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ko-KR.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ko-KR.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-lb-LU.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-lb-LU.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-lt-LT.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-lt-LT.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ms-MY.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ms-MY.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-nb-NO.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-nb-NO.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-nl-BE.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-nl-BE.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-nl-NL.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-nl-NL.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-pl-PL.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-pl-PL.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-pt-BR.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-pt-BR.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-pt-PT.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-pt-PT.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ro-RO.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ro-RO.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ru-RU.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ru-RU.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-sk-SK.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-sk-SK.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-sl-SI.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-sl-SI.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-sr-Cyrl-RS.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-sr-Cyrl-RS.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-sr-Latn-RS.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-sr-Latn-RS.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-sv-SE.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-sv-SE.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-th-TH.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-th-TH.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-tr-TR.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-tr-TR.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-uk-UA.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-uk-UA.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ur-PK.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-ur-PK.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-uz-Latn-UZ.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-uz-Latn-UZ.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-vi-VN.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-vi-VN.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-zh-CN.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-zh-CN.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-zh-TW.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/locale/bootstrap-table-zh-TW.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/bootstrap-table/bootstrap-table.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/bootstrap-table/bootstrap-table.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/bootstrap-table/bootstrap-table.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/bootstrap-table/bootstrap-table.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/bootstrap-table/fonts/bootstrap-table.eot
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/bootstrap-table/fonts/bootstrap-table.svg
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/bootstrap-table/fonts/bootstrap-table.ttf
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/bootstrap-table/fonts/bootstrap-table.woff
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/bulma/bootstrap-table-bulma.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/bulma/bootstrap-table-bulma.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/bulma/bootstrap-table-bulma.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/bulma/bootstrap-table-bulma.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/foundation/bootstrap-table-foundation.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/foundation/bootstrap-table-foundation.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/foundation/bootstrap-table-foundation.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/foundation/bootstrap-table-foundation.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/materialize/bootstrap-table-materialize.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/materialize/bootstrap-table-materialize.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/materialize/bootstrap-table-materialize.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/materialize/bootstrap-table-materialize.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/semantic/bootstrap-table-semantic.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/semantic/bootstrap-table-semantic.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/semantic/bootstrap-table-semantic.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/bootstrap-table-1.24.1/themes/semantic/bootstrap-table-semantic.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-base-impl.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-base-impl.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-base-impl.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-draggable.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-draggable.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-draggable.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-droppable.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-droppable.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-droppable.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-element.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-element.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-element.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-gridstack.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-gridstack.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-gridstack.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-manager.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-manager.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-manager.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-resizable-handle.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-resizable-handle.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-resizable-handle.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-resizable.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-resizable.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-resizable.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-touch.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-touch.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/dd-touch.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/gridstack-all.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/gridstack-all.js.LICENSE.txt
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/gridstack-all.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/gridstack-engine.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/gridstack-engine.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/gridstack-engine.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/gridstack.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/gridstack.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/gridstack.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/gridstack.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/gridstack.min.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-base-impl.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-base-impl.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-base-impl.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-draggable.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-draggable.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-draggable.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-droppable.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-droppable.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-droppable.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-element.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-element.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-element.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-gridstack.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-gridstack.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-gridstack.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-manager.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-manager.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-manager.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-resizable-handle.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-resizable-handle.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-resizable-handle.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-resizable.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-resizable.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-resizable.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-touch.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-touch.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/dd-touch.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/gridstack-engine.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/gridstack-engine.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/gridstack-engine.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/gridstack.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/gridstack.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/gridstack.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/gridstack.scss
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/types.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/types.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/types.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/utils.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/utils.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/src/utils.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/types.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/types.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/types.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/utils.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/utils.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/utils.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/vitest.config.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/vitest.config.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/vitest.config.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/vitest.setup.d.ts
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/vitest.setup.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/gridstack-12.3.3/dist/vitest.setup.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/jquery.panzoom/dist/jquery.panzoom.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/jquery.panzoom/dist/jquery.panzoom.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/mb.extruder/inc/mbExtruder.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/LICENSE
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/README.md
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/READ_ME_BEFORE_EDIT
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/assets/images/sidebar-bg.jpg
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/build.sh
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/dist/main.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/dist/main.css.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/dist/main.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/dist/main.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/dist_dev/main.css
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/dist_dev/main.css.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/dist_dev/main.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/dist_dev/main.js.map
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/postcss.config.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/src/index.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/src/libs/constants.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/src/libs/popper.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/src/libs/poppers.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/src/libs/slide.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/src/styles/_layout.scss
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/src/styles/_menu.scss
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/src/styles/_sidebar.scss
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/src/styles/_variables.scss
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/src/styles/css-pro-layout.scss
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/src/styles/styles.scss
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/src/styles/variables_css-pro-layout.scss
+${ZM_HTTPD_ROOT}/skins/classic/assets/pro-sidebar-template/webpack.config.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/swiped-events/dist/swiped-events.min.js
+${ZM_HTTPD_ROOT}/skins/classic/assets/version
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/export.css
+${ZM_HTTPD_ROOT}/skins/classic/css/base/material-icons.css
+${ZM_HTTPD_ROOT}/skins/classic/css/base/sidebar.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/skin.css
+${ZM_HTTPD_ROOT}/skins/classic/css/base/views/add_monitors.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/console.css
+${ZM_HTTPD_ROOT}/skins/classic/css/base/views/console.css.php
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/control.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/controlcap.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/controlcaps.css
@@ -7836,13 +8407,16 @@ ${ZM_HTTPD_ROOT}/skins/classic/css/base/
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/event.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/events.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/export.css
+${ZM_HTTPD_ROOT}/skins/classic/css/base/views/files.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/filter.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/frame.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/frames.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/groups.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/log.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/login.css
+${ZM_HTTPD_ROOT}/skins/classic/css/base/views/map.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/monitor.css
+${ZM_HTTPD_ROOT}/skins/classic/css/base/views/monitors.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/montage.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/montage_2wide.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/montage_3wide.css
@@ -7854,6 +8428,7 @@ ${ZM_HTTPD_ROOT}/skins/classic/css/base/
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/plugin.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/privacy.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/report_event_audit.css
+${ZM_HTTPD_ROOT}/skins/classic/css/base/views/reports.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/server.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/settings.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/snapshot.css
@@ -7867,6 +8442,7 @@ ${ZM_HTTPD_ROOT}/skins/classic/css/base/
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/watch.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/zone.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/base/views/zones.css
+${ZM_HTTPD_ROOT}/skins/classic/css/base/zones.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/classic/export.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/classic/skin.css
 ${ZM_HTTPD_ROOT}/skins/classic/css/classic/views/console.css
@@ -7948,6 +8524,9 @@ ${ZM_HTTPD_ROOT}/skins/classic/graphics/
 ${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-ul.png
 ${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-ur.png
 ${ZM_HTTPD_ROOT}/skins/classic/graphics/center.png
+${ZM_HTTPD_ROOT}/skins/classic/graphics/icon-connected.png
+${ZM_HTTPD_ROOT}/skins/classic/graphics/icon-disconnected.png
+${ZM_HTTPD_ROOT}/skins/classic/graphics/icon-error.png
 ${ZM_HTTPD_ROOT}/skins/classic/graphics/point-g.png
 ${ZM_HTTPD_ROOT}/skins/classic/graphics/point-o.png
 ${ZM_HTTPD_ROOT}/skins/classic/graphics/point-r.png
@@ -7964,224 +8543,12 @@ ${ZM_HTTPD_ROOT}/skins/classic/includes/
 ${ZM_HTTPD_ROOT}/skins/classic/includes/export_functions.php
 ${ZM_HTTPD_ROOT}/skins/classic/includes/functions.php
 ${ZM_HTTPD_ROOT}/skins/classic/includes/timeline_functions.php
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/bootstrap-table-locale-all.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/bootstrap-table-locale-all.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/bootstrap-table-vue.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/bootstrap-table-vue.umd.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/bootstrap-table.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/bootstrap-table.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/bootstrap-table.min.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/bootstrap-table.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/addrbar/bootstrap-table-addrbar.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/addrbar/bootstrap-table-addrbar.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/auto-refresh/bootstrap-table-auto-refresh.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/auto-refresh/bootstrap-table-auto-refresh.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/cookie/bootstrap-table-cookie.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/cookie/bootstrap-table-cookie.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/copy-rows/bootstrap-table-copy-rows.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/copy-rows/bootstrap-table-copy-rows.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/custom-view/bootstrap-table-custom-view.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/custom-view/bootstrap-table-custom-view.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/defer-url/bootstrap-table-defer-url.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/defer-url/bootstrap-table-defer-url.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/editable/bootstrap-table-editable.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/editable/bootstrap-table-editable.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/export/bootstrap-table-export.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/export/bootstrap-table-export.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/filter-control/bootstrap-table-filter-control.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/filter-control/bootstrap-table-filter-control.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/filter-control/bootstrap-table-filter-control.min.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/filter-control/bootstrap-table-filter-control.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/filter-control/utils.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/filter-control/utils.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/fixed-columns/bootstrap-table-fixed-columns.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/fixed-columns/bootstrap-table-fixed-columns.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/fixed-columns/bootstrap-table-fixed-columns.min.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/fixed-columns/bootstrap-table-fixed-columns.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/group-by-v2/bootstrap-table-group-by.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/group-by-v2/bootstrap-table-group-by.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/group-by-v2/bootstrap-table-group-by.min.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/group-by-v2/bootstrap-table-group-by.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/i18n-enhance/bootstrap-table-i18n-enhance.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/i18n-enhance/bootstrap-table-i18n-enhance.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/key-events/bootstrap-table-key-events.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/key-events/bootstrap-table-key-events.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/mobile/bootstrap-table-mobile.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/mobile/bootstrap-table-mobile.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/multiple-sort/bootstrap-table-multiple-sort.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/multiple-sort/bootstrap-table-multiple-sort.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/page-jump-to/bootstrap-table-page-jump-to.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/page-jump-to/bootstrap-table-page-jump-to.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/page-jump-to/bootstrap-table-page-jump-to.min.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/pipeline/bootstrap-table-pipeline.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/pipeline/bootstrap-table-pipeline.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/print/bootstrap-table-print.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/print/bootstrap-table-print.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/reorder-columns/bootstrap-table-reorder-columns.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/reorder-columns/bootstrap-table-reorder-columns.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/reorder-rows/bootstrap-table-reorder-rows.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/reorder-rows/bootstrap-table-reorder-rows.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/reorder-rows/bootstrap-table-reorder-rows.min.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/reorder-rows/bootstrap-table-reorder-rows.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/resizable/bootstrap-table-resizable.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/resizable/bootstrap-table-resizable.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/sticky-header/bootstrap-table-sticky-header.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/sticky-header/bootstrap-table-sticky-header.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/sticky-header/bootstrap-table-sticky-header.min.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/sticky-header/bootstrap-table-sticky-header.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/toolbar/bootstrap-table-toolbar.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/toolbar/bootstrap-table-toolbar.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/treegrid/bootstrap-table-treegrid.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/extensions/treegrid/bootstrap-table-treegrid.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-af-ZA.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-af-ZA.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ar-SA.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ar-SA.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-bg-BG.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-bg-BG.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ca-ES.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ca-ES.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-cs-CZ.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-cs-CZ.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-da-DK.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-da-DK.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-de-DE.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-de-DE.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-el-GR.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-el-GR.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-en-US.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-en-US.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-AR.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-AR.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-CL.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-CL.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-CR.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-CR.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-ES.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-ES.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-MX.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-MX.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-NI.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-NI.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-SP.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-es-SP.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-et-EE.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-et-EE.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-eu-EU.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-eu-EU.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-fa-IR.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-fa-IR.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-fi-FI.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-fi-FI.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-fr-BE.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-fr-BE.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-fr-CH.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-fr-CH.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-fr-FR.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-fr-FR.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-fr-LU.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-fr-LU.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-he-IL.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-he-IL.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-hi-IN.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-hi-IN.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-hr-HR.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-hr-HR.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-hu-HU.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-hu-HU.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-id-ID.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-id-ID.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-it-IT.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-it-IT.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ja-JP.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ja-JP.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ka-GE.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ka-GE.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ko-KR.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ko-KR.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-lb-LU.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-lb-LU.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ms-MY.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ms-MY.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-nb-NO.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-nb-NO.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-nl-BE.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-nl-BE.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-nl-NL.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-nl-NL.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-pl-PL.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-pl-PL.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-pt-BR.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-pt-BR.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-pt-PT.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-pt-PT.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ro-RO.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ro-RO.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ru-RU.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ru-RU.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-sk-SK.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-sk-SK.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-sl-SI.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-sl-SI.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-sr-Cyrl-RS.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-sr-Cyrl-RS.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-sr-Latn-RS.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-sr-Latn-RS.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-sv-SE.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-sv-SE.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-th-TH.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-th-TH.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-tr-TR.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-tr-TR.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-uk-UA.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-uk-UA.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ur-PK.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-ur-PK.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-uz-Latn-UZ.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-uz-Latn-UZ.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-vi-VN.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-vi-VN.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-zh-CN.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-zh-CN.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-zh-TW.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/locale/bootstrap-table-zh-TW.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/bootstrap-table/bootstrap-table.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/bootstrap-table/bootstrap-table.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/bootstrap-table/bootstrap-table.min.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/bootstrap-table/bootstrap-table.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/bootstrap-table/fonts/bootstrap-table.eot
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/bootstrap-table/fonts/bootstrap-table.svg
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/bootstrap-table/fonts/bootstrap-table.ttf
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/bootstrap-table/fonts/bootstrap-table.woff
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/bulma/bootstrap-table-bulma.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/bulma/bootstrap-table-bulma.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/bulma/bootstrap-table-bulma.min.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/bulma/bootstrap-table-bulma.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/foundation/bootstrap-table-foundation.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/foundation/bootstrap-table-foundation.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/foundation/bootstrap-table-foundation.min.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/foundation/bootstrap-table-foundation.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/materialize/bootstrap-table-materialize.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/materialize/bootstrap-table-materialize.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/materialize/bootstrap-table-materialize.min.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/materialize/bootstrap-table-materialize.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/semantic/bootstrap-table-semantic.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/semantic/bootstrap-table-semantic.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/semantic/bootstrap-table-semantic.min.css
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-1.23.5/themes/semantic/bootstrap-table-semantic.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-auto-refresh.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-cookie.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-export.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-locale-all.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-page-jump-to.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table-toolbar.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-table.min.js
+${ZM_HTTPD_ROOT}/skins/classic/js/Chart.min.js
+${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-4.5.0.js
+${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap-4.5.0.min.js
 ${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap.bundle.js.map
 ${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap.bundle.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap.js
 ${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap.js.URL
-${ZM_HTTPD_ROOT}/skins/classic/js/bootstrap.min.js
 ${ZM_HTTPD_ROOT}/skins/classic/js/chosen/chosen-sprite.png
 ${ZM_HTTPD_ROOT}/skins/classic/js/chosen/chosen-sprite%2x.png@localhost
 ${ZM_HTTPD_ROOT}/skins/classic/js/chosen/chosen.css
@@ -8190,11 +8557,12 @@ ${ZM_HTTPD_ROOT}/skins/classic/js/chosen
 ${ZM_HTTPD_ROOT}/skins/classic/js/chosen/chosen.min.css
 ${ZM_HTTPD_ROOT}/skins/classic/js/dateTimePicker/jquery-ui-timepicker-addon.css
 ${ZM_HTTPD_ROOT}/skins/classic/js/dateTimePicker/jquery-ui-timepicker-addon.js
+${ZM_HTTPD_ROOT}/skins/classic/js/export.js
 ${ZM_HTTPD_ROOT}/skins/classic/js/font/vjs.eot
 ${ZM_HTTPD_ROOT}/skins/classic/js/font/vjs.ttf
 ${ZM_HTTPD_ROOT}/skins/classic/js/font/vjs.woff
-${ZM_HTTPD_ROOT}/skins/classic/js/jquery-3.6.1.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/jquery-3.6.1.min.map
+${ZM_HTTPD_ROOT}/skins/classic/js/jquery-3.7.1.min.js
+${ZM_HTTPD_ROOT}/skins/classic/js/jquery-3.7.1.min.map
 ${ZM_HTTPD_ROOT}/skins/classic/js/jquery-ui-1.13.2/AUTHORS.txt
 ${ZM_HTTPD_ROOT}/skins/classic/js/jquery-ui-1.13.2/LICENSE.txt
 ${ZM_HTTPD_ROOT}/skins/classic/js/jquery-ui-1.13.2/external/jquery/jquery.js
@@ -8216,34 +8584,43 @@ ${ZM_HTTPD_ROOT}/skins/classic/js/jquery
 ${ZM_HTTPD_ROOT}/skins/classic/js/jquery-ui-1.13.2/package.json
 ${ZM_HTTPD_ROOT}/skins/classic/js/jquery.min.js
 ${ZM_HTTPD_ROOT}/skins/classic/js/jquery.min.js.URL
+${ZM_HTTPD_ROOT}/skins/classic/js/luxon-3.4.4.min.js
 ${ZM_HTTPD_ROOT}/skins/classic/js/moment.js
 ${ZM_HTTPD_ROOT}/skins/classic/js/moment.js.URL
 ${ZM_HTTPD_ROOT}/skins/classic/js/moment.min.js
+${ZM_HTTPD_ROOT}/skins/classic/js/montage_common.js
+${ZM_HTTPD_ROOT}/skins/classic/js/qrcode.min.js
+${ZM_HTTPD_ROOT}/skins/classic/js/qrcode.min.js.URL
 ${ZM_HTTPD_ROOT}/skins/classic/js/skin.js
 ${ZM_HTTPD_ROOT}/skins/classic/js/skin.js.php
 ${ZM_HTTPD_ROOT}/skins/classic/js/tableExport.min.js
-${ZM_HTTPD_ROOT}/skins/classic/js/video-js-skin.css
 ${ZM_HTTPD_ROOT}/skins/classic/js/video-js.css
 ${ZM_HTTPD_ROOT}/skins/classic/js/video-js.css.URL
-${ZM_HTTPD_ROOT}/skins/classic/js/video.js
 ${ZM_HTTPD_ROOT}/skins/classic/js/video.js.URL
 ${ZM_HTTPD_ROOT}/skins/classic/js/video.min.js
 ${ZM_HTTPD_ROOT}/skins/classic/skin.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/_monitor_filters.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/_monitor_source_nvsocket.php
+${ZM_HTTPD_ROOT}/skins/classic/views/_options_api.php
+${ZM_HTTPD_ROOT}/skins/classic/views/_options_controlcaps.php
+${ZM_HTTPD_ROOT}/skins/classic/views/_options_dnsmasq.php
+${ZM_HTTPD_ROOT}/skins/classic/views/_options_roles.php
+${ZM_HTTPD_ROOT}/skins/classic/views/_options_servers.php
+${ZM_HTTPD_ROOT}/skins/classic/views/_options_storage.php
+${ZM_HTTPD_ROOT}/skins/classic/views/_options_users.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/add_monitors.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/bandwidth.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/blank.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/console.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/control.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/controlcap.php
-${ZM_HTTPD_ROOT}/skins/classic/views/controlcaps.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/cycle.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/devices.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/error.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/event.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/events.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/export.php
+${ZM_HTTPD_ROOT}/skins/classic/views/files.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/filter.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/frame.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/frames.php
@@ -8263,6 +8640,7 @@ ${ZM_HTTPD_ROOT}/skins/classic/views/js/
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/events.js.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/export.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/export.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/files.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/filter.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/filter.js.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/frame.js
@@ -8273,6 +8651,7 @@ ${ZM_HTTPD_ROOT}/skins/classic/views/js/
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/log.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/login.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/login.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/map.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/monitor.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/monitor.js.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/monitorpreset.js
@@ -8287,7 +8666,9 @@ ${ZM_HTTPD_ROOT}/skins/classic/views/js/
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/plugin.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/postlogin.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/postlogin.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/report.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/report_event_audit.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/reports.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/server.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/snapshot.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/snapshot.js.php
@@ -8298,6 +8679,7 @@ ${ZM_HTTPD_ROOT}/skins/classic/views/js/
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/timeline.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/timeline.js.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/user.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/user.js.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/video.js
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/video.js.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/watch.js
@@ -8308,6 +8690,7 @@ ${ZM_HTTPD_ROOT}/skins/classic/views/js/
 ${ZM_HTTPD_ROOT}/skins/classic/views/js/zones.js.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/log.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/login.php
+${ZM_HTTPD_ROOT}/skins/classic/views/map.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/monitor.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/monitorpreset.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/monitorprobe.php
@@ -8321,7 +8704,10 @@ ${ZM_HTTPD_ROOT}/skins/classic/views/opt
 ${ZM_HTTPD_ROOT}/skins/classic/views/plugin.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/postlogin.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/privacy.php
+${ZM_HTTPD_ROOT}/skins/classic/views/report.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/report_event_audit.php
+${ZM_HTTPD_ROOT}/skins/classic/views/reports.php
+${ZM_HTTPD_ROOT}/skins/classic/views/role.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/snapshot.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/snapshots.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/stats.php
@@ -8332,6 +8718,7 @@ ${ZM_HTTPD_ROOT}/skins/classic/views/vid
 ${ZM_HTTPD_ROOT}/skins/classic/views/watch.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/zone.php
 ${ZM_HTTPD_ROOT}/skins/classic/views/zones.php
+${ZM_HTTPD_ROOT}/sounds/snap.ogg
 ${ZM_HTTPD_ROOT}/vendor/autoload.php
 ${ZM_HTTPD_ROOT}/vendor/composer/ClassLoader.php
 ${ZM_HTTPD_ROOT}/vendor/composer/LICENSE
@@ -8354,6 +8741,7 @@ ${ZM_HTTPD_ROOT}/vendor/ircmaxell/passwo
 ${ZM_HTTPD_ROOT}/vendor/ircmaxell/password-compat/lib/password.php
 ${ZM_HTTPD_ROOT}/vendor/ircmaxell/password-compat/version-test.php
 ${ZM_HTTPD_ROOT}/views/archive.php
+${ZM_HTTPD_ROOT}/views/download.php
 ${ZM_HTTPD_ROOT}/views/image.php
 ${ZM_HTTPD_ROOT}/views/no_database_connection.php
 ${ZM_HTTPD_ROOT}/views/view_video.php

Index: pkgsrc/security/zoneminder/distinfo
diff -u pkgsrc/security/zoneminder/distinfo:1.28 pkgsrc/security/zoneminder/distinfo:1.29
--- pkgsrc/security/zoneminder/distinfo:1.28    Wed Jan  7 01:03:59 2026
+++ pkgsrc/security/zoneminder/distinfo Thu Jul 30 12:35:59 2026
@@ -1,36 +1,29 @@
-$NetBSD: distinfo,v 1.28 2026/01/07 01:03:59 gdt Exp $
+$NetBSD: distinfo,v 1.29 2026/07/30 12:35:59 gdt Exp $
 
 BLAKE2s (FriendsOfCake-crud-14292374ccf1328f2d5db20897bd06f99ba4d938.tar.gz) = 8877bf6718ecfe3cba2515629418fe5addc60cf8ce4650526b39db6a234922ad
 SHA512 (FriendsOfCake-crud-14292374ccf1328f2d5db20897bd06f99ba4d938.tar.gz) = 
da58528686baf05385ad08079f965bce10eba6d599133ab773e9ab1f9e4b7d82cf5431b4b773317b90effb16e0b026a029bdfabe08a9ef1a5e9b94e7a1c2ea9e
 Size (FriendsOfCake-crud-14292374ccf1328f2d5db20897bd06f99ba4d938.tar.gz) = 73086 bytes
-BLAKE2s (ZoneMinder-1.36.37.10-5ca31d88f7069ec4a4cc758e7ea05353573d3304.tar.gz) = a5431be1e59cc1e8cf9d723fe83d4e9c7aa6a7e5aa294bdb375b9877d8162b01
-SHA512 (ZoneMinder-1.36.37.10-5ca31d88f7069ec4a4cc758e7ea05353573d3304.tar.gz) = 
aaff4529a54cf9b2d60932d768faf7c75570b0c7bfa59326b448f436f635be0d35474c72fed59ac789c6d618307190ba747d534fda037edbd5c3a5d31c2f2bee
-Size (ZoneMinder-1.36.37.10-5ca31d88f7069ec4a4cc758e7ea05353573d3304.tar.gz) = 13974266 bytes
+BLAKE2s (ZoneMinder-1.38.3.tar.gz) = a5eb9cc1483461dbe920b4534c0f2620f885e2b368e343a7a342133db138c43e
+SHA512 (ZoneMinder-1.38.3.tar.gz) = f68d80dca9ac45b8c5114f6438e3b3e5744074a5589e15b494f70f88ded030e79e884d2654e680e51c224c4b8e204a00e5a6303fbed5dcb8e8ec87b75e9cfa5a
+Size (ZoneMinder-1.38.3.tar.gz) = 25321086 bytes
 BLAKE2s (ZoneMinder-CakePHP-Enum-Behavior-ea90c0cd7f6e24333a90885e563b5d30b793db29.tar.gz) = 4639184438becb1c33450a00e213fca9d11e92b7f2545fb701f40a664c716764
 SHA512 (ZoneMinder-CakePHP-Enum-Behavior-ea90c0cd7f6e24333a90885e563b5d30b793db29.tar.gz) = 
75f2188e548b98191c8df82fb76e918f3bda9788f541449df8fa92449ad19aa0b9c13420dd91c760e08a4d31956ad51602242ab97e3bd4460f01e99f49992453
 Size (ZoneMinder-CakePHP-Enum-Behavior-ea90c0cd7f6e24333a90885e563b5d30b793db29.tar.gz) = 3504 bytes
-BLAKE2s (gdt-RtspServer-2719899a3f74ef0a9bb213d34998bcc74cc1f17f.tar.gz) = 427ab3da339df34c610e0b6ec72f804f80ee32b22ca6ab8ead1c195f8b66950a
-SHA512 (gdt-RtspServer-2719899a3f74ef0a9bb213d34998bcc74cc1f17f.tar.gz) = 
2891a0817e12be3ed9421e259878a31c97efb411f69339140be9c7f4a5f670574b887e921383d6602096e9c369fcb7b83e513fcc321c37abc87053be98f65050
-Size (gdt-RtspServer-2719899a3f74ef0a9bb213d34998bcc74cc1f17f.tar.gz) = 1396675 bytes
-SHA1 (patch-CMakeLists.txt) = e54c1efea0b0cc99e9bbe8f493a0fe15b2c89663
-SHA1 (patch-scripts_ZoneMinder_lib_ZoneMinder_ConfigData.pm.in) = 3bf4e5e8276a682695db640e6608dd14c7315320
-SHA1 (patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm) = 996670d8a659c0624587da73f8083d9349aaa1ba
-SHA1 (patch-scripts_ZoneMinder_lib_ZoneMinder_Memory_Shared.pm) = b3de55618915fad3d9263954db71270c800ad6f1
-SHA1 (patch-scripts_zm_in) = a05727261bb8be6b707e9a14ae4ff52ea3770d51
-SHA1 (patch-scripts_zmpkg_pl_in) = eb3166ae3cd9bb0ce1b828b64722506aa4e82368
-SHA1 (patch-src_zm__event.cpp) = a965a93a8e531430f79432976f7f809a8e8296bf
-SHA1 (patch-src_zm__eventstream.cpp) = d2134edf09f142a6a545ca36d3263b13defcadd6
-SHA1 (patch-src_zm__image.cpp) = ea74fcef9220293466835d0a4079f6aa5ae2aa75
-SHA1 (patch-src_zm__monitor.cpp) = 7ebc55e9b3b23590541505b7641beaed61b9c56a
-SHA1 (patch-src_zm__packet.h) = 96951004741f3d21434d3ca981f6214c07f77c88
-SHA1 (patch-src_zm__packetqueue.cpp) = b04e72880d428d3f22a9910c249854f31651240f
-SHA1 (patch-src_zm__regexp.cpp) = b8eede97a7b7d0a58556604fe8a38bd825c230ab
-SHA1 (patch-src_zm__rtp__source.cpp) = 9335686e0b353cc50eac51704546527bee5c180b
-SHA1 (patch-src_zm__rtsp__server__fifo__source.cpp) = ece9083fc4cb4ade8e97c2f46307db34fbdb1c2f
-SHA1 (patch-src_zm__time.h) = b52f3bf40eb4dca550bc880e5c41227999269590
-SHA1 (patch-src_zm__utils.cpp) = e16ffd3f41bd05a32c80142e7246307df12801a8
-SHA1 (patch-src_zm_comms_h) = 33577ab0eac62eadc415fe6fb970b82eb473c8e7
-SHA1 (patch-src_zm_logger_cpp) = 3428e80f3e442a3ada147d3d4145564f6e949760
-SHA1 (patch-src_zm_remote_camera_h) = 2f774924338b9e42e7bcaa1701af72861ea62c22
-SHA1 (patch-src_zm_signal_cpp) = af9625702518648b8d62ed20d0d52c1a2a27841a
-SHA1 (patch-src_zmu.cpp) = e5d92c9aa17c3a9e8b53c2cbd43712d80c76ab4e
+BLAKE2s (ZoneMinder-RtspServer-a071599575f60a6f1f424e1f9b408dad7da734a8.tar.gz) = 7c68be2f8dd52d02f1c6d994bcdf0cf92fd94dcd0a36c3c6c7347737fd4cdc5f
+SHA512 (ZoneMinder-RtspServer-a071599575f60a6f1f424e1f9b408dad7da734a8.tar.gz) = 
e80a8df4600c2a954a88c00d12dacaefa37f769d9ed0b2d36af817b92fdb5fa76f85fba0647c9161779c914c0e6cb5aefd2cf36221cc2ad563f6516f43ead2d2
+Size (ZoneMinder-RtspServer-a071599575f60a6f1f424e1f9b408dad7da734a8.tar.gz) = 1400033 bytes
+BLAKE2s (chmike-CxxUrl-eaf46c0207df24853a238d4499e7f4426d9d234c.tar.gz) = a3ad57d8f471d37b4c15647dd2e199d3dd63e4300e4668a9cb4d717c874ccf0e
+SHA512 (chmike-CxxUrl-eaf46c0207df24853a238d4499e7f4426d9d234c.tar.gz) = 
acdf5a2877710d123246544c1f1543961275edcf09a8a8bb9fd587f59c3735af84f50277c27f07f783c7f56d841ad6bd8f5da1f1814d4aec825a6da507efc45f
+Size (chmike-CxxUrl-eaf46c0207df24853a238d4499e7f4426d9d234c.tar.gz) = 14299 bytes
+SHA1 (patch-CMakeLists.txt) = 51899465cbf3bdafea590989d5bbf176054c3764
+SHA1 (patch-scripts_ZoneMinder_lib_ZoneMinder_ConfigData.pm.in) = 9cf3f3f9da6a3cb4911bbb127a2d10d7edd8929f
+SHA1 (patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm) = 5350c37edb0d5d52613a734a20516ce6aefb417d
+SHA1 (patch-scripts_ZoneMinder_lib_ZoneMinder_Memory_Shared.pm) = 38de6349f2071eef146009e029a3a0592aa9720a
+SHA1 (patch-scripts_zm_in) = e1e344b2bddaffa63c435541f6d5e78af73de80b
+SHA1 (patch-scripts_zmpkg_pl_in) = 429ea720574e19d96a34ad6a39f1196a90ac8a86
+SHA1 (patch-src_zm__comms.h) = b6b68d50dfb73a72fd9609d50890aed6ecde9294
+SHA1 (patch-src_zm__remote__camera__nvsocket.cpp) = 2af57a1fe70369b0d377932570370838466c1535
+SHA1 (patch-src_zm__rtp__source.cpp) = ba46738d040ad0c83a49e0d5cc368f2752535b6e
+SHA1 (patch-src_zm__utils.cpp) = c347ad18989ca83e4317fb7e7eb3ba9fed4e99fa
+SHA1 (patch-src_zm_signal_cpp) = 68c97ef3b3bc9b0be0069bee0842e31c9317582e
+SHA1 (patch-web_includes_database.php) = 0d7e455220a59e94d5dd9acfd83858b78dce889b

Index: pkgsrc/security/zoneminder/patches/patch-CMakeLists.txt
diff -u pkgsrc/security/zoneminder/patches/patch-CMakeLists.txt:1.4 pkgsrc/security/zoneminder/patches/patch-CMakeLists.txt:1.5
--- pkgsrc/security/zoneminder/patches/patch-CMakeLists.txt:1.4 Mon Jan  5 16:02:45 2026
+++ pkgsrc/security/zoneminder/patches/patch-CMakeLists.txt     Thu Jul 30 12:36:00 2026
@@ -1,6 +1,4 @@
-$NetBSD: patch-CMakeLists.txt,v 1.4 2026/01/05 16:02:45 gdt Exp $
-
-Don't have a file called "version", to avoid conflict with C++20 <version>.
+$NetBSD: patch-CMakeLists.txt,v 1.5 2026/07/30 12:36:00 gdt Exp $
 
 CMake will detect the MacOS 6-argument sendfile() support and configure
 HAVE_SENDFILE, but the code itself doesn't support this interface.  So don't
@@ -9,21 +7,12 @@ probe for HAVE_SENDFILE if we HAVE_SENDF
 Just because librt doesn't exist does not mean that clock_gettime() doesn't
 exist, so don't insist on librt being present.  Fixes the build on MacOS.
 
-Let Pkgsrc be responsible for zm.conf into examples, rather than overwriting
+Let pkgsrc be responsible for zm.conf into examples, rather than overwriting
 the existing configuration file.
 
---- CMakeLists.txt.orig        2025-12-07 16:18:50.000000000 +0000
+--- CMakeLists.txt.orig        2026-05-28 12:42:49.000000000 +0000
 +++ CMakeLists.txt
-@@ -4,7 +4,7 @@
- #
- cmake_minimum_required(VERSION 3.5.0)
- project(zoneminder)
--file(STRINGS "version" zoneminder_VERSION)
-+file(STRINGS "version.txt" zoneminder_VERSION)
- # make API version a minor of ZM version
- set(zoneminder_API_VERSION "${zoneminder_VERSION}.1")
- 
-@@ -269,7 +271,9 @@ check_include_file("ucontext.h" HAVE_UCO
+@@ -329,7 +329,9 @@ check_include_file("ucontext.h" HAVE_UCO
  check_include_file("sys/sendfile.h" HAVE_SYS_SENDFILE_H)
  check_include_file("sys/syscall.h" HAVE_SYS_SYSCALL_H)
  check_function_exists("syscall" HAVE_SYSCALL)
@@ -33,17 +22,16 @@ the existing configuration file.
  check_function_exists("posix_memalign" HAVE_POSIX_MEMALIGN)
  check_type_size("siginfo_t" HAVE_SIGINFO_T)
  check_type_size("ucontext_t" HAVE_UCONTEXT_T)
-@@ -280,7 +284,8 @@ if(UNIX)
-   include(CheckLibraryExists)
-   CHECK_LIBRARY_EXISTS(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME)
-   if(NOT HAVE_CLOCK_GETTIME)
--    message(FATAL_ERROR "clock_gettime not found")
-+    # \todo Explain why just skipping this is ok.
-+    #message(FATAL_ERROR "clock_gettime not found")
-   else()
-     list(APPEND ZM_BIN_LIBS "-lrt")
-   endif()
-@@ -873,8 +877,8 @@ else()
+@@ -741,7 +743,7 @@
+ # Check all required modules at once
+ # TODO: Add checking for the optional modules
+ find_package(
+-  PerlModules COMPONENTS Sys::Syslog DBI DBD::mysql
++  PerlModules COMPONENTS Sys::Syslog DBI DBD::MariaDB
+   Getopt::Long Time::HiRes Date::Manip LWP::UserAgent
+   ExtUtils::MakeMaker ${ZM_MMAP_PERLPACKAGE})
+ if(NOT PERLMODULES_FOUND)
+@@ -839,8 +841,8 @@ else()
  endif()
  
  # Install zm.conf
Index: pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm
diff -u pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm:1.4 pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm:1.5
--- pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm:1.4   Sun Dec  1 13:49:48 2024
+++ pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm       Thu Jul 30 12:36:00 2026
@@ -1,24 +1,29 @@
-$NetBSD: patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm,v 1.4 2024/12/01 13:49:48 gdt Exp $
+$NetBSD: patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm,v 1.5 2026/07/30 12:36:00 gdt Exp $
 
-Perl doesn't really support "> /dev/null", so just capture into $output.
+Comment that appears no longer relevant, probably because upstream has
+avoided the problem it was about.  Deletion  candidate.
 
-% ktruss -i perl -e 'qx(does-not-exist >/dev/null 2>&1);'|egrep 'dup2.*2'
-does-not-exist: not found
-% ktruss -i perl -e 'qx(does-not-exist 2>&1);'|egrep 'dup2.*2'           
- 16954      1 perl     dup2(0x1, 0x2)              = 2
-
-The problem is that, whilst Perl supports 2>&1 internally (and does not use
-the shell at all) if there is no other redirection, it does not support file
-redirection - it defers that (and therefore necessarily must also defer the
-stderr redirection) to the shell.  If the system's shell happens to report
-"Not found" errors before redirection is processed (E.g. NetBSD shell) then
-the stderr redirection is happening too late to be captured.
+  Perl doesn't really support "> /dev/null", so just capture into $output.
 
-That leads to unintended errors reported on stderr - primarily if sudo is not
-installed on the system, or not in the $PATH.
+  % ktruss -i perl -e 'qx(does-not-exist >/dev/null 2>&1);'|egrep 'dup2.*2'
+  does-not-exist: not found
+  % ktruss -i perl -e 'qx(does-not-exist 2>&1);'|egrep 'dup2.*2'           
+   16954      1 perl     dup2(0x1, 0x2)              = 2
+
+  The problem is that, whilst Perl supports 2>&1 internally (and does not use
+  the shell at all) if there is no other redirection, it does not support file
+  redirection - it defers that (and therefore necessarily must also defer the
+  stderr redirection) to the shell.  If the system's shell happens to report
+  "Not found" errors before redirection is processed (E.g. NetBSD shell) then
+  the stderr redirection is happening too late to be captured.
+
+  That leads to unintended errors reported on stderr - primarily if sudo is not
+  installed on the system, or not in the $PATH.
 
 Use the -m parameter to su, as ZM_WEB_USER shouldn't require a login shell.
 
+\todo Assess and report upstream.
+
 --- scripts/ZoneMinder/lib/ZoneMinder/General.pm.orig  2023-02-23 21:44:01.000000000 +0000
 +++ scripts/ZoneMinder/lib/ZoneMinder/General.pm
 @@ -92,7 +92,7 @@ sub getCmdFormat {
Index: pkgsrc/security/zoneminder/patches/patch-src_zm__utils.cpp
diff -u pkgsrc/security/zoneminder/patches/patch-src_zm__utils.cpp:1.4 pkgsrc/security/zoneminder/patches/patch-src_zm__utils.cpp:1.5
--- pkgsrc/security/zoneminder/patches/patch-src_zm__utils.cpp:1.4      Sun Dec  1 13:49:48 2024
+++ pkgsrc/security/zoneminder/patches/patch-src_zm__utils.cpp  Thu Jul 30 12:36:00 2026
@@ -1,12 +1,14 @@
-$NetBSD: patch-src_zm__utils.cpp,v 1.4 2024/12/01 13:49:48 gdt Exp $
+$NetBSD: patch-src_zm__utils.cpp,v 1.5 2026/07/30 12:36:00 gdt Exp $
 
-Avoid assuming linux on arm.  For now, assume neon.
+Fix time types.
 
-Fix time types (sizes).
+Hack around arm detection woes.
 
---- src/zm_utils.cpp.orig      2023-02-23 21:44:01.000000000 +0000
+\todo Send time upstream and fix arm problems.
+
+--- src/zm_utils.cpp.orig      2026-05-28 12:42:49.000000000 +0000
 +++ src/zm_utils.cpp
-@@ -183,7 +183,7 @@ std::string TimevalToString(timeval tv) 
+@@ -215,7 +215,7 @@ std::string TimevalToString(timeval tv) 
      return "";
    }
  
@@ -15,21 +17,14 @@ Fix time types (sizes).
  }
  
  /* Detect special hardware features, such as SIMD instruction sets */
-@@ -231,13 +231,15 @@ void HwCapsDetect() {
-   unsigned long auxval = 0;
+@@ -264,8 +264,8 @@ void HwCapsDetect() {
    elf_aux_info(AT_HWCAP, &auxval, sizeof(auxval));
    if (auxval & HWCAP_NEON) {
--  #error Unsupported OS.
--  #endif
+ #else
+-  {
+-#error Unsupported OS.
++#   warning COULD NOT DETECT NEON - ASSUMING NOT PRESENT
++    if (0) {
+ #endif
      Debug(1,"Detected ARM (AArch32) processor with Neon");
      neonversion = 1;
-   } else {
-     Debug(1,"Detected ARM (AArch32) processor");
-   }
-+#  else
-+    Debug(1,"!!ASSUMING!! ARM (AArch32) processor with Neon");
-+    neonversion = 1;
-+#  endif
- #elif defined(__aarch64__)
-   // ARM processor in 64bit mode
-   // Neon is mandatory, no need to check for it
Index: pkgsrc/security/zoneminder/patches/patch-src_zm_signal_cpp
diff -u pkgsrc/security/zoneminder/patches/patch-src_zm_signal_cpp:1.4 pkgsrc/security/zoneminder/patches/patch-src_zm_signal_cpp:1.5
--- pkgsrc/security/zoneminder/patches/patch-src_zm_signal_cpp:1.4      Sun Dec  1 13:49:48 2024
+++ pkgsrc/security/zoneminder/patches/patch-src_zm_signal_cpp  Thu Jul 30 12:36:00 2026
@@ -1,28 +1,44 @@
-$NetBSD: patch-src_zm_signal_cpp,v 1.4 2024/12/01 13:49:48 gdt Exp $
+$NetBSD: patch-src_zm_signal_cpp,v 1.5 2026/07/30 12:36:00 gdt Exp $
 
 Don't assume machine-dependent IP register details are available for any
 platform except Linux.  Only Linux is sure to have this style of mcontext_t.
+Instead, add an #else for NetBSD.
 
-Resolves build on systems that have ucontext_t but an mcontext_t that
-doesn't look like Linux.
+\todo File upstream.
 
---- src/zm_signal.cpp.orig     2018-12-08 14:22:36.000000000 +0000
+--- src/zm_signal.cpp.orig     2026-05-28 12:42:49.000000000 +0000
 +++ src/zm_signal.cpp
-@@ -66,13 +66,17 @@ RETSIGTYPE zm_die_handler(int signal)
-           #if defined(__FreeBSD_kernel__) || defined(__FreeBSD__) 
-               ip = (void *)(uc->uc_mcontext.mc_rip);
-           #else
-+              #if defined(__linux__)
-               ip = (void *)(uc->uc_mcontext.gregs[REG_RIP]);
-+              #endif
-           #endif
-     #else
-           #if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
-               ip = (void *)(uc->uc_mcontext.mc_eip);
-           #else
-+              #if defined(__linux__)
-               ip = (void *)(uc->uc_mcontext.gregs[REG_EIP]);
-+              #endif
-           #endif
-     #endif                            // defined(__x86_64__)
- 
+@@ -118,6 +118,8 @@ RETSIGTYPE zm_die_handler(int signal)
+ #if defined(__x86_64__)
+ #if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
+     ip = (void *)(uc->uc_mcontext.mc_rip);
++#elif defined(__NetBSD__)
++    ip = (void *) _UC_MACHINE_PC(uc);
+ #elif defined(__OpenBSD__)
+     ip = (void *)(uc->sc_rip);
+ #else
+@@ -126,18 +128,24 @@ RETSIGTYPE zm_die_handler(int signal)
+ #elif defined(__i386__)
+ #if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
+     ip = (void *)(uc->uc_mcontext.mc_eip);
++#elif defined(__NetBSD__)
++    ip = (void *) _UC_MACHINE_PC(uc);
+ #else
+     ip = (void *)(uc->uc_mcontext.gregs[REG_EIP]);
+ #endif
+ #elif defined(__aarch64__)
+ #if defined(__FreeBSD__)
+     ip = (void *)(uc->uc_mcontext.mc_gpregs.gp_elr);
++#elif defined(__NetBSD__)
++    ip = (void *) _UC_MACHINE_PC(uc);
+ #else
+     ip = (void *)(uc->uc_mcontext.pc);
+ #endif
+ #elif defined(__arm__)
+ #if defined(__FreeBSD__)
+     ip = (void *)(uc->uc_mcontext.__gregs[_REG_PC]);
++#elif defined(__NetBSD__)
++    ip = (void *) _UC_MACHINE_PC(uc);
+ #else
+     ip = (void *)(uc->uc_mcontext.arm_pc);
+ #endif

Index: pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_ConfigData.pm.in
diff -u pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_ConfigData.pm.in:1.2 pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_ConfigData.pm.in:1.3
--- pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_ConfigData.pm.in:1.2     Sun Dec  1 13:49:48 2024
+++ pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_ConfigData.pm.in Thu Jul 30 12:36:00 2026
@@ -1,10 +1,10 @@
-$NetBSD: patch-scripts_ZoneMinder_lib_ZoneMinder_ConfigData.pm.in,v 1.2 2024/12/01 13:49:48 gdt Exp $
+$NetBSD: patch-scripts_ZoneMinder_lib_ZoneMinder_ConfigData.pm.in,v 1.3 2026/07/30 12:36:00 gdt Exp $
 
-Inhibit a couple of "phone home" options that are enabled by default.  These
-should be opt-in rather than opt-out.
+Disable check-for-updates ("phone home") by default.  pkgsrc doctrine is
+that phone-home behavior, unless opted into by the user, is a bug.
 
-The ConfigData.pm module determines what the default setting is for new
-options during an upgrade as well as on an initial installation.
+\todo Perhaps discuss with upstream, but this is a difference in
+judgement rather than a clear bug.
 
 --- scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in.orig    2018-12-08 14:22:36.000000000 +0000
 +++ scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in
Index: pkgsrc/security/zoneminder/patches/patch-scripts_zmpkg_pl_in
diff -u pkgsrc/security/zoneminder/patches/patch-scripts_zmpkg_pl_in:1.2 pkgsrc/security/zoneminder/patches/patch-scripts_zmpkg_pl_in:1.3
--- pkgsrc/security/zoneminder/patches/patch-scripts_zmpkg_pl_in:1.2    Sun Dec  1 13:49:48 2024
+++ pkgsrc/security/zoneminder/patches/patch-scripts_zmpkg_pl_in        Thu Jul 30 12:36:00 2026
@@ -1,4 +1,4 @@
-$NetBSD: patch-scripts_zmpkg_pl_in,v 1.2 2024/12/01 13:49:48 gdt Exp $
+$NetBSD: patch-scripts_zmpkg_pl_in,v 1.3 2026/07/30 12:36:00 gdt Exp $
 
 The systemd check in zmpkg.pl does not work, even on systems that use
 systemd.  It fails to start, eventually timing out, if there is any
@@ -10,9 +10,9 @@ Add sleep to avoid suspected race condit
 
 \todo After catching up, actually debug and/or send upstream.
 
---- scripts/zmpkg.pl.in.orig   2018-12-08 14:22:36.000000000 +0000
+--- scripts/zmpkg.pl.in.orig   2026-05-28 12:42:49.000000000 +0000
 +++ scripts/zmpkg.pl.in
-@@ -143,7 +143,7 @@ if ( $command eq 'state' ) {
+@@ -146,7 +146,7 @@ if ( $command eq 'state' ) {
  } # end if command = state
  
  # Check if we are running systemd and if we have been called by the system
@@ -21,10 +21,10 @@ Add sleep to avoid suspected race condit
  # We have to detaint to keep perl from complaining
    $command = $1;
  
-@@ -191,6 +191,15 @@ if ( $command =~ /^(?:start|restart)$/ )
- 
+@@ -196,6 +196,16 @@ if ( $command =~ /^(?:start|restart)$/ )
      zmMemTidy();
      runCommand('zmdc.pl startup');
+ 
 +    Info("Sleeping 2 seconds to avoid zmdc.pl race.");
 +    # Somehow, on at least NetBSD 9 amd64, a future zmdc.pl start
 +    # command succeeds in starting the daemon, but does not exit.
@@ -34,6 +34,7 @@ Add sleep to avoid suspected race condit
 +    # without hanging.
 +    sleep(2);
 +    Info("Sleeping complete.");
- 
++
      my $Server = undef;
-     my $sql;
+     my @monitors;
+     if ( $Config{ZM_SERVER_ID} ) {

Index: pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_Memory_Shared.pm
diff -u pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_Memory_Shared.pm:1.3 pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_Memory_Shared.pm:1.4
--- pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_Memory_Shared.pm:1.3     Sun Dec  1 13:49:48 2024
+++ pkgsrc/security/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_Memory_Shared.pm Thu Jul 30 12:36:00 2026
@@ -1,8 +1,10 @@
-$NetBSD: patch-scripts_ZoneMinder_lib_ZoneMinder_Memory_Shared.pm,v 1.3 2024/12/01 13:49:48 gdt Exp $
+$NetBSD: patch-scripts_ZoneMinder_lib_ZoneMinder_Memory_Shared.pm,v 1.4 2026/07/30 12:36:00 gdt Exp $
 
-Adjust for (more) modern perl.
+Add a comment leftover from a previous debugging attempt.
+This entire patchfile is a deletion candidate.
 
-Not submitted upstream because pkgsrc is woefully out of date.
+Not submitted upstream because pkgsrc does not have a coherent story
+about this proposed patch.
 
 --- scripts/ZoneMinder/lib/ZoneMinder/Memory/Shared.pm.orig    2023-02-23 21:44:01.000000000 +0000
 +++ scripts/ZoneMinder/lib/ZoneMinder/Memory/Shared.pm

Index: pkgsrc/security/zoneminder/patches/patch-scripts_zm_in
diff -u pkgsrc/security/zoneminder/patches/patch-scripts_zm_in:1.6 pkgsrc/security/zoneminder/patches/patch-scripts_zm_in:1.7
--- pkgsrc/security/zoneminder/patches/patch-scripts_zm_in:1.6  Sun Dec  1 13:49:48 2024
+++ pkgsrc/security/zoneminder/patches/patch-scripts_zm_in      Thu Jul 30 12:36:00 2026
@@ -1,10 +1,12 @@
-$NetBSD: patch-scripts_zm_in,v 1.6 2024/12/01 13:49:48 gdt Exp $
+$NetBSD: patch-scripts_zm_in,v 1.7 2026/07/30 12:36:00 gdt Exp $
 
 /etc/rc.d/init.d/functions doesn't commonly exist.
 
 The LOCKFILE feature appears unused, and requires a /var/lock/subsys directory
 we don't have.
 
+\todo Address with upstream.
+
 --- scripts/zm.in.orig 2016-02-03 18:40:30.000000000 +0000
 +++ scripts/zm.in
 @@ -7,12 +7,12 @@
Index: pkgsrc/security/zoneminder/patches/patch-src_zm__rtp__source.cpp
diff -u pkgsrc/security/zoneminder/patches/patch-src_zm__rtp__source.cpp:1.6 pkgsrc/security/zoneminder/patches/patch-src_zm__rtp__source.cpp:1.7
--- pkgsrc/security/zoneminder/patches/patch-src_zm__rtp__source.cpp:1.6        Tue Jan  6 17:51:37 2026
+++ pkgsrc/security/zoneminder/patches/patch-src_zm__rtp__source.cpp    Thu Jul 30 12:36:00 2026
@@ -1,26 +1,26 @@
-$NetBSD: patch-src_zm__rtp__source.cpp,v 1.6 2026/01/06 17:51:37 gdt Exp $
+$NetBSD: patch-src_zm__rtp__source.cpp,v 1.7 2026/07/30 12:36:00 gdt Exp $
 
-Fix type issue with tv_sec; see earlier patches.
+Fix type issue with tv_usec.
 
---- src/zm_rtp_source.cpp.orig 2026-01-06 13:05:00.000000000 +0000
+\todo Send upstream.
+
+--- src/zm_rtp_source.cpp.orig 2026-05-28 12:42:49.000000000 +0000
 +++ src/zm_rtp_source.cpp
-@@ -196,7 +196,7 @@ void RtpSource::updateRtcpData(
-     uint32_t rtpTime) {
-   struct timeval ntpTime = tvMake(ntpTimeSecs, suseconds_t((USEC_PER_SEC*(ntpTimeFrac>>16))/(1<<16)));
+@@ -203,7 +203,7 @@ void RtpSource::updateRtcpData(
+   timeval ntpTime = zm::chrono::duration_cast<timeval>(
+                       Seconds(ntpTimeSecs) + Microseconds((Microseconds::period::den * (ntpTimeFrac >> 16)) / (1 << 16)));
  
 -  Debug(5, "ntpTime: %jd.%06ld, rtpTime: %x", static_cast<intmax_t>(ntpTime.tv_sec), ntpTime.tv_usec, rtpTime);
 +  Debug(5, "ntpTime: %jd.%06ld, rtpTime: %x", static_cast<intmax_t>(ntpTime.tv_sec), static_cast<long>(ntpTime.tv_usec), rtpTime);
  
    if ( mBaseTimeNtp.tv_sec == 0 ) {
-     mBaseTimeReal = tvNow();
-@@ -205,8 +205,8 @@ void RtpSource::updateRtcpData(
-   } else if ( !mRtpClock ) {
+     mBaseTimeReal = std::chrono::system_clock::now();
+@@ -213,7 +213,7 @@ void RtpSource::updateRtcpData(
      Debug(5, "lastSrNtpTime: %jd.%06ld, rtpTime: %x"
-         "ntpTime: %jd.%06ld, rtpTime: %x",
--        static_cast<intmax_t>( mLastSrTimeNtp.tv_sec), mLastSrTimeNtp.tv_usec, rtpTime,
--        static_cast<intmax_t>(ntpTime.tv_sec), ntpTime.tv_usec, rtpTime);
-+        static_cast<intmax_t>( mLastSrTimeNtp.tv_sec), static_cast<long>(mLastSrTimeNtp.tv_usec), rtpTime,
-+      static_cast<intmax_t>(ntpTime.tv_sec), static_cast<long>(ntpTime.tv_usec), rtpTime);
+           "ntpTime: %jd.%06ld, rtpTime: %x",
+           static_cast<intmax_t>(mLastSrTimeNtp.tv_sec), mLastSrTimeNtp.tv_usec, rtpTime,
+-          static_cast<intmax_t>(ntpTime.tv_sec), ntpTime.tv_usec, rtpTime);
++          static_cast<intmax_t>(ntpTime.tv_sec), static_cast<long>(ntpTime.tv_usec), rtpTime);
  
-     double diffNtpTime = tvDiffSec( mBaseTimeNtp, ntpTime );
-     uint32_t diffRtpTime = rtpTime - mBaseTimeRtp;
+     FPSeconds diffNtpTime =
+       zm::chrono::duration_cast<Microseconds>(ntpTime) - zm::chrono::duration_cast<Microseconds>(mBaseTimeNtp);

Added files:

Index: pkgsrc/security/zoneminder/patches/patch-src_zm__comms.h
diff -u /dev/null pkgsrc/security/zoneminder/patches/patch-src_zm__comms.h:1.1
--- /dev/null   Thu Jul 30 12:36:01 2026
+++ pkgsrc/security/zoneminder/patches/patch-src_zm__comms.h    Thu Jul 30 12:36:00 2026
@@ -0,0 +1,14 @@
+$NetBSD: patch-src_zm__comms.h,v 1.1 2026/07/30 12:36:00 gdt Exp $
+
+\todo Disable, reproduce error, and file upstream.
+
+--- src/zm_comms.h.orig        2026-07-26 00:41:38.146240669 +0000
++++ src/zm_comms.h
+@@ -26,6 +26,7 @@
+ #include <cerrno>
+ #include <netdb.h>
+ #include <set>
++#include <strings.h>
+ #include <sys/uio.h>
+ #include <sys/un.h>
+ #include <unistd.h>
Index: pkgsrc/security/zoneminder/patches/patch-src_zm__remote__camera__nvsocket.cpp
diff -u /dev/null pkgsrc/security/zoneminder/patches/patch-src_zm__remote__camera__nvsocket.cpp:1.1
--- /dev/null   Thu Jul 30 12:36:01 2026
+++ pkgsrc/security/zoneminder/patches/patch-src_zm__remote__camera__nvsocket.cpp       Thu Jul 30 12:36:00 2026
@@ -0,0 +1,18 @@
+$NetBSD: patch-src_zm__remote__camera__nvsocket.cpp,v 1.1 2026/07/30 12:36:00 gdt Exp $
+
+Add missing include on NetBSD.
+
+\todo File upstream.
+
+--- src/zm_remote_camera_nvsocket.cpp.orig     2026-07-26 00:42:57.983592814 +0000
++++ src/zm_remote_camera_nvsocket.cpp
+@@ -32,6 +32,9 @@
+ #ifdef __FreeBSD__
+ #include <netinet/in.h>
+ #endif
++#ifdef __NetBSD__
++#include <netinet/in.h>
++#endif
+ 
+ RemoteCameraNVSocket::RemoteCameraNVSocket(
+   const Monitor *monitor,
Index: pkgsrc/security/zoneminder/patches/patch-web_includes_database.php
diff -u /dev/null pkgsrc/security/zoneminder/patches/patch-web_includes_database.php:1.1
--- /dev/null   Thu Jul 30 12:36:01 2026
+++ pkgsrc/security/zoneminder/patches/patch-web_includes_database.php  Thu Jul 30 12:36:00 2026
@@ -0,0 +1,22 @@
+$NetBSD: patch-web_includes_database.php,v 1.1 2026/07/30 12:36:00 gdt Exp $
+
+In order to function in the presence of the latest p5-DBD-msyql --
+which refuse to work with MariaDB, we need to have the user patch the
+ZM_DB_TYPE to MariaDB so that the DBD::MariaDB is used.  However, in
+the land of PHP, there is only php-pdo_mysql, which does both.  Thus,
+point MariaDB-using systems at it.
+
+https://github.com/ZoneMinder/zoneminder/issues/5008
+
+--- web/includes/database.php.orig     2026-05-28 08:42:49.000000000 -0400
++++ web/includes/database.php  2026-07-28 18:39:21.597037296 -0400
+@@ -31,6 +31,9 @@
+   global $dbConn;
+ 
+   $dsn = ZM_DB_TYPE;
++  if ( $dsn = 'MariaDB' ) {
++    $dsn = 'mysql';
++  }
+   if ( ZM_DB_HOST ) {
+     if ( strpos(ZM_DB_HOST, ':') ) {
+       // Host variable may carry a port or socket.



Home | Main Index | Thread Index | Old Index