hunk.code_window:  * @param {Request} request
    * @param {Response} response
    * @returns {Promise}
    */
   const cacheRequest = async (request, response) => {
       // don't even attempt to cache:
       //  - error pages (why cache that?)
       //  - non-"basic" response types, which include tracker 1-time opaque requests
  
hunk.labels: keep keep keep keep add keep keep keep
hunk.after_edit:     // only attempts to cache local or cdn delivered urls
       const url = new URL(request.url);
       if (url.hostname !== scopeURL.hostname && (!cdnURL || url.hostname !== cdnURL.hostname)) {
           console.error(`ignoring cache for ${request.url} => ${url.hostname}, local: ${scopeURL.hostname}, cdn: ${cdnURL ? cdnURL.hostname : cdnURL}`);
           return;
       }
  
hunk.file_path: addons/website_event_track/static/src/js/service_worker.js
hunk.type: add
file: #!/usr/bin/env bash
  set -o errexit
  set -o nounset
  set -o pipefail
  # set -o xtrace
  
  __dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  __file="${__dir}/$(basename "${BASH_SOURCE[0]}")"
  __base="$(basename ${__file} .sh)"
  
  # Recommends: antiword, graphviz, ghostscript, python-gevent, poppler-utils
  export DEBIAN_FRONTEND=noninteractive
  echo "nameserver 8.8.8.8" >> /etc/resolv.conf
  
  # set locale to en_US
  echo "set locale to en_US"
  echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc
  echo "export LANG=en_US.UTF-8" >> ~/.bashrc
  echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
  locale-gen
  source ~/.bashrc
  
  apt-mark hold firmware-brcm80211
  # upgrade firmware-brcm80211 broke access point on rpi4
  apt-get update && apt-get -y upgrade
  # Do not be too fast to upgrade to more recent firmware and kernel than 4.38
  # Firmware 4.44 seems to prevent the LED mechanism from working
  
  PKGS_TO_INSTALL="
      console-data \
      cups \
      cups-ipp-utils \
      dbus \
      dbus-x11 \
      dnsmasq \
      firefox-esr \
      fswebcam \
      git \
      hostapd \
      iw \
      kpartx \
      libcups2-dev \
      libpq-dev \
      lightdm \
      localepurge \
      nginx-full \
      openbox \
      printer-driver-all \
      python-cups \
      python3 \
      python3-babel \
      python3-dateutil \
      python3-decorator \
      python3-dev \
      python3-docutils \
      python3-feedparser \
      python3-html2text \
      python3-jinja2 \
      python3-ldap \
      python3-libsass \
      python3-lxml \
      python3-mako \
      python3-mock \
      python3-netifaces \
      python3-passlib \
      python3-pil \
      python3-pip \
      python3-psutil \
      python3-psycopg2 \
      python3-pydot \
      python3-pyparsing \
      python3-pypdf2 \
      python3-qrcode \
      python3-reportlab \
      python3-requests \
      python3-serial \
      python3-tz \
      python3-urllib3 \
      python3-werkzeug \
      rsync \
      screen \
      unclutter \
      vim \
      x11-utils \
      xdotool \
      xserver-xorg-input-evdev \
      xserver-xorg-video-dummy \
      xserver-xorg-video-fbdev"
  
  echo "Acquire::Retries "16";" > /etc/apt/apt.conf.d/99acquire-retries
  # KEEP OWN CONFIG FILES DURING PACKAGE CONFIGURATION
  # http://serverfault.com/questions/259226/automatically-keep-current-version-of-config-files-when-apt-get-install
  apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install ${PKGS_TO_INSTALL}
  
  apt-get clean
  localepurge
  rm -rfv /usr/share/doc
  
  # python-usb in wheezy is too old
  # the latest pyusb from pip does not work either, usb.core.find() never returns
  # this may be fixed with libusb>2:1.0.11-1, but that's the most recent one in raspbian
  # so we install the latest pyusb that works with this libusb.
  # Even in stretch, we had an error with langid (but worked otherwise)
  # We fixe the version of evdev to 1.2.0 because in 1.3.0 we have a RuntimeError in 'get_event_loop()'
  PIP_TO_INSTALL="
      evdev==1.2.0 \
      gatt \
      polib \
      pycups \
      pyusb \
      v4l2"
  
  pip3 install ${PIP_TO_INSTALL}
  
  # Dowload MPD server and library for Six terminals
  wget 'https://nightly.odoo.com/master/iotbox/eftdvs' -P /usr/local/bin/
  chmod +x /usr/local/bin/eftdvs
  wget 'https://nightly.odoo.com/master/iotbox/eftapi.so' -P /usr/lib/
  
  groupadd usbusers
  usermod -a -G usbusers pi
  usermod -a -G lp pi
  usermod -a -G input lightdm
  mkdir -v /var/log/odoo
  chown pi:pi /var/log/odoo
  chown pi:pi -R /home/pi/odoo/
  
  # logrotate is very picky when it comes to file permissions
  chown -R root:root /etc/logrotate.d/
  chmod -R 644 /etc/logrotate.d/
  chown root:root /etc/logrotate.conf
  chmod 644 /etc/logrotate.conf
  
  echo "* * * * * rm /var/run/odoo/sessions/*" | crontab -
  
  update-rc.d -f hostapd remove
  update-rc.d -f nginx remove
  update-rc.d -f dnsmasq remove
  update-rc.d timesyncd defaults
  
  systemctl enable ramdisks.service
  systemctl enable led-status.service
  systemctl disable dphys-swapfile.service
  systemctl enable ssh
  systemctl set-default graphical.target
  systemctl disable getty@tty1.service
  systemctl enable autologin@.service
  systemctl disable systemd-timesyncd.service
  systemctl unmask hostapd.service
  systemctl disable hostapd.service
  systemctl disable cups-browsed.service
  
  # disable overscan in /boot/config.txt, we can't use
  # overwrite_after_init because it's on a different device
  # (/dev/mmcblk0p1) and we don't mount that afterwards.
  # This option disables any black strips around the screen
  # cf: https://www.raspberrypi.org/documentation/configuration/raspi-config.md
  echo "disable_overscan=1" >> /boot/config.txt
  
  # Separate framebuffers for both screens on RPI4
  sed -i '/dtoverlay/d' /boot/config.txt
  
  # exclude /drivers folder from git info to be able to load specific drivers
  echo "addons/hw_drivers/iot_devices/" > /home/pi/odoo/.git/info/exclude
  
  # create dirs for ramdisks
  create_ramdisk_dir () {
      mkdir -v "${1}_ram"
  }
  
  create_ramdisk_dir "/var"
  create_ramdisk_dir "/etc"
  create_ramdisk_dir "/tmp"
  mkdir -v /root_bypass_ramdisks
  